zookeeper集群部署方式(leader+follower+observer)

一、简介

        zookeeper是一种分布式过程协同技术。zookeeper服务器集群存在三种节点类型:leader(群首)、follower(追随者)、观察者(observer)。其中,leader和follower构成zookeeper集群的“法定人数”(参与leader的选举、响应leader提议),而observer为用于提高读取吞吐量的特殊服务器(不参与leader选举、不需要确认提议消息、不需要发送ack消息给leader服务器以及持久化事务到硬盘)。

        本文介绍zookeeper的集群部署方式,采用3台“法定”主机(1个leader、2个follower)+1台非“法定”主机(1个observer)来实现。

二、环境准备

2.1 机器准备

host ip os myid 备注
zk.master 192.168.90.171 Ubuntu 18.04.2 LTS 10
zk.slave1 192.168.90.172 Ubuntu 18.04.2 LTS 1
zk.slave2 192.168.90.173 Ubuntu 18.04.2 LTS 2
zk.observer 192.168.90.174 Ubuntu 18.04.2 LTS 9 观察者机器

其中,前三台为“法定”人选用于leader和follower,最后一台用于observer。表格中myid为zookeeper的节点标记,需要在zookeeper的data目录下的myid文件中配置。

4台机器均需要安装好jdk,本文安装的是jdk1.8,安装方法不再赘述。

2.2 关闭防火墙

本文采用ubuntu18 server版作为集群机器,Ubuntu 18.04.2 LTS附带UFW默认为禁用状态,相关操作命令:

# 查看状态
root@zk.master:~# ufw status verbose
# 激活
root@zk.master:~# ufw enable
# 关闭
root@zk.master:~# ufw disable

将2.1中4台机器的防火墙都进行关闭。

2.2 修改主机名

Ubuntu 18.04.2 LTS中不能通过/etc/hostname直接修改主机名(重启后会恢复到安装时的设置),需要先修改/etc/cloud/cloud.cfg文件:

sudo vim /etc/cloud/cloud.cfg

找到preserve_hostname将该属性值由false修改为true:

# The top level settings are used as module                                
# and system configuration.                                                
                                                                           
# A set of users which may be applied and/or used by various modules       
# when a 'default' entry is found it will reference the 'default_user'     
# from the distro configuration specified below                            
users:                                                                     
   - default                                                               
                                                                           
# If this is set, 'root' will not be able to ssh in and they               
# will get a message to login instead as the default $user                 
disable_root: true                                                         
                                                                           
# This will cause the set+update hostname module to not operate (if true)  
preserve_hostname: true                                                    
                        

修改/etc/hostname文件,设置主机名:

sudo vim /etc/hostname 

编辑文件内容为主机名后,进行重启:

sudo reboot

可以用hostnamectl set-hostname ${hostname}命令临时设置主机名

将2.1中的4台机器的主机名都进行修改。

2.3 在每台机器上配置主机名解析

编辑/etc/hosts:

sudo vim /etc/hosts

加入如下内容:

192.168.90.171    zk.master                                                
192.168.90.172    zk.slave1                                                
192.168.90.173    zk.slave2                                                
192.168.90.174    zk.observer 

2.4 上传zookeeper安装包到各个机器

2.4.1 下载zookeeper

本文下载从官网下载zookeeper,版本为3.5.5 ,地址: https://apache.org/dist/zookeeper/zookeeper-3.5.5/

2.4.2 上传到各台机器

将下载的apache-zookeeper-3.5.5-bi
n.tar.gz包上传到各台机器的/opt目录,并执行解压:

tar -zxvf apache-zookeeper-3.5.5-bi
n.tar.gz

2.5 创建hadoop用户组和用户

ps: 每台机器均执行

2.5.1 创建用户组
sudo groupadd hadoop
2.5.2 创建用户
#创建hadoop用户
sudo useradd -m hadoop -g hadoop -s /bin/bash
#设置hadoop用户密码
sudo passwd hadoop 
#把root加入hadoop分组
sudo usermod -a -G hadoop root
2.5.3 更改zk目录所属用户及分组
chown -R hadoop:hadoop /opt/apache-zookeeper-3.5.5-bin/

2.6 创建zookeeper的data和logs目录

# 切换到hadoop用户运行
su hadoop
# 切换到zookeeper目录
cd /opt/apache-zookeeper-3.5.5-bin
# 创建data目录和logs目录
mkdir data
mkdir logs

三、zookeeper配置

3.1 配置zoo.cfg

ps:每台机器都执行

cd /opt/apache-zookeeper-3.5.5-bin/conf
cp zoo_sample.cfg zoo.cfg
vi /opt/zookeeper/zoo.cfg

内容如下:

 # tickTime表示服务器之间或客户端与服务器之间心跳的时间间隔,单位为毫秒
 tickTime=2000
 # follower与leader的初始连接心跳数
 initLimit=10
 # follower与leader请求和应答的最大心跳数
 syncLimit=5
 # 快照数据保存目录
 dataDir=/opt/apache-zookeeper-3.5.5-bin/data
 # 日志保存目录
 dataLogDir=/opt/apache-zookeeper-3.5.5-bin/logs
 # 客户端连接端口
 clientPort=2181
 # 客户端最大连接数,默认为60个
 maxClientCnxns=60
 # 默认为false,设置成true,zk将监听所有可用ip地址的连接
 quorumListenOnAllIPs=false
 # 服务器节点配置,格式为:
 # server.${myid}=${host}:${leader和follower通信端口}:${选举端口}(observer节点最后加上:observer )
 server.10=zk.master:2888:3888
 server.1=zk.slave1:2888:3888
 server.2=zk.slave2:2888:3888
 server.9=zk.observer:2888:3888:observer 

上述配置在每台机器都进行设置,可在zk.master机器配置完成后执行scp命令复制到其它机器,以复制到zk.slave1机器为例:

scp -R /opt/apache-zookeeper-3.5.5-bin/conf/zoo.cfg  zk.slave1:/opt/apache-zookeeper-3.5.5-bin/conf/

3.2 observer机器配置

3.1中的配置是集群每台机器都进行配置,针对observer角色配置,在zk.observer机器的zoo.cfg上单独添加:

peerType=observer 

以此配置观察者角色。(实测在zookeeper3.5.5版本中不配置这行,观察者角色也能启动成功,读者可以验证下)

3.3 配置myid

分别配置各个机器的myid:10、1、2、9,以zk.master机器为例:

cd /opt/apache-zookeeper-3.5.5-bin/data
echo 10 > myid

其它类推。

四、zookeeper命令

4.1 配置环境变量

编辑/etc/profile文件:

sudo vim /etc/profile

在文件最后加入如下配置:

export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.5.5-bin  
export PATH=$ZOOKEEPER_HOME/bin:$PATH   

这样可以在终端直接执行zookeeper命令.

4.2 zookeeper启动

在所有节点配置完上述配置后,继续在所有节点以hadoop用户启动zookeeper:

zkServer.sh start 

可通过zkServer.sh status命令查看zookeeper状态, 例如:

hadoop@hadoop-4:~$ zkServer.sh status                                      
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

上面结果表示该节点启动成功且节点类型为leader。

通过jps命令可以查看zookeeper的java进程为QuorumPeerMain:

hadoop@hadoop-4:~$ jps
42807 Jps
42682 QuorumPeerMain

4.2 zkServer.sh其它命令

执行zkServer.sh -h命令可以看到zkServer.sh命令可选项:

hadoop@hadoop-4:~$ zkServer.sh -h                                          
ZooKeeper JMX enabled by default
Using config: /opt/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
Usage: /opt/apache-zookeeper-3.5.5-bin/bin/zkServer.sh [--config <conf-dir>
] {start|start-foreground|stop|restart|status|print-cmd}

4.3 zookeeper客户端命令

在zookeeper客户端机器上,通过执行zkCli.sh -server ${host}:${port}命令连接到服务端。例如:

zkCli.sh -server zk.slave1:2181

执行完后进入zookeeper的cli终端,最后显示:

[zk: zk.slave1:2181(CONNECTED) 0] 

执行ls /可显示根目录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336