Zookeeper最小集群配置

声明 本文为Gleasy原创文章,转载请指明引自Gleasy团队博客

根据Paxos算法指引,当Leader挂掉时,为了选举出一个Leader,需要至少3个以上结点存活,才可以形成多数派,从而可以选举出新的Leader。也就是说一个最小集群配置为4结点。那么Zookeeper呢,是否同样规则?

带着疑惑,在Gleasy服务器进行了实验,实验如下。
1. 起3个结点,分别为结点1,结点2,结点3

结点1:192.168.1.11

tickTime=5000
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxSessionTimeout=120000
maxClientCnxns=600
initLimit=10000
syncLimit=6
server.11=db1:2888:3888
server.12=db2:2888:3888
server.13=web1:2888:3888

结点2:192.168.1.12

tickTime=5000
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxSessionTimeout=120000
maxClientCnxns=600
initLimit=10000
syncLimit=6
server.11=db1:2888:3888
server.12=db2:2888:3888
server.13=web1:2888:3888

结点3:192.168.1.13

tickTime=5000
dataDir=/usr/local/zookeeper/data
clientPort=2181
maxSessionTimeout=120000
maxClientCnxns=600
initLimit=10000
syncLimit=6
server.11=db1:2888:3888
server.12=db2:2888:3888
server.13=web1:2888:3888

2. 启动测试程序,ZK的连接字符串为 db1:2181,db2:2181
3. 关闭结点1,测试程序工作正常
4. 开启结点1
5. 关闭结点2,测试程序依然工作正常
6. 开启结点2,关闭结点3,测试程序工作正常

由此可见,zk集群只要存活结点数大于死亡结点数,便可保证正常工作,即最小工作集群规模为2*n 1(n为可以承受挂掉的结点数)

翻看文章,找出了个中原因:

The leader election make sure that the new leader have seen all the committed messages online casino if the recovery ends successfully by making sure:
P1 Each follower only propose the follower that have seen higher or equal zxid than itself as the new leader.
P2 The recovery ends successfully only when a quorum of followers have synced up with the new leader.

文章指出,ZK的LEADER选举算法关键取决于zxid(每个结点启动之时就己决定的一个符合偏序要求的ID,相当于结点的身份证)。在进行Leader选举时,每个结点只会选举zxid大于或等于自己的结点。假如有3个结点,zxid分别为1,2,3。当3挂掉的时候,1会选1(等于自己)和2(zxid比自己大),2会选2。如此2便得到2票,顺利当选。

此条目发表在 分布式技术, 运维 分类目录。将固定链接加入收藏夹。

发表评论