暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

初识Zookeeper(二)

梵讯技术人 2021-06-24
418

上一章给大家了简单介绍了一下Zookeeper,以及单节点安装与一些基本用法,那本章将围绕Zookeeper的选举机制展开描述。。。


01


Zookeeper的集群搭建


说到Zookeeper的选举机制,首先我们需要搭建一个Zookeeper集群,配置与单节点配置相差无几,只不过需要在zoo.cnf中增加如下配置(对于单节点安装不清楚的伙伴自行翻阅《初识ZooKeeper(一)》):

    [root@hadoop01 conf]# vi zoo.cfg
    server.1=hadoop01:2888:3888
    server.2=hadoop02:2888:3888
    server.3=hadoop03:2888:3888 

    保存退出,然后将配置好的zookeeper scp到另外两个节点上已做ip与主机名映射,至于怎么映射,请咨询度娘,然后分别启动,分别查看各个节点的状态:

    hadoop01:

      [root@hadoop01 bin]# ./zkServer.sh status
      JMX enabled by default
      Using config: Using config: home/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
      Mode: follower

      hadoop02:

        [root@hadoop02 bin]# ./zkServer.sh status
        JMX enabled by default
        Using config: Using config: home/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
        Mode: leader

        hadoop03:

          [root@hadoop03 bin]# ./zkServer.sh status
          JMX enabled by default
          Using config: Using config: home/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
          Mode: follower


          02


          Zookeeper的节点角色与状态


          Zookeeper 节点有三种角色:

                     角色                              描述


              leader(领导者)

          Zookeeper集群的leader节点,负责响应所有对ZooKeeper状态变更的请求。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO。


             follower(追随者)

          Zookeeper集群的follower节点,负责响应本服务器上的读请求,还要处理leader的提议,并在leader提交该提议时在本地也进行提交。



            observer(观望者)

          Zookeeper集群的observer节点,观察集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给leader节点进行处理。observer不会参与任何形式的投票,包括事务请求的投票和leader选举的投票。



          Zookeeper节点有四种状态:

                     状态
                                         描述
                    leading
          领导者状态,说明当前服务器角色是leader。
                  following
          跟随者状态,明当前服务器角色是follower。

                  

                    looking

          寻找leader状态,说明当前服务器角色认为当前集群中没有leader,因此需要进入leader选举状态。
                  observing
          观察者状态。明当前服务器角色是Observer。





          03


          Zookeeper的leader选举机制


          (图片来源于网络)


          Zookeeper在3.4.0版本后使用的选举算法为FastLeaderElection,有两个触发方式:

          • 集群刚启动。

          • leader服务器挂掉。


          3.1 集群刚启动

          • server1启动时无法完成选举至少两台服务器

          • server2启动时,此时与server1进行通信,尝试寻找leader,每个服务器改变状态为looking;

          • 每个server都随机一个有效时间段将自己作为leader然后给自己投票,投票时包含myid比如有三台服务器,编号分别是1,2,3,编号越大,选举算法中权重越大和Zxid服务器中存放的最大数据ID,值越大说明数据越新,选举算法中权重越大,之后再将自己的投票发给集群中其他角色;

          • 每个server接受来自不同节点发送过来的选票,首先判断选票是否有效比如是否是本轮选票、是否是来自looking状态的服务器等,并与自己的myid和Zxid作比较,先比较Zxid,哪个服务器的Zxid最大则优先胜出,更改自己的状态为leading,成为leader,剩下节点状态改为following;若是Zxid相同,则比较myid,同理选出leader。


          3.2 leader服务器挂掉

          • leader服务器挂掉后,集群停止对外服务,进行leader选举;

          • 首先需要注意的是,在集群正常对外提供服务时,节点已有3个;

          • 之后的选举流程同3.1选举流程。




          04


          Zookeeper的特性


          • 过半性:

            1. 过半选举:只有一个节点胜过一半或者以上的节点的时候才能成为leader;

            2. 过半存活:只有当集群的节点存活一半以上的时候才能对外提供服务;

            3. 过半操作:只有当集群中的一半以上的节点同意执行,那么新的操作才会真正的被提交。

          • 一致性:从集群的任意一个节点进入所获取的数据是相同的。

          注意:Zookeeper的集群中的节点个数一般是奇数个(小伙伴们阔以了解下为何是奇数个)。


          本章节到此就结束了,主要围绕Zookeeper集群的选举机制而做的简单介绍,首先介绍了集群的搭建,然后节点所担任的角色与会出现的状态,最后是Zookeeper的选举机制。在此感谢大家的阅读,同时也欢迎大家在评论区留下你的问题与建议。那么接下来有机会将介绍Zookeeper的ZAB协议以及深入源码看看Zookeeper是如何工作的,敬请期待。

          文章转载自梵讯技术人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论