Zookeeper节点失效测试
Zookeeper节点失效测试
一、Zookeeper原理
zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;同理你多列举几个:2->0;3->1;4->1;5->2;6->2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,所以为了更加高效,没必要增加偶数的那个不必要的zookeeper。
二、三节点测试
2.1配置信息
三节点测试时,zookeeper三节点的zoo.cfg文件均设置1、2、3三个节点,如下所示:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apps/zookeeper-3.4.8/data/
dataLogDir=/usr/local/apps/zookeeper-3.4.8/logs/
clientPort=2181
server.1=192.168.0.19:2888:3888
server.2=192.168.0.20:2888:3888
server.3=192.168.0.21:2888:3888
2.2操作步骤
图1 三节点命令执行结果对比图
表1 三节点操作步骤状态表
序号 | 操作步骤 | 节点1状态 | 节点2状态 | 节点3状态 |
1 | 顺序启动节点1、2、3 | follower | follower | leader |
2 | 关停leader节点3 | leader | follower | not running |
3 | 重新启动原leader节点3 | leader | follower | follower |
4 | 关停follower节点2 | leader | not running | follower |
2.3结论
由上面图表可见,三节点状态下,关停leader节点后,会自动推选出leader,关闭的节点开启后,会自动做为follower节点加入集群,关闭1个follower节点,对整个集群状态没有影响,即3节点状态下,任一一节点失效,集群仍可正常运行,始终保持有一个节点处于leader状态。
三、两节点测试
3.1配置信息
两节点测试时,zookeeper两节点的zoo.cfg文件均只保留1、2两个节点,如下所示:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/apps/zookeeper-3.4.8/data/
dataLogDir=/usr/local/apps/zookeeper-3.4.8/logs/
clientPort=2181
server.1=192.168.0.19:2888:3888
server.2=192.168.0.20:2888:3888
#server.3=192.168.0.21:2888:3888
3.2操作步骤
图2 两节点命令执行结果对比图
表2 两节点操作步骤状态表
序号 | 操作步骤 | 节点1状态 | 节点2状态 |
1 | 先启动节点2,再启动节点1 | leader | follower |
2 | 关停leader节点1 | not running | not running |
3 | 重新启动原leader节点1 | leader | follower |
4 | 关停follower节点2 | not running | not running |
3.3结论
由上面图表可见,在两节点情况下,zookeeper中leader或follower任一节点故障,都会导致整个集群不可用,因此,zookeeper两节点与单节点在故障失效率方面等效,如需构建zookeeper高可靠性架构,至少需3个zookeeper节点,且建议选择奇数个节点。