环境参数如下:
服务器操作系统: Red Hat Enterpriser Linux 6.5 三台(IP地址分别为:192.168.5.128,192.168.5.129,192.168.5.130)
zookeeper版本: zookeeper-3.4.10
JDK版本: jdk1.8.0_144
现在先配置其中的一台服务器192.168.5.128
1 将zookeeper解压到/usr/目录下(/usr/zookeeper-3.4.10)
2 在/usr/zookeeper-3.4.10目录新新建logs,data文件夹作为zookeeper配置文件的一部分
3 在/usr/zookeeper-3.4.10/conf目录下新建配置文件zoo.cfg,可以把zoo_sample.cfg的内容复制到zoo.cfg
4 修改zoo.cfg文件的内容,配置文件内容如下:
1 # The number of milliseconds of each tick 2 tickTime=2000 3 # The number of ticks that the initial 4 # synchronization phase can take 5 initLimit=10 6 # The number of ticks that can pass between 7 # sending a request and getting an acknowledgement 8 syncLimit=5 9 # the directory where the snapshot is stored. 10 # do not use /tmp for storage, /tmp here is just 11 # example sakes. 12 dataDir=/usr/zookeeper-3.4.10/data 13 dataLogDir=/usr/zookeeper-3.4.10/logs 14 # the port at which the clients will connect 15 clientPort=2888 16 server.0=192.168.5.128:8880:7770 17 server.1=192.168.5.129:8881:7771 18 server.2=192.168.5.130:8882:7772 19 # the maximum number of client connections. 20 # increase this if you need to handle more clients 21 #maxClientCnxns=60 22 # 23 # Be sure to read the maintenance section of the 24 # administrator guide before turning on autopurge. 25 # 26 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 27 # 28 # The number of snapshots to retain in dataDir 29 #autopurge.snapRetainCount=3 30 # Purge task interval in hours 31 # Set to "0" to disable auto purge feature 32 #autopurge.purgeInterval=1
参数说明如下:
?tickTime: zookeeper中使用的基本时间单位, 毫秒值.
?dataDir: 数据目录. 可以是任意目录.
?dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.
?clientPort: 监听client连接的端口号.
其中clientPort默认是2181,可以根据实际情况修改为没有使用的端口,server.0,server.1,server.2分别是三台服务器的标识,各个参数的意义如下:
以server.0=192.168.5.128:8880:7770为例,192.168.5.128是服务器IP地址,端口8880表示在zookeeper服务器之间及和leader连接时使用,端口7770是在进行leader选举时使用,其他的server.1,server2对应的意义和server.0完全一样
5 在/usr/zookeeper-3.4.10/data目录下新建myid文件,修改myid文件内容为0,这个0是和zoo.cfg文件里面的server.0中的0是对应的
6 以上步骤完成以后,将192.168.5.128服务器上整个的zookeeper-3.4.10目录分别上传到192.168.5.129,192.168.5.130两台服务器,命令如下:
1 scp -r /usr/zookeeper-3.4.10 [email protected]:/usr/zookeeper-3.4.19 2 scp -r /usr/zookeeper-3.4.10 [email protected]:/usr/zookeeper-3.4.19
7 上传完以后,分别修改192.168.5.129服务器上/usr/zookeeper-3.4.10/data目录下的myid文件内容为1,192.168.5.130服务器上/usr/zookeeper-3.4.10/data目录下的myid文件内容为2
8 测试,先通过命令./zkServer.sh start启动任意两台服务器,然后在命令行输入./zkServer.sh status检查服务启动情况如果出现如下截图的信息:
说明是服务器防火墙的问题,把服务器的防火墙都关掉,重新输入./zkServer.sh status,如果能看到如下信息证明zookeeper集群配置成功
先在192.168.5.128上输入./zkServer.sh start,截图如下:
然后再用相同的方式启动192.168.5.129上对应的服务,截图如下:
在192.168.5.128,192.168.5.130上分别执行./zkServer.sh status检查服务情况,截图分别如下
以上图片的展示信息说明服务器192.168.5.128在集群中承担的角色是follower,192.168.5.129在集群中承担的角色是leader
现在把192.168.5.130服务器上对应的服务启动起来,通过检查确认192.,168.5.130在集群中承担的角色也是follower
现在通过命令./zkServer.sh stop把服务器192.168.5.129的zookeeper服务停掉,然后再检查每台服务器成都的角色,发现此时,集群中的leader变成了192.168.5.130这台服务器
通过以上测试可以获取如下结论:
当zookeeper集群中存在多台服务器的时候,只要存活的机器数在总服务器数目半数以上就能够正常对外提供服务,当集群中对外提供服务的服务器只有2台的情况下,节点数大的服务器被选中为leader的几率会大(例如本文章中提到的当192.168.5.129服务器停掉后,只有192.168.5.128,192.168.5.130对外提供服务,在配置文件中这两台服务器对应的节点分别是server.0,server.1,所以zookeeper会把server.1节点选择为leader节点)