Zookeeper Leader选举

    Master选举,是分布式系统中常见的应用场景。在分布式系统中,Master往往用来协调集群中的其他系统单元,具有对分布式系统状态变更的决定权。

    比如,在读写分离应用中,客户端的写请求往往是由Master来处理(比如MySQL分布式集群),在另一些场景中,master往往处理一些复杂的逻辑,并将处理结果同步给集群中其他系统单元(比如redis,一主三从)。

 

    Master选举是zookeeper种最典型的应用场景。在zookeeper集群中,分别有leader/follower  /observer三种类型的服务器角色,Master选举就是选举出主要Leader的过程。

 

集群角色介绍:

Leader:

           是整个zookeeper集群工作机制中的核心,

           主要工作:

                       事务请求的唯一调度和处理者,保证集群事务处理的顺序性。

                       集群内部各服务器的调度者。

 

Follower:

            是zookeeper集群状态的跟随者

           主要工作:

                       处理客户端非事务请求,转发事务请求给Leader服务器

                       参与事务请求Proposal的投票

                       参与Leader选举投票

 

 

Observer:

             是3.3.0版本后引入的一个全新的服务器角色。

             观察zookeeper集群的最新状态变化并将这些状态变更同步进来。

             对于非事务请求可以处理,对于事务请求,转发给Leader服务器进行处理

              不参与任何形式的投票

 

Leader选举步骤:

   1、初始化Leader选举

             首先,每个服务器都会给自己投票

            然后,根据zoo.cfg中的配置,创建相应leader选举算法。默认提供三种:                                     LeaderElection/AuthFastLeaderElection/FastLeaderElection

            但是3.4.0之后,只有一个算法:FastLeaderElection

 

           同时创建选举所需的网络I/O层,同时启动leader选举端口的监听。

 

  2、注册JMX服务

  3、检测当前服务器状态

           正常情况下:zookeeper服务器状态在LOOKING、LEADING和FOLLOWING/OBSERVING之间的切换。

            在LOOKING状态下才可以选举

  •             LOOKING:寻找Leader状态。
  •             FOLLOWING:跟随者状态,代表该服务器角色是Follower
  •             LEADING:领导者状态,代表该服务器角色是Leader
  •             OBSERVING:观察者状态,代表该服务器角色是Observer

 

  4、Leader选举

            简而言之,就是哪个机器处理的数据越新,就越可能成为Leader

            SID:服务器ID,也就是myid

           ZXID:事务ID,用来唯一标识一次服务器状态的变更。

           epoch:当前服务器的currentEpoch

 

           如果集群中所有的机器处理的ZXID一致,那么SID最大的服务器成为Leader。

 

 

应用时期

 

注:1台机器是无法完成选举的,至少有两台才行

 

服务器启动时期的Leader选举

 

1、每个server会发出一个投票

           每次投票包含的最基本的元素包括:myid和ZXID。

           一开始每台服务器都给自己投一票:(1,0);(2,0)

2、接收来自各个服务器的投票

3、处理投票           

         针对每个投票,服务器都要将别人的投票和自己的PK:

  •     优先检查ZXID,ZXID比较大的服务器优先作为Leader。
  •     如果ZXID相同,就比较myid,myid大的作为Leader服务器。

 

4、统计投票

5、确定leader之后,就改变自己服务器的状态。

 

 

服务器运行期间的Leader选举

 

1、变更状态

               变成LOOKING状态

2、每个Server会发出一个投票

             生成各自的投票信息(myid,ZXID)

3、接收来自各个服务器的投票

4、处理投票

5、统计投票

6、改变服务器状态

 

 

 

Leader 选举是zookeeper中最重要的技术之一,也是保证分布式数据一致性的关键。

 

猜你喜欢

转载自blog.csdn.net/u013045959/article/details/76557694