zookeeper介绍

10 篇文章 1 订阅
3 篇文章 0 订阅

一、Zookeeper是什么

Zookeeper是一个高性能分布式应用协调服务。它的功能包括:Naming Service、配置管理、Leader Election、服务发现、同步、Group Service、Barrier、分布式队列、两阶段提交。在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。

ZooKeeper使用的是ZAB协议作为数据一致性的算法, ZAB(ZooKeeper Atomic Broadcast ) 全称为:原子消息广播协议。包含两种模式,即广播模式与恢复模式。

二、zookeeper的工作方式

  1. zookeeper的集群包含1个leader,多个follower。
  2. 所有的follower都可以提供读服务。
  3. 所有的写操作都会被forward到leader,只有leader才能提供写操作。
  4. client与server通过nio通信。
  5. 全局串行化所有的写操作,写的顺序都是根据用户发送的顺序,通过tcp的fifo,保证接收顺序与发送顺序一致。
  6. 保证同一客户端的指令被FIFO执行。
  7. 保证消息通知的fifo

三、ZAB协议–广播模式

  1. Leader将所有更新(称为proposal-提议),顺序发送给Follower
  2. 当Leader收到半数以上的Follower对此proposal的ACK(确认)时,即向所有Follower发送commit消息,并在本地commit该消息。每个zookeeper都有这么几个部分,将本地数据持久化到磁盘的部分,同时每个follower收到proposal时,都将数据持久到磁盘里面,然后它有一个内存数据库,当client与server通信读取数据时,都是通过内存数据库,不用每次读磁盘,从而提高效率,commit后就把数据写入内存数据库
  3. Follower收到Proposal后即将该Proposal写入磁盘,写入成功即返回ACK给Leader
  4. 每个Proposal都有一个唯一的单调递增的proposal ID,即zxid

client与follower通信读请求:
cf-read
client与leader通信写请求:
cl-write
client与follower通信写请求:
cf-write

四、Zab协议 – 恢复模式

zxid由epoch与counter组成:
1. epoch:高32位每换一个leader,epoch会加1,但是在每个leader任期之间,epoch是一样的
2. counter:第32位,在同一个任期之间,由counter计算是该epoch的第多少次跟新

1、进入恢复模式: 当Leader宕机或者丢失大多数Follower后,即进入恢复模式

2、结束恢复模式:新领导被选举出来,且大多数Follower完成了与Leader的状态同步后,恢复模式即结束,从而进入广播模式

3、恢复模式的意义
1. 发现集群中被commit的proposal的最大zxid
2. 建立新的epoch,从而保证之前的Leader不能再commit新的Proposal
3. 集群中大部分节点都commit过前一个Leader commit过的消息,而新的Leader是被大部分节点所支持的,所以被之前Leader commit过的Proposal不会丢失,至少被一个节点所保存
4. 新Leader会与所有Follower通信,从而保证大部分节点都拥有最新的数据

恢复阶段的保证

  1. 若一条消息在一台机器上被deliver,那么该消息必须将在每台机器上deliver,即使那台机器故障了
  2. 一个被skip的消息,必须仍然需要被skip

五、Zookeeper一致性保证

1、顺序一致性: 从一个客户端发出的更新操作会按发送顺序被顺序执行

2、原子性: 更新操作要么成功要么失败,无中间状态

3、单一系统镜像: 一个客户端只会看到同一个view,无论它连到哪台服务器

4、实时性: 保证客户端可在一定时间(通常是几十秒)内看到最新的视图

5、可靠性
1. 一旦一个更新被应用,该更新将被持久化,直到有客户端更新该结果
2. 如果一个客户端得到更新成功的状态码,则该更新一定已经生效
3. 任何一个被客户端通过读或者更新“看到”的结果,将不会被回滚,即使是从失败中恢复

六、Zookeeper使用注意事项

  1. 只保证同一客户端的单一系统镜像,并不保证多个不同客户端在同一时刻一定看到同一系统镜像,如果要实现这种效果,需要在读取数据之前调用sync操作。假如a更新了数据,leader得到半数ask了,而b连接的follower没有ask,就读不到最新数据,那么b通过执行zookeeper的sync命令,等待b连接的follower与leader同步完毕后在返回,就是最新得数据了。
  2. Zookeeper读性能好于写性能,因为任何Server均可提供读服务,而只有Leader可提供写服务
  3. 为了保证Zookeeper本身的Leader Election顺利进行,通常将Server设置为奇数
  4. 若需容忍f个Server的失败,必须保证有2f+1个以上的Server
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值