1、 通常zookeeper 是由 2n+1 台 server 组成,每个 server 都知道彼此的存在。只要有 n+1 台(大多数) server 可用,整个系统保持可用。
2、 集群角色
Leader角色
Leader服务器是整个 zookeeper 集群的核心,主要的工作任务有两项
1)事务请求的唯一调度和处理者,保证集群事物处理的顺序性
2)集群内部各服务器的调度者
Follower角色
Follower角色的主要职责是
1)处理客户端非事务请求、转发事务请求给 leader 服务器
2)参与事务请求 Proposal 的投票(需要半数以上服务器通过才能通知 leader commit 数据 ; Leader 发起的提案,要求 Follower 投票)
3)参与 Leader 选举的投票
Observer角色
Observer是 zookeeper3.3 开始引入的一个全新的服务器角色,从字面来理解,该角色充当了观察者的角色。
观察zookeeper 集群中的最新状态变化并将这些状态变化同步到 observer 服务器 上。
Observer 的工作原理与follower 角色基本一致,而它和 follower 角色唯一的不同在于 observer 不参与任何形式的投票,包括事务请求Proposal 的投票和 leader 选举的投票。
简单来说, observer服务器只提供非事务请求服务,通常在于不影响集群事务处理能力的前提下提升集群非事务处理的能力
3、 zookeeper 主要是解决分布式环境下的服务协调问题,如果我们要去实现一个 zookeeper 这样的中间件,我们需要做什么?
1)防止单点故障 —— 用集群来解决
2)集群需要保证每个节点数据的一致性 —— leader 节点负责协调和数据同步操作
3)如何选举出 leader 节点,以及leader 挂了以后,如何恢复 —— zookeeper 用了基于 paxos 理论所衍生出来的 ZAB 协议(zab 理论来做选举)
4、 当一个事务操作涉及到跨节点的时候,就需要用到分布式事务,分布式事务的数据一致性协议有 2 PC 协议和3 PC 协议。
5、 2 PC 提交
(Two Phase Commitment Protocol 当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的要跨越多个分布式节点的时候,为了保持事务处理的ACID特性。
因为整个事务是分为两个阶段提交,所以叫 2pc。
阶段一:提交事务请求(投票),事务询问、执行事务、各个参与者向协调者反馈事务询问的响应
阶段二:执行事务提交(执行事务或中断事务)
6、 ZAB 协议
ZAB(Zookeeper Atomic Broadcast) 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议
在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议, ZooKeeper 实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
7、 ZAB 协议包含两种基本模式:
1)崩溃恢复模式 —— 产生新的leader,完成数据同步
2)原子广播模式 —— zxid是一个全局唯一的64 位自增 id ,
8、 ZAB两个保证 :
1)已经被处理的消息不能丢失
2)被丢弃的消息不能再次出现
leader 选举算法能够保证新选举出来的 Leader 服务器拥有集群中所有机器最高编号(ZXID 最大)
9、 zxid 是 64 位,高 32 位是 epoch 编号,每经过一次 Leader 选举产生一个新的 leader ,新的 leader 会将epoch号+1 ,
低 32 位是消息计数器,每接收到一条消息这个值 +1 ,新 leader 选举后这个值重置为 0.
epoch +1的好处是老的 leader 挂了以后重启,它不会被选举为 leader,因此此时它的 zxid 肯定小于当前新的 leader 。
当老的leader 作为 follower 接入新的 leader 后,新leader 会让它将所拥有的旧 epoch 号的未被 COMMIT 的proposal 清除
10、服务器启动时的leader 选举
优先检查 ZXID 。 ZXID 比较大的服务器优先作为Leader
如果 ZXID 相同,那么就比较 myid。 myid 较大的服务器作为 Leader 服务器。
11、服务器运行期间的 Leader 选举和启动时期的 Leader 选举基本过程是一致的。
12、leader 选举的状态:LOOKING、LEADING、FOLLOWING、OBSERVERING
13、源码入口quorumPeerMain
详细解决方案
ZooKeeper 第二节 ZooKeeper集群
热度:26 发布时间:2024-02-20 07:23:04.0
相关解决方案
- 出现ERROR: Can't get master address from ZooKeeper; znode data == null解决方法
- zookeeper Error contacting service. It is probably not running异常
- 七学习分布式架构-Redis使用场景 zookeeper FastDFS maven springmvc mybatis shiro restful
- 一学习分布式架构-介绍(Dubbo zookeeper FastDFS JMS maven springmvc mybatis shiro restful )
- 六学习分布式架构-proxy代理 zookeeper FastDFS maven springmvc mybatis shiro restful
- Etcd、Eureka、Consul、Zookeeper 之间的比较
- zookeeper.out nohup: failed to run command `java': No such file or directory
- 【Zookeeper】Zookeeper 集群搭建
- zookeeper Zab协议理解
- Jfinal 整合 duboo,zookeeper,分布式实战
- zookeeper 启动报错java.net.NoRouteToHostException: No route to host (Host unreachable)
- zookeeper 命令行操作
- 解决Caused by: org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplem
- kafka-4、zookeeper、kafka、kafka-manager配置服务自启动
- Java 最常见的 208 道面试题:第十六模块答案 Zookeeper
- 解决Ubuntu下启动Zookeeper的bin/zkServer.sh: 81: /opt/zookeeper-3.4.6/bin/zkEnv.sh: Syn
- [译]NGINX 和 ZooKeeper,动态负载平衡和部署(上)
- zookeeper(6)—— zk服务端集群源码
- zookeeper(5)—— zk服务端单机源码
- zookeeper(3)—— zk客户端的使用
- zookeeper(1)—— 分布式系统简介
- zookeeper live(三)之zookeeper讲解
- zookeeper live(二)之2pc与paxos算法
- zookeeper live(一)zk简单介绍
- zookeeper 容错,脑裂 ,选举
- zookeeper 功效
- Zookeeper 配置
- 【Apache ZooKeeper】理解ZooKeeper中的Watches
- 【Apache ZooKeeper】官方文档
- ZooKeeper 提供了什么?