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

    一、概念

    1.1 zookeeper集群的建立是为了保证数据同步,为保证数据同步,需有一个leader来管理。

    1.2 zookeeper集群中服务器的角色

    1)leader:领导者

    2)follower:跟随者,进行对leader的数据同步,参与leader的选举

    3)observer:观察者,不参与leader的选举

    1.3 zookeeper集群中服务器的状态

    1)leading:领导者leader的状态

    2)following:跟随者follower的状态

    3)looking:当需要选举leader时,所有非observer服务器的状态均转换为looking状态,进行leader选举

    4)observing:观察者observer的状态

    1.3 需要选举leader的场景

    1)服务器初始化启动

    2)服务器运行期间无法与leader保持连接

    3)超过半数的follower发生宕机

    1.4 专有名词解释

    1)myid(sid):服务器编号,在服务器的myid的文件里有注明

    2)zxid:服务器的事物id

    二、 选举原则

    假设有5台服务器

    1)服务器初始化启动 ,此时所有服务器的zxid均为0,此时只需选择sid最大的服务器作为leader即可,这里选择5号

    2)在服务器运行期间发生leader选举:

          假设5号为leader,此时宕机,且其他服务器的(sid,zxid)分别为(1,89),(2,92),(3,87),(4,88)

         ①所有非follower服务器将自己状态转换following为looking

         ②第一轮投票,所有服务器都默认将自己作为leader推荐人分别将自己的(sid,zxid)发送给其他的服务器。此时所有服务器的投票状态分别为:

             1号:(1,89)

             2号:(2,92)

             3号:(3,88)

             4号:(4,88)

          ③第二轮投票,所有服务器都接受到其他服务器的投票状态,并与自己的投票状态,比较过程如下:

                 step1:首先比较zxid,选择zxid最大的服务器(zxid越大,说明数据越新,被选举为leader的权重越大)

                 step2:若zsid相同,则继续比较sid,选择sid大的(sid越大,被选举为leader的权重越大)

                 第二轮的投票状态分别为:

                1号:(2,92)

                2号:(2,92)

                3号:(2,92)

                4号:(2,92)

                step3:当投票结构中某个服务器的得票数高于总票数的一半,则被选举为leader

         ④当新的leader被选举出来后,所有服务器要变更自己的状态

              1)leader(looking->leading)

              2)follower(looking->follwing)

  • 相关阅读:
    智能实验室-杀马(Defendio) 4.12.0.800
    智能实验室-结构化存储浏览器(SSExplorer) 1.7.0.170
    智能实验室-全能优化(Guardio) 4.94.0.830
    智能实验室-全能优化(Guardio) 4.9.0.790
    IT餐馆—第二十二回 控件
    当DiscuzNT遇上了Loadrunner(中)
    在Discuz!NT中进行缓存分层(本地缓存+memcached)
    介绍三个Silverlight 在线编辑器控件
    玩玩负载均衡在window与linux下配置nginx
    IT餐馆—第十八回 祭奠
  • 原文地址:https://www.cnblogs.com/mercuryji/p/zookeeper_selectleader.html
Copyright © 2011-2022 走看看