zoukankan      html  css  js  c++  java
  • zookeeper选主机制

    Zookeeper选主机制

    一、Server工作状态

    每个Server在工作过程中有四种状态:

    • LOOKING:竞选状态,当前Server不知道leader是谁,正在搜寻。
    • LEADING:领导者状态,表明当前服务器角色是leader
    • FOLLOWING:随从状态,表明当前服务器角色follower,同步leader状态,参与投票。
    • OBSERVING,观察状态,表明当前服务器角色是observer,同步leader状态,不参与投票。

    二、核心原则

    (1)Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;

    (2)在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;

    (3)选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。

    三、举例

    下面以一个简单的例子来说明整个选举的过程:

    假设有五台服务器组成的Zookeeper集群,它们的id从1-5,同时它们都是最新启动的,也就是没有历史数据,在存放数据量这一点上,都是一样的。如图

    假设这些服务器从id1-5,依序启动:

    因为一共5台服务器,只有超过半数以上,即最少启动3台服务器,集群才能正常工作。

    (1)服务器1启动,发起一次选举。

    ​ 服务器1投自己一票。此时服务器1票数一票,不够半数以上(3票),选举无法完成;

    ​ 服务器1状态保持为LOOKING;

    (2)服务器2启动,再发起一次选举。

    ​ 服务器1和2分别投自己一票,此时服务器1发现服务器2的id比自己大,更改选票投给服务器2;

    ​ 此时服务器1票数0票,服务器2票数2票,不够半数以上(3票),选举无法完成;

    ​ 服务器1,2状态保持LOOKING;

    (3)服务器3启动,发起一次选举。

    ​ 与上面过程一样,服务器1和2先投自己一票,然后因为服务器3id最大,两者更改选票投给为服务器3;

    ​ 此次投票结果:服务器1为0票,服务器2为0票,服务器3为3票。此时服务器3的票数已经超过半数(3票),服务器3当选Leader。

    ​ 服务器1,2更改状态为FOLLOWING,服务器3更改状态为LEADING;

    (4)服务器4启动,发起一次选举。

    ​ 此时服务器1,2,3已经不是LOOKING状态,不会更改选票信息。交换选票信息结果:服务器3为3票,服务器4为1票。

    ​ 此时服务器4服从多数,更改选票信息为服务器3;

    ​ 服务器4并更改状态为FOLLOWING;

    (5)服务器5启动,同4一样投票给3,此时服务器3一共5票,服务器5为0票;

    ​ 服务器5并更改状态为FOLLOWING;

    最终结果:

    ​ 最终Leader是服务器3,状态为LEADING;

    ​ 其余服务器是Follower,状态为FOLLOWING。

  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/pretttyboy/p/13436815.html
Copyright © 2011-2022 走看看