zookeeper知识点记录

zk接口写请求的流程
1、接收请求
2、生成日志 zxid自增
3、日志持久化到磁盘
4、修改dataTree数据 (内存数据)
根据这个流程得出 zk集群在进行投票选举的时候 会先比较zxid 哪个节点的zxid越大 代表数据越新 更容易获得投票 晋升为leader

zk集群投票流程
zk1 zk2 zk3 每个zk都有着自己的投票箱 投票会先投给自己
1、zk1 启动 zk1 开始投票 目前只有一个节点 所有投票结果 [myid,投给谁(mid)id,zxid] ——> [1,1,100]
2、zk2 启动 zk2开始投票 投票结果为[2,2,100 ] zk2启动会 集群会建立socket链接 然后开始交换投票信息 进行pk 竞选 比较zxid 如果相等 则比较 myid 大的则胜出 然后得出投票结果 并判断当前的得票数 超过了集群节点数量的一半 则竞选出 leader
3、zk3 启动 发现集群中已经存在leader了 于是就不再进行投票 直接将自己的状态改为follower

zk集群 如何 同步数据

知识点 leader 2阶段提交 ack机制
1、 leader 接收到写请求 生成日志
2、 zxid+1
3、持久化日志
4、进入预提交状态
5、向follower发送日志 follower接收到日志 进行持久化 向leader发送ack
6、leader等待接收follower发送ack 当接收到的ack 满足过半机制
7、leader进行提交命令 更新自己的dataTree 然后向follower发送提交命令 follower 接收到提交也更新自己的dataTree

所有以上流程会诱发一个问题 第6步leader 在等待接收ack的过程是阻塞的 所以 存在越多的集群节点 就会阻塞越久 这就造成的 zk集群写请求效率过低的情况
解决方案:增加节点为observer(观察者)节点 observer 不参与两阶段提交的流程 也不参与投票,
但observer节点数据也要leader保持一致,leader 在完成以上所有流程的时候 会异步 向observer发送写请求 完成数据的同步,此操作为异步的 所有增加这个节点 既不会影响集群写的性能 又能提高读的性能

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值