etcd是一种先进的key-value的存储系统,本文主要是学习etcd的心得,如有误解,敬请拍砖

主要分成三种形式的选举,先说一下etcd节点的三种状态,分别为leader,candidate和follower

第一种:初始选举

A、B、C、D现在进场,那么谁当领导呢?A(变身candidatae)就分别找BCD谈话,“我来当,你没意见吧”。B\C都没什么主见,就同意了,D虽然不同意,但是大家都这么说,只好也同意了。A就开始行使权利,定时从BCD同步日志,并发送心跳(heartbeat)

第二种,leader异常

A是领导,BCD是follower,大家正在工作。此时突然A肚子痛了上厕所(故障),BCD都有事,但是没办法汇报。BCD就商量了,咱们重新选个领导吧!于是B(变身candidate)主动单独跟C、D询问,"我来当领导,你们有意见没有?"。CD都没有意见,于是B就当了领导,那么此时A刚好回来啦,就发现这一幕,怎么办?他们就一较高下,根据日志的步进数来决定谁当领导,因为A缺席了那么久,很多消息都没有,所以就失败了。于是A清理自己的消息,变成了follower。

第三种,follower异常

同上,但是肚子痛的是C,不是A。ABD正常工作,当C回来了,就直接成为follower。

第四种,初始的follower中在同一个时间同时变身(成为candidate),

A去找C谈话了,B去跟D谈话了。C答应跟A,D答应跟B,此时A去问D就被直接拒绝了,B问C也同样被拒绝。A问B两人都是candidate,谁怕谁啊!你也拒绝我,我也拒绝你。那么四个人怎么办呢?A经过一个时间差(150ms~300ms)再次向C,D发起谈话,此时,C,D都同意了A(B还没有反应过来),此时A已经成为了leader,B发现已经有了leader了,重新成为了follower.