您好、欢迎来到现金彩票网!
当前位置:2019棋牌游戏网 > 维护分析过程 >

zk集群运行过程中服务器选举的源码剖析

发布时间:2019-07-07 11:44 来源:未知 编辑:admin

  在zk服务器集群启动过程中,经QuorumPeerMain中,不光会创建ZooKeeperServer对象,同时会生成QuorumPeer对象,代表了ZooKeeper集群中的一台机器。在整个机器运行期间,负责维护该机器的运行状态,同时会根据情况发起Leader选举。

  在zk服务器集群启动过程中,经QuorumPeerMain中,不光会创建ZooKeeperServer对象,同时会生成QuorumPeer对象,代表了ZooKeeper集群中的一台机器。在整个机器运行期间,负责维护该机器的运行状态,同时会根据情况发起Leader选举。下图是 《从PAXOS到ZOOKEEPER分布式一致性原理与实践》的服务器启动流程。

  本次主要介绍的是选举相关的内容,至于其他操作可以看其他博客。之后的行文都是从startLeaderElection中衍生出来的。

  SID:服务器ID,用来标示ZooKeeper集群中的机器,每台机器不能重复,和myid的值一直

  在zk中,引入了Leader、Follwer和Observer三种角色。zk集群中的所有机器通过一个Leader选举过程来选定一台被称为Leader的机器,Leader服务器为客户端提供读和写服务。Follower和Observer都能够提供读服务,唯一的区别在于,Observer机器不参与Leader选举过程,也不参与写操作的过半写成功策略。因此,Observer存在的意义是:在不影响写性能的情况下提升集群的读性能。

  选举的目的就是选择出合适的Leader机器,由Leader机器决定事务性的Proposal处理过程,实现类两阶段提交协议(具体是ZAB协议)

  QuorumPeer的职责就是不断地检测当前的zk机器的状态,执行对应的逻辑,简单来说,就是根据服务所处的不同状态执行不同的逻辑。删除了一部分逻辑后,代码如下:

  当机器处于LOOKING状态时,QuorumPeer会进行选举,但是具体的逻辑并不是由QuorumPeer来负责的,整体的投票过程独立出来了,从逻辑执行的角度看,整个过程设计到两个主要的环节:

  如果ClientCnxn是zk客户端中处理IO请求的管理器,QuorumCnxManager是zk集群间负责选举过程中网络IO的管理器,在每台服务器启动的时候,都会启动一个QuorumCnxManager,用来维持各台服务器之间的网络通信。

  对于每一台zk机器,都需要建立一个TCP的端口监听,在QuorumCnxManager中交给Listener来处理,使用的是Socket的阻塞式IO(默认监听的端口是3888,是在config文件里面设置的)。在两两相互连接的过程中,为了避免两台机器之间重复地创建TCP连接,zk制定了连接的规则:只允许SID打的服务器主动和其他服务器建立连接。实现的方式也比较简单,在receiveConnection中,服务器会对比与自己建立连接的服务器的SID,判断是否接受请求,如果自己的SID更大,那么会断开连接,然后自己主动去和远程服务器建立连接。这段逻辑是由Listener来做的,且Listener独立线程,receivedConnection,建立连接后的示意图:

  QuorumCnxManager是连接的管家,具体的TCP连接交给了Listener,但是对于选票的管理,内部还维护了一系列的队列:

  senderWorderMap:发送器集合。每个SendWorder消息发送器,都对应一台远程zk服务器,负责消息的发放。

  以上内容主要是建立各台zk服务器之间的连接通信过程,具体的选举策略zk抽象成了,主要分析的是FastLeaderElection方式(选举算法的核心部分):

  LOOKING: 都处于无Leader态,比较一下选票的优劣,看是否更新自己的选票,如果更新了就同时通知给其他服务器

  FOLLOWING、LEADING:说明集群中已经有Leader存在,更新一下自己的状态,结束本轮投票

  OBSERVING:这票没什么卵用,直接舍弃(OBSERVER是不参与投票的)

  根据上面的流程,可以大概说明一下FasterLeaderElection确定选票更优的策略:

  Leader服务器挂了,那么经历的和初始化流程类似的过程,选择Leader

  Follower服务器挂了,那么自己在执行选举的过程中,会收到其他服务器给的Leader选票信息,也可以确定Leader所属

http://yolandaeljaiek.com/weihufenxiguocheng/452.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有