四、Zookeeper内部原理

选举机制

  1. 半数机制:集群中半数以上机器存活,集群可用。所以Zookeeper适合安装奇数台服务器。

  2. Zookeeper虽然在配置文件中并没有指定Master和Slave。但是,Zookeeper工作时,是有一个节点 为Leader,其他节点为Follower。Leader是通过内部的选举机制临时产生的。

  3. 选举机制的流程如下:

    假设现在有五台服务器组成的Zookeeper集群,它们的id从1-5。现在这五个都是最新的,没有启动过的。依次启动这五个节点:

    1. 启动节点1,它给自己投票,然后发送投票信息,此时只有它一台服务器,它发出去的任何报文没有任何响应,所以它的选举状态一直是LOOKING状态。
    2. 启动节点2,它给自己投票,同时与最开始启动的节点1进行通信,互相交换自己的选举结果,由于两种都是新启动的节点,没有历史数据,所以id值较大的服务器2胜出,但是由于没有达到超过半数以上,所以两个服务器的状态依然是LOOKING状态。
    3. 启动节点3,它给自己投票,同时与服务器1,2交换信息。由于节点3的编号最大,所以节点3胜出,此时的票数刚好大于半数,所以节点3成为Leader,节点1,2成为Follower。
    4. 节点4和节点5启动时,依然都投自己一票,找与其他节点交换信息时,发现已经有Leader了,所以它们只能成为Follower。

节点类型

  1. 持久型

    客户端和zookeeper断开连接后,创建的节点不删除

    一类是创建的节点没有顺序编号,是唯一的

    一类是创建的节点有顺序编号。在创建ZNode时设置顺序标识,ZNode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。

  2. 短暂型

    客户端和服务器端断开连接后,创建的节点自己删除

    同样有不添加顺序编号和添加顺序编号两种。

在这里插入图片描述

顺序编号可用于在分布式系统中为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序。

Stat结构说明

#创建节点的事务
cZxid = 0x200000015
#znode被创建的时间
ctime = Wed May 20 22:27:26 CST 2020
#最后更新的事务zxid
mZxid = 0x200000015
#最后修改的毫秒数
mtime = Wed May 20 22:27:26 CST 2020
#最后更新的子节点zxid
pZxid = 0x200000015
#子节点变化号,znode子节点修改次数
cversion = 0
#数据变化号
dataVersion = 0
#访问控制列表的变化号
aclVersion = 0
#如果该节点是临时节点,这个节点拥有着的session id。如果不是临时节点则是0
ephemeralOwner = 0x0
#数据的长度
dataLength = 3
#子节点数量
numChildren = 0


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值