一、服务器准备,三台服务器,部署三个zk节点
192.168.95.128 node-001
192.168.95.129 node-002
192.168.95.130 node-003
二、安装部署(node-001),其他服务器进行相同步骤即可
1. zk版本
zookeeper-3.4.10.tar.gz
2. 解压
[root@node-001 opt]# pwd
/opt
[root@node-001 opt]# tar -zxvf zookeeper-3.4.10.tar.gz
3. 配置
[root@node-001 conf]# pwd
/opt/zookeeper-3.4.10/conf
[root@node-001 conf]# cp zoo_sample.cfg zoo.cfg
[root@node-001 conf]# vi zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/opt/zookeeper-3.4.10/data
dataLogDir=/opt/zookeeper-3.4.10/logs
# the port at which the clients will connect
# 自定义端口
clientPort=2181
server.1=192.168.95.128:2888:3888
server.2=192.168.95.129:2888:3888
server.3=192.168.95.130:2888:3888
4. 上面3中各参数含义如下:
#server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
#IP为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,
集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
#tickTime:
这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
#initLimit:
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper
服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)
长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
#syncLimit:
这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
#dataDir:
快照日志的存储路径
#dataLogDir:
事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
#clientPort:
这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点
5. 创建上面配置的日志目录
dataDir=/opt/zookeeper-3.4.10/data
dataLogDir=/opt/zookeeper-3.4.10/logs
[root@node-001 zookeeper-3.4.10]# mkdir data
[root@node-001 zookeeper-3.4.10]# mkdir logs
6. 在dataDir下面创建myid(三台服务就这一步不一样,根据server.1 2 3对应值)
分别在三台主机的 dataDir 路径下创建一个文件名为 myid 的文件,文件内容为该 zk 节点的编号,分别对应值为1,2,3
7. 启动三台服务器
[root@node-001 bin]# pwd
/opt/zookeeper-3.4.10/bin
[root@node-001 bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@node-001 bin]#
8. 检查集群是否正常,查询集群状态。 由下可知 node-002被选举为了leader
[root@node-001 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@node-002 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[root@node-003 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
9. 测试集群高可用,停掉node-002 leader节点,再查询另外两台的状态。由下可知node-003被选举为了leader
[root@node-002 bin]# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@node-001 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[root@node-003 bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
三、问题
1. 查询集群状态报错,报错信息如下:
Error contacting service. It is probably not running.
解决方案:
1. 防火墙开启端口
[root@node-001 bin]# firewall-cmd --zone=public --add-port=2888/tcp --permanent
success
[root@node-001 bin]# firewall-cmd --zone=public --add-port=3888/tcp --permanent
success
[root@node-001 bin]# firewall-cmd --zone=public --add-port=2181/tcp --permanent
success
[root@node-001 bin]# firewall-cmd --reload
success
2. 上面用的是copy zoo配置文件,不能同时存在zoo_sample.cfg和zoo.cfg文件
删除sample文件
[root@node-002 bin]# rm ../conf/zoo_sample.cfg
3. 查询日志,[root@node-001 bin]# cat zookeeper.out
从上面可以看出,配置文件中端口2181后面有无效的注释代码影响到了正常启动。修改后即可。步骤3中的配置是已修改后的。直接用即可。