一、简介
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 /
可显示根目录。
网友评论