当前位置:   article > 正文

Zookeeper集群详解

Zookeeper集群详解

Zookeeper集群角色

Leader:领导者,一个Zookeeper集群同一时间只能有一个Leader,,Leader服务器是整个Zookeeper集群工作制中的核心,其主要工作有以下:

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性。Zookeeper中所有事务操作都是由leader服务器进行处理。
  • 集群内部服务器的调用者。
  • 接受所有的Follower的提案请求并统一协调发起提案投票,负责与所有Follower进行内部数据交换(同步)。

Follower:跟随者,主要工作:

  • 处理客户端的非事务请求,并转发事务请求给Leader服务器。
  • 参与事务请求的同步提交投票。同时与Leader进行数据交换(同步)。
  • 参与Leader选举投票。

Observer:观察者,从Zookeeper3.3.0引入的一个全新的服务器角色,该服务器充当一个观察者角色,观察Zookeeper集群的最新状态变化,并将这些状态变更同步过来。Observer服务器在工作原理上和Follower基本一致,对于非事务请求,可以直接独立处理,而对于事务请求,则会转发给Leader服务器进行处理。和Follower唯一区别是,Observer不参与任何形式投票,包括事务请求提交投票、Leader选举投票。仅仅观察集群状态变化并把变化同步过来。

Observer不属于Zookeeper的关键部位,通常用于在不影响集群事务处理能力的前提下提升进去非事务处理的能力,就是不影响集群写性能的情况下,提高集群读性能。因为使用增加Follower固然会提高集群的读性能,但是也会降低集群事务处理的写性能。因为Follower太多的话,会把时间浪费在事务投票同步过程和Leader选举过程中,因为要通信、投票的机器多了。而Observer不参与任何形式投票,仅仅只是进行读操作。所以增加再多Observer也不会影响集群的写性能,反而能够提升集群的读性能。但是Observer太多,而Follower太少的话会降低系统的可用性。

Zookeeper集群中有一半以上的机器正常工作的话,集群对外提供的服务就是可用的。假如有1个Leader,100个Follower,那么就算有50台机器宕机,集群照样可用。假设现在采用1个Leader,10个Follower,90个Observer的话,只要集群里面有大于5台机器宕机,集群就会处于不可用状态,至少处理不了事务请求,因为事务投票需要一半以上的同意,而可用的Leader加Follower已经不足一半了。

Zookeeper集群环境配置步骤:

https://blog.csdn.net/liuchang19950703/article/details/109745825

 

Zookeeper:
   1.CP原则:
   数据强一致性:任何时间请求到每个节点的数据都是一致的,和分区容错性:集群中某一个节点挂掉不会影响整个系统的功能使用,
   因为zk在"投票选举"和"数据同步"过程中,无法对外提供服务,所以不能保证A原则,可用性原则
   
   2.存储方式
   zk有2种节点,临时节点和持久节点,都存放在服务器磁盘内存中
   
   3. ZAB协议(基于paxos算法)
   作用:投票选举
   三种角色:
   leader:   处理zk节点的写请求和读请求,发起投票选举
   follower:处理zk节点的读请求,遇到写请求需要转发给leader节点,进行投票
   observe:  不参加选举,观察者
   投票规则:遵循过半原则
   投票过程:
            (1)系统刚刚启动,会根据myid值来选举一个leader
            (2)第一个发起投票的节点收到半数投票,成为leader
            (3)  Leader发送心跳包给Follower来健康检查
          (4)节点数选择 >=2n+1

   4.ZAB协议: 原子广播协议,两种模式
     4.1消息广播 模式
         zk的类似2pc提交,当集群中执行写请求时,leader会向集群中其他节点发送预请求,当集群中超过半数的节点返回可执行信息时,
各节点方可执行更新请求,此过程成为消息广播
    4.2崩溃恢复 模式
        4.2 leader出现崩溃退出或者机器重启,亦或是集群中不存在超过半数的服务器与Leader保存正常通信,Zab就会再一次进入崩溃恢复,
发起新一轮leader投票选举并实现数据同步,在"leader投票选举"和"数据同步"过程中,无法对外提供服务

   5.投票选举节点:
       5.1 在服务刚刚启动的时候,会根据myid值来选举一个leader
       5.2 节点崩溃的时候,会根据zxid来重新选举一个leader并给自己投票和来自其他节点的投票

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/717046
推荐阅读
相关标签
  

闽ICP备14008679号