zoukankan      html  css  js  c++  java
  • Zookeeper选举(fastleaderelection算法)

    1、选举相关概念:

    选票:(myid,zxid,当前节点选取轮次,被推举服务器选举轮次,状态(looking))。

    选举发生情况:启动时选举,运行时选举。

    外部投票:其他服务器发送来的投票。

    内部投票:服务器自身当前的投票。

    选举轮次:epoch--leader选举周期。

    pk:比较内部选票和外部选票,确定是否变更内部选票,主要是比较zxid和myid。

    2、选举过程:

    (1)每个服务器节点先初始化自己的选票,即(myid,zxid,当前节点选取轮次,被推举服务器选举轮次,状态(looking))。

    (2)发送初始化选票到所有集群中的节点。

    (3)接收外部选票

    (4)判断选举轮次,内部选票选举轮次要是大于外部选票,就继续接收外部选票,如果小于等于外部的选举轮次,就进行选票pk,即判断自己是否要变更内部选票。

    (5)变更内部选票,将选票发送至集群中。

    (6)归档。每个节点将收到的所有外部选票进行归档。

    (7)统计。判断是否有过半的服务器认可当前内部选票,如果是,那就选举结束,即超过一半选票同意新leader,那就成功。

    补充:

    zxid:

      事务id, 为了保证事务的顺序一致性,zookeeper 采用了递增的事 务 id 号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了 zxid。实现中 zxid 是一个 64 位的 数字,它高32位是epoch(ZAB协议通过epoch编号来 区分 Leader 周期变化的策略)用来标识 leader 关系是否 改变,每次一个 leader 被选出来,它都会有一个新的 epoch=(原来的epoch+1),标识当前属于那个leader的 统治时期。低32位用于递增计数
      epoch的变化大家可以做一个简单的实验
    • 启动一个zookeeper集群。
    • 在/tmp/zookeeper/VERSION-2 路径下会看到一个 currentEpoch文件。文件中显示的是当前的epoch。
    • 把 leader 节点停机,这个时候在看 currentEpoch 会有 变化。 随着每次选举新的leader,epoch都会发生变化。
  • 相关阅读:
    锐浪报表(Grid++Report)问题-子报表获取不到父报表参数问题解决
    C#PictureBox实现一直显示提示信息
    C#.Net ComboBox控件设置DropDownList之后背景颜色问题,以及发现的微软的一个BUG
    Visual Studio 2019移除/禁用Live Share按钮
    robotframework导入selenium2library变红
    robotframework selenium2library中关键字缺失的问题
    Jmeter之JSON提取器的使用
    Jmeter中unicode转码问题处理
    Jmeter之关联接口处理
    jmeter之用户自定义的变量
  • 原文地址:https://www.cnblogs.com/guoyu1/p/11992233.html
Copyright © 2011-2022 走看看