zookeeper的集群选主
zookeeper的集群选主
全新集群的选主
1:小ID强制投给已经投过票的成员中的最大ID
2:当投票达到半数以上,选举胜出的为leader,剩余都为follower
因素:启动顺序和ID大小有关
例如有3个节点,ID分别为1,2,3,4,5
启动顺序为1,2,3,4,5
当1启动的时候,给自己投票,然后将投票信息发送给其他服务器,由于其他服务器没有启动,所以它收不到反馈信息投票。处于looking状态
当2启动的时候,与已经投过票的服务器通信交换信息,2投给自己一票,1也要投给2,此时2一共有两票,但未超过半数,仍处于looking状态。
当3启动的时候,与已经投过票的服务器通信交换信息,3投给自己一票,1和2也要投给3,此时3一共有3票,超过半数,成为leader。
当4启动的时候,与已经投过票的服务器通信交换信息,发现已经选出leader,虽然ID大但也只能认命做follower
当5启动的时候,同4
非全新集群的选主
发生环境:zk中已经有数据,但有节点宕掉。重新选举
1:选举要素:
data version:数据新的 version 就大,数据每次更新版本就会更新
version server id:服务器ID
逻辑时钟:其实就是参与投票的次数,参加选举一次 zxid 更新一次
选举中的角色
LOOKING,竞选状态。
FOLLOWING,随从状态,同步leader状态,参与投票。
OBSERVING,观察状态,同步leader状态,不参与投票。
LEADING,领导者状态。:
2:选举流程(选举线程由当前Server发起选举的线程担任,其主要功能是对投票结果进行统计,并选出推荐的Server)
选举线程首先向所有Server发起一次询问:
选举线程收到回复后,验证是否是自己发起的询问(验证zxid是否一致),然后获取对方的id(myid),并存储到当前询问对象列表中,最后获取服务提议的leader相关信息(id,zxid),并将这些信息存储到当次选举的投票记录表中
所有Server回复完毕,统计出出zxid最大的那个Server,并将这个Server相关信息设置成下一次要投票的Server
线程将当前zxid最大的Server设置为当前Server要推荐的Leader,如果此时获胜的Server票数超过server个数一半,此Server就是leader,并修改自己的状态
- 搭建zookeeper集群
- ZooKeeper伪分布式集群安装
- Zookeeper,Hbase 伪分布,集群搭建
- ZooKeeper系统模型之集群间消息通信。
- Zookeeper集群查看状态错误:Error contacting service. It is probably not running
- 快速搭建Zookeeper集群服务注册中心
- Zookeeper集群安装
- ZooKeeper集群配置
- 分布式架构学习之:027--ZooKeeper集群的安装、配置、高可用测试
- Zookeeper的集群配置和Java测试程序
- Linux安装zookeeper集群(CentOS7+Zookeeper3.4.10)
- centos7-安装配置zookeeper集群2
- zookeeper 集群搭建
- ZooKeeper 集群搭建
- 搭建messo+chronos+ zookeeper集群
- 构建高可用ZooKeeper集群
- Twitter-Storm与Zookeeper集群安装…
- zookeeper的安装与部署-集群
- ZooKeeper 集群搭建 Error contacting service. It is probably not running.
- hbase 和 zookeeper 的伪分布及集群安装