在Zookeeper中,如何让集群中的Leader自愿变为Follower?
我有四个关于ZooKeeper的问题。请给我一些建议。
在ZooKeeper中,有什么命令可以让一个领导者自愿变成跟随者,这样就会让集群中的另一个跟随者接管领导者的角色?
ZooKeeper是如何进行选举来形成集群中的领导者的?
在ZooKeeper中,有什么命令可以检查集群的状态?换句话说,ZooKeeper有没有命令可以告诉我集群的状态是否健康,以及集群是否成功形成?
1 个回答
问题1) Zookeeper的领导者降级 - 这是个好问题,除了关闭领导者然后再重新启动之外,我不太确定还有什么命令可以做到这一点。
问题2) 领导者选举:这里有一些讨论:
领导者激活 领导者激活包括领导者选举。我们现在在ZooKeeper中有两种领导者选举算法:LeaderElection和FastLeaderElection(AuthFastLeaderElection是FastLeaderElection的一种变体,它使用UDP并允许服务器进行简单的身份验证,以避免IP欺骗)。ZooKeeper的消息传递不关心选举领导者的具体方法,只要满足以下条件:
领导者必须看到了所有跟随者中最高的zxid。大多数服务器必须承诺跟随领导者。在这两个要求中,只有第一个,即跟随者中的最高zxid,必须始终满足。第二个要求,即大多数跟随者,只需要在高概率下满足。我们会重新检查第二个要求,所以如果在领导者选举期间或之后发生故障并且失去了大多数,我们将通过放弃领导者激活并进行另一次选举来恢复。
在领导者选举后,将指定一台服务器作为领导者,并开始等待跟随者连接。其余的服务器将尝试连接到领导者。领导者会通过发送它们缺失的任何提案来与跟随者同步,或者如果某个跟随者缺失的提案太多,它会向该跟随者发送状态的完整快照。
http://zookeeper.apache.org/doc/r3.3.2/zookeeperInternals.html#sc_leaderElection
问题3) 检查集群状态 - 你可以尝试在客户端端口发出四个字母的命令,比如这样:
echo ruok | nc 127.0.0.1 5111
如果一切正常,它会回复imok。
完整的命令列表在这里:https://zookeeper.apache.org/doc/r3.4.8/zookeeperAdmin.html#sc_zkCommands
或者运行JMX:http://zookeeper.apache.org/doc/r3.3.1/zookeeperJMX.html