一、下载zookeeper
二、解压
- tar -zxvf zookeeper-3.4.14.tar.gz
三、复制配置文件名称
- cd zookeeper-3.4.14/conf/
- cp zoo_sample.cfg zoo.cfg
四、修改配置文件
1# The number of milliseconds of each tick
2tickTime=2000
3# The number of ticks that the initial
4# synchronization phase can take
5initLimit=10
6# The number of ticks that can pass between
7# sending a request and getting an acknowledgement
8syncLimit=5
9# the directory where the snapshot is stored.
10# do not use /tmp for storage, /tmp here is just
11# example sakes.
12dataDir=/zookeeper/data/ #修改数据存放位置
13# the port at which the clients will connect
14dataLogDir=/zookeeper/logs #修改日志存放位置
15clientPort=2181
16# the maximum number of client connections.
17# increase this if you need to handle more clients
18#maxClientCnxns=60
19#
20# Be sure to read the maintenance section of the
21# administrator guide before turning on autopurge.
22#
23# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
24#
25# The number of snapshots to retain in dataDir
26#autopurge.snapRetainCount=3
27# Purge task interval in hours
28# Set to "0" to disable auto purge feature
29#autopurge.purgeInterval=1
30#增加集群信息
31server.1=192.168.200.128:2888:3888
32server.2=192.168.200.129:2888:3888
33server.3=192.168.200.130:2888:3888
五、设置每个节点的id
- 在zoo.cfg中对应的 dataDir 目录下执行
- echo 1 > myid 注意myid要一摸一样 1这个对应 zoo.cfg 中 集群信息 server.1
六、复制整个software目录到其他节点上
- scp -r zookeeper/ 192.168.200.129:/home/htga/
- scp -r zookeeper/ 192.168.200.130:/home/htga/
- 依次修改129和130机器上的myid
- echo 2 > myid
- echo 3 > myid
七、关闭防火墙
- systemctl stop firewalld.service #停止firewall
- systemctl disable firewalld.service #禁止firewall开机启动
- firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
八、把zookeeper目录添加到环境变量
- export ZOOKEEPER_HOME=/zookeeper/zookeeper-3.4.14/
- export PATH=$ZOOKEEPER_HOME/bin:$PATH
- export PATH
九、启动zk集群
- zookeeper-3.4.14至少启动3台节点,集群才能正常运行,一般zk集群搭建奇数节点数
- ./bin/zkServer.sh start
十、查看zookeeper运行状态
1 [root@node2 zookeeper]# zkServer.sh status
2 ZooKeeper JMX enabled by default
3 Using config: //software/zookeeper-3.4.14/bin/../conf/zoo.cfg
4 Mode: leader
集群测试
相关命令
1#启动ZK服务:
2bin/zkServer.sh start
3#停止ZK服务:
4bin/zkServer.sh stop
5#重启ZK服务:
6bin/zkServer.sh restart
7#查看ZK服务状态:
8bin/zkServer.sh status
zoo.cfg配置参数解读
1Server.1=192.168.200.128:2888:3888。
2
31 是一个数字,表示这个是第几号服务器;
4
5192.168.200.128 是这个服务器的ip地址;
6
72888 是这个服务器与集群中的Leader服务器交换信息的端口;
8
93888 是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
10
11集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
12
131)tickTime=2000:通信心跳数
14
15tickTime:通信心跳数,Zookeeper服务器心跳时间,单位毫秒
16
17Zookeeper使用的基本时间,服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个tickTime时间就会发送一个心跳,时间单位为毫秒。
18
19它用于心跳机制,并且设置最小的session超时时间为两倍心跳时间。(session的最小超时时间是2*tickTime)
20
212)initLimit=10:LF初始通信时限
22
23集群中的follower跟随者服务器(F)与leader领导者服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量),用它来限定集群中的Zookeeper服务器连接到Leader的时限。
24
25投票选举新leader的初始化时间
26
27Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。
28
29Leader允许F在initLimit时间内完成这个工作。
30
313)syncLimit=5:LF同步通信时限
32
33集群中Leader与Follower之间的最大响应时间单位,假如响应超过syncLimit * tickTime,
34
35Leader认为Follwer死掉,从服务器列表中删除Follwer。
36
37在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。
38
39如果L发出心跳包在syncLimit之后,还没有从F那收到响应,那么就认为这个F已经不在线了。
40
414)dataDir:数据文件目录+数据持久化路径
42
43保存内存数据库快照信息的位置,如果没有其他说明,更新的事务日志也保存到数据库。
44
455)clientPort=2181:客户端连接端口
46
47监听客户端连接的端口
注意事项
11. 启动第一台的时候如果查看状态显示报错,这是因为另外两台没有启动,启动第一台的时候一直在尝试连接另外两台的原因
22. 三台都启动后查看状态,如果一台状态为 Mode: leader,另外两台为Mode: follower,说明集群搭建成功
33. 如果查看状态为Error contacting service. It is probably not running
44.请查看同目录下的日志文件zookeeper.out日志,根据具体原因去解决问题
55.Caused by: java.lang.IllegalArgumentException: /zookeeper-3.4.14/data/myid file is missing
66.Datadir路径配置错误
参考网址