为什么使用Zookeeper?:
随着大型互联网的发展,分布式系统应用越来越来越广泛,zookeeper成了分布式系统的标配。集群容错,动态负载均衡,动态扩容,异地多活等架构都依赖于zookeeper而搭建。
zookeeper是什么?
zookeeper是由雅虎创建的,基于google chubby,一个开源的分布式协调服务,是分布式数据一致性的解决方案。
zookeeper的特性
- 顺序一致性,从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中。
- 原子性,事务请求在所有集群是一致的,要么都成功,要么都失败。
- 可靠性,一旦服务器成功应用某个事务,那么所有集群中一定同步并保留。
- 实时性,一个事务被应用,客户端能立即从服务端读取到状态变化。
zookeeper的原理?
基于分布式协议pasxo,而实现了自己的zab协议。保证数据的一致性。
zookeeper的数据模型
- 持久化节点,节点创建后一直存在,直到主动删除。
- 持久化有序节点,每个节点都会为它的一级子节点维护一个顺序。
- 临时节点,临时节点的生命周期和客户端会话保持一直。客户端会话失效,节点自动清理。
- 临时有序节点,临时节点基础上多一个顺序性特性。
zookeeper使用场景有哪些?
- 订阅发布
- watcher机制
- 统一配置管理(disconf)
- 分布式锁(redis也可以)
- 分布式队列
- 负载均衡(dubbo)
- ID生成器
- master选举(kafka,hadoop,hbase)
集群角色有哪些?
leader
- 事务请求的唯一调度者和处理者,保证集群事务的处理顺序
- 集群内部服务的调度者
follower
- 处理非事务请求,以及转发事务请求到leader
- 参与事务请求提议的投票
- 参与leader选举的投票
observer
- 观察集群中最新状态的变化并同步到observer服务器上
- 增加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台服务器挂掉