没有合适的资源?快使用搜索试试~ 我知道了~
首页Zookeeper双机房容灾方案.pdf
资源详情
资源评论
资源推荐
Zookeeper
Zookeeper
相关知识
Zookeeper什么时候会进行选举
Zookeeper选举机制
zxid
Zookeeper数据同步机制
Zookeeper节点的状态信息
测试数据同步机制
测试环境
测试数据同步机制
测试思路
测试步骤
测试结果
测试结论
模拟场景 1
模拟目的
场景概述
操作步骤
结论
模拟场景2
模拟目的
场景概述
操作步骤
结论
模拟场景3
模拟目的
场景概述
操作步骤
结论
模拟场景 4
模拟目的
场景概述
操作步骤
结论
最终方案
相关知识
Zookeeper什么时候会进行选举
在如下两种情况,zk 集群会进行 leader 的选举
1. server 初始化启动的 leader 选举
2. server 运行时期的 leader选举(server 运行期间无法和 leader 保持连接)
Zookeeper选举机制
zk 的 leader 选举机制,采用投票机制和过半策略
当集群中半数以上的 zk 实例启动时,leader就会被确定
后续新增的 zk 实例会默认变成 follower
以集群中存在 3 个 zk 实例为例,选举的具体流程如下:
1. 每个 server 发出一个投票
2. 接受来自各个服务器的投票
集群的每个服务器收到投票后,首先判断该投票的有效性
如检查是否是本轮投票、是否来自LOOKING状态的服务器
3. 处理投票
针对每一个投票,服务器都需要将别人的投票和自己的投票进行比较,规则如下
对于 ZK1 而言,它的投票是(1, 0),接收ZK2的投票为(2, 0),
首先会比较两者的ZXID,均为0
再比较myid,此时ZK2的myid最大,于是ZK2胜
ZK1更新自己的投票为(2, 0),并将投票重新发送给ZK2
4. 统计投票
每次投票后,服务器都会统计投票信息,判断是否已经有过半机器接受到相同的投票
信息
每次投票会包含所推举的服务器的 myid 和 ZXID ,使用(myid, ZXID)来表示
由于是初始情况,ZK1和ZK2都会将自己作为Leader服务器来进行投票,此时
ZK1的投票为(1, 0),ZK2的投票为(2, 0),然后各自将这个投票发给集群中其他机
器
优先检查ZXID
ZXID比较大的服务器优先作为Leader
如果ZXID相同,那么就比较myid
myid较大的服务器作为Leader服务器
对于ZK1、ZK2而言,都统计出集群中已经有两台机器接受了(2, 0)的投票信息,此时
便认为已经选出ZK2作为Leader
5. 改变服务器状态
一旦确定了Leader,每个服务器就会更新自己的状态,
如果是Follower,那么就变更为FOLLOWING,
如果是Leader,就变更为LEADING
当新的Zookeeper节点ZK3启动时,发现已经有Leader了,不再选举,直接将直接的
状态从LOOKING改为FOLLOWING
zxid
会有这种情况,如果上一个年代的leader复活了,那就是说,之前的leader可能由于网络
原因,现在好了,但是上一个leader所属的时代已经过去了,那他就会成为folower
上一个leader的数据可能和现在集群中的数据是不一致的,他会成为followe之后进行回退
的操作,直到一个被集群中过半机器提交的最新事务
Zookeeper数据同步机制
zk 集群中的数据会根据 leader 中的数据进行数据同步
以此来保证 zk 集群中数据一致
在集群选完 leader 以后,zk就进入状态同步过程
1. leader 等待 server 连接
2. follower 连接 leader,将最大的 zxid 发送给 leader
3. leader 根据 follower 的 zxid 确定同步点
4. 完成同步后通知 follower 已经成为 uptodate 状态
5. follower 收到 uptodate 消息后,又可以重新接受 client 的请求,进行服务
Zookeeper节点的状态信息
登入 zk 客户端之后,可以使用命令stat <node_path> 来查看节点状态信息
需要注意的是,子节点的数据变化不会影响到父节点的数据、事务状态
例如,向/test 节点中插入子节点/test/testMzxid ,通过stat 查看到的父节点的数据
zxid是事务编号,是64位的
可以把他拆分为两部分,分别都为32位
低32位是事务id,是递增的
高32位是leader周期epoch
可以把他理解为年代,每个leader都有一个年代,在leader所属的年代,该leader拥
有最高权力
如果该leader挂了,那么就会换下一个leader,此时年代也应该+1
(cZxid、mtime、mZxid、dataLength)是不会发生改变的
但是与子节点相关的信息会发生改变,如pZxid、cversion、numChildren
所以,可以使用与子节点相关的信息来判断父节点的信息同步状态
针对几个重要的参数进行介绍
czxid
节点创建的事务zxid
每次修改ZooKeeper状态都会收到一个zxid形式的时间戳,也就是ZooKeeper事务ID
事务ID是ZooKeeper中所有修改总的次序,每个修改都有唯一的zxid
(如果zxid1小于zxid2,那么zxid1在zxid2之前发生)
mzxid
znode最后修改的zxid
pZxid
znode最后更新的子节点zxid
cversion
znode子节点变化号,每变化一次就自增1
dataversion
znode数据变化号,数据每变化一次就自增1
(每次更新读取最新的值,可用于实现类似数据库乐观锁功能)
ephemeralOwner
如果是临时节点,这个是znode拥有者的session id。如果不是临时节点则是0
cversion
znode子节点变化号,每变化一次就自增1
dataLength
znode的数据长度
剩余19页未读,继续阅读
Sirin
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1