logo头像
Snippet 博客主题

为什么使用zookeeper?

** 为什么使用zookeeper?:** <Excerpt in index | 首页摘要>
随着大型互联网的发展,分布式系统应用越来越来越广泛,zookeeper成了分布式系统的标配。集群容错,动态负载均衡,动态扩容,异地多活等架构都依赖于zookeeper而搭建。

<The rest of contents | 余下全文>

zookeeper是什么?

zookeeper是由雅虎创建的,基于google chubby,一个开源的分布式协调服务,是分布式数据一致性的解决方案。

zookeeper的特性

  • 顺序一致性,从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中。
  • 原子性,事务请求在所有集群是一致的,要么都成功,要么都失败。
  • 可靠性,一旦服务器成功应用某个事务,那么所有集群中一定同步并保留。
  • 实时性,一个事务被应用,客户端能立即从服务端读取到状态变化。

zookeeper的原理?

基于分布式协议pasxo,而实现了自己的zab协议。保证数据的一致性。

zookeeper的数据模型

  • 持久化节点,节点创建后一直存在,直到主动删除。
  • 持久化有序节点,每个节点都会为它的一级子节点维护一个顺序。
  • 临时节点,临时节点的生命周期和客户端会话保持一直。客户端会话失效,节点自动清理。
  • 临时有序节点,临时节点基础上多一个顺序性特性。

zookeeper使用场景有哪些?

  • 订阅发布
    • watcher机制
    • 统一配置管理(disconf)
  • 分布式锁(redis也可以)
  • 分布式队列
  • 负载均衡(dubbo)
  • ID生成器
  • master选举(kafka,hadoop,hbase)

集群角色有哪些?

leader

  1. 事务请求的唯一调度者和处理者,保证集群事务的处理顺序
  2. 集群内部服务的调度者

follower

  1. 处理非事务请求,以及转发事务请求到leader
  2. 参与事务请求提议的投票
  3. 参与leader选举的投票

observer

  1. 观察集群中最新状态的变化并同步到observer服务器上
  2. 增加observer不影响集群事务处理能力,还能提升非事务请求的处理能力

zookeeper集群为什么是奇数?

zookeeper事务请求提议需要超过半数的机器,假如是2(n+1)台,需要n+2台机器同意,
由于在增删改操作中需要半数以上服务器通过,来分析以下情况。
2台服务器,至少2台正常运行才行(2的半数为1,半数以上最少为2),正常运行1台服务器都不允许挂掉
3台服务器,至少2台正常运行才行(3的半数为1.5,半数以上最少为2),正常运行可以允许1台服务器挂掉
4台服务器,至少3台正常运行才行(4的半数为2,半数以上最少为3),正常运行可以允许1台服务器挂掉
5台服务器,至少3台正常运行才行(5的半数为2.5,半数以上最少为3),正常运行可以允许2台服务器挂掉
6台服务器,至少3台正常运行才行(6的半数为3,半数以上最少为4),正常运行可以允许2台服务器挂掉

zookeeper日志管理?

leader选举的原理

未完待续