zk集群运行过程中,服务器选举的源码剖析
在集群启动的进程中,QuorumPeer会按照设置实现差异的推举计策this.electionAlg = createElectionAlgorithm(electionType);
假如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,可是对付选票的打点,内部还维护了一系列的行列:
queueSendMap:动静发送行列,用于生涯待发送的动静。new ConcurrentHashMap senderWorderMap:发送器荟萃。每个SendWorder动静发送器,都对应一台长途zk处事器,认真动静的发放。 lastMessageSent:最近发送过的动静,凭证SID分组 根基的通讯流程如下: (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |