Zookeeper选举机制
作者:快盘下载 人气:一. zk的选举机制中的概念;
SID;服务器ID。用来唯一标识一台ZooKeeper集群中的机器;每台机器不能重复;和myid一致。
ZXID;事务ID。ZXID是一个事务ID;用来标识一次服务器状态的变更。在某一时刻;集群中的每台机器的ZXID值不一定完全一致;这和 ZooKeeper服务器对于客户端“更新请求”的处理逻辑有关。
Epoch;每个Leader任期的代号。没有Leader时同一轮投票过程中的逻辑时钟值是相同的。每投完一次票这个数据就会增加。
LOOKING;选举中;正在寻找Leader
FOLLOWING;随从状态;同步leader状态;参与投票
Leader;领导者;差不多是master;在zookeeper中只有leader才有写的权限;following只有读的权限
OBSERVING;观察者状态;不同leader状态;不参与投票
二.核心选举原则;
- Zookeeper集群中只有超过半数以上的服务器启动;集群才能正常工作;
- 在集群正常工作之前;myid小的服务器给myid大的服务器投票;直到集群正常工作;选出Leader;
- 选出Leader之后;之前的服务器状态由Looking改变为Following;以后的服务器都是Follower。
- 如果集群没有Leader;非全新选举;;Epoch大的服务器当选leader;
如果Epoch相等;比较ZXID;事物ID;;事物ID大的;当选leader;
如果Epoch相等;ZXID相等;则比较myId;服务器id;;服务器id大的当选Leader;服务器id是不重复;
三.选举机制类型;
1、全新集群选举;第一次启动;;
假设目前有三台服务器;分别是1号、2号、3号;
首先1号启动;启动一次选举;1号投给自己一票;由于其他服务器没有启动;无法收到1号的投票信息;此时1号处于Looking;竞选状态;;
2号启动;启动选举;2号给自己投一票;并且与1号交换信息;此时1号发现2号的myId比自己投票服务器;服务器1;的myId大;此时1号0票;2号2票;2>(3/2);服务器2的票数最多;超过半数;那么2号当选leader;1号更改状态为following;2号更改状态为leading;
3号启动;启动选举;给自己投一票;此时与之前启动的1号、2号交换信息;此时1号、2号并没有处于Looking;竞选中;状态;不会更改选举状态;3号一票;服从多数;此时3号更改状态为following;
注意;当集群服务器有5台时;前面的服务器1和服务器2;都是LOOKING;服务器1票数为0;服务器2票数为2;当启动第三台服务器时;服务器3的myid大;服务器2会把票数给服务器3;;服务器启动会给自己投一票;这时服务器3票数为3选为Leader;其他的都是follow;之后启动的服务器也是follow;
2、非全新集群选举;非第一次启动;;
-
如果leader服务器挂了;那么整个集群将暂停对外服务;进入新一轮leader选举;其过程和启动时期的leader选举过程基本一致。Leader挂掉后;余下的服务器都将自己的服务器状态变更为looking;然后开始进入Leader选举过程。服务器1号、2号、3号;此时2号是Leader;如果2号停电挂掉之后;1号、3号无法连接到Leader;知道Leader挂了;他们就知道必须选出一个新的 Leader;于是纷纷将自己的状态都修改为 LOOKING 状态;
比如1号的ZXID;事物id;为;77;Epoch;任期代号;为;1;myid;服务器id;;1;3号的ZXID;事物id;为;80;Epoch;任期代号;为;1;myid;服务器id;;3;此时3号为leader。 -
如果follow挂掉了;此时集群还是可以对外提供服务;挂掉一个是达到整个集群总数的半数以上的;如果挂掉的follow恢复之后;还是以 Follower 的身份加入到集群中来;并且仍然以当前 Leader 的信息来同步;即使它的Epoch大于其他的服务器。
加载全部内容