当前位置: 代码迷 >> 综合 >> ZooKeeper 第二节 ZooKeeper集群
  详细解决方案

ZooKeeper 第二节 ZooKeeper集群

热度:26   发布时间:2024-02-20 07:23:04.0

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

  相关解决方案