zoukankan      html  css  js  c++  java
  • zookeeper选举

    什么时候开始进行选举

    1.服务器初始化启动的时候
    2.服务器运行期间连接不上leader的时候

    初始化选举过程

    进行leader选举至少需要两台服务器,我们这里举例为5台服务器(1,2,3,4,5)
    1.启动服务器1,第一次投票都先投给自己[1,0]。投票内容[myid,zxid],myid为服务器的唯一标识,zxid
    是事物请求的唯一标识,从0开始,选举出leader之后由leader分配,zxid由两部分组成,高32位记录事物请求所属的轮次
    ,低32位是请求次数。此时服务器1的支持率没有达到半数以上,保持Looking状态。
    2.启动服务器2,投第一票[2,0],然后与服务器1交换投票结果。
    3.服务器1收到服务器2的投票结果以后首先检查轮询次数是否一致,然后检查服务器状态是否为Looking状态。
    4.检查通过开始PK,首先比较zxid,都为0,(如果不同, 大的胜出),然后比较myid,大的胜出。
    5.服务器1更新投票结果为[2,0],服务2pk之后胜出,无需更新投票结果,服务器2拿到两票支持,支持率没有达到半数以上,继续Looking。
    6.启动服务器3,投第一票[3,0],然后与服务器1和2交换投票结果,pk完成后,服务器1投票结果[3,0],服务器2投票结果[3,0],服务器3投票结果[3,0],此时,支持率达到半数以上,服务器3当选为leader。状态为Leading,服务器1和2分别为Following
    7.启动服务器4和5,虽然myid大于3,但是由于3已经成为leader,他们就自动跟随了。

    服务器运行时选举过程

    1.leader挂了之后,follower更新状态为Looking,开始进行选举leader
    2.开始第一轮投票,跟启动时一样,都投给自己
    3.接收其他服务器的投票,检查有效性进行pk,与启动时一样。运行时服务器的zxid可能不同,还是大的胜出
    4.统计投票
    5.选出leader,更新状态(Leading和Following)

    服务器状态

    LOOKING:寻找leader的状态
    LEADING:leader领导者状态
    FOLLOWING:跟随着状态
    OBSERVING:观察者状态

  • 相关阅读:
    Huffman树与编码
    Python引用复制,参数传递,弱引用与垃圾回收
    Git使用说明
    numpy使用指南
    Python Socket
    温故知新之 数据库的事务、隔离级别、锁
    Oracle数据库的语句级读一致性
    VirtualBox NAT方式与主机互相通信
    Linux的定时任务
    Redis学习
  • 原文地址:https://www.cnblogs.com/Smilence1024/p/8534255.html
Copyright © 2011-2022 走看看