• ZooKeeper之分布式环境搭建--仲裁模式与伪分布式环境搭建


    相关知识

    为了完成本关任务,你需要掌握:1.ZooKeeper单节点安装方法,2.命令行基本操作。

    ZooKeeper之仲裁模式

    standlone模式运行ZooKeeper,便于评估,开发,测试和学习。但是在实际生产中,使用ZooKeeper均以仲裁模式(quorum mode)运行,quorum mode具有一组ZooKeeper服务器,这一组服务器同时服务客户端的请求。具体可划分为两类:分布式模式(即多个服务器在不同计算机上)、伪分布式模式(即多个服务器在同一计算机上)。客户端与服务器之间的关系如下图所示:

     

    法定人数

    quorum mode模式下,ZooKeeper复制集群中所有服务器的数据树。但是,如果让一个客户端等待每个服务器完成数据保存后再继续,那么可能导致的延迟问题将无法接受。所以,必须指定保证ZooKeeper正常提供服务的最小服务器数量。类似于公共管理领域中的法定人数(进行一项投票所需立法者的最小数量)。

    一般情况下,在ZooKeeper分布式模式中,服务器数量为奇数个。例如,5个服务器中,至少有3个服务器提供服务(即法定人数),允许2个服务器崩溃,即多数原则;如果5个服务器节点,法定人数为2,在提供服务的2个服务器上进行了节点创建的操作,而在与另外3个服务器通信时发生长时间延迟,导致另外3个服务器无法发现该节点的创建,那么该节点创建操作就是非持久的。但是,如果只有4个服务器,那么需要保证3个服务器提供服务才能保证ZooKeeper的正常运行,那么,ZooKeeper容忍服务器崩溃的能力就会减弱。

    Leader选举

    Leader作为整个ZooKeeper集群的主节点,负责响应所有对ZooKeeper状态变更的请求和进行选举投票的发起和决议,保证服务器数据一致性。它会将每个状态更新请求进行排序和编号,以便保证整个集群内部消息处理的FIFO

    服务器具有4种状态,分别是LOOKINGFOLLOWINGLEADINGOBSERVING

    • LOOKING:寻找Leader状态。当服务器处于该状态时,当前集群中没有Leader,因此需要进入Leader选举状态。

    • FOLLOWING:跟随者状态。表明当前服务器角色是Follower

    • LEADING:领导者状态。表明当前服务器角色是Leader

    • OBSERVING:观察者状态。表明当前服务器角色是ObserverObserver不参与投票和选举过程。

    ZooKeeper的leader选举过程分为两种,服务器初始化启动和服务器运行期间无法和leader保持连接。选举过程如下图所示:

     

    服务器初始化启动leader选举分为以下几步:

    • 每个Server发出一个投票。投票信息包含myid(服务器编号)和ZXID(Zookeeper状态发生改变的序号),然后发给集群中其他机器。

    • 接受来自各个服务器的投票。

    • 处理投票。 优先检查ZXIDZXID大的服务器被选举为Leader。如果ZXID相同,myid较大的服务器被选举为Leader

    • 统计投票。每次投票后,服务器都会统计投票信息,判断是否已经有过半服务器接受到相同的投票信息。

    • 改变服务器状态。当确定了leader后,服务器更新当前状态,如果是Follower,则更新为FOLLOWING,如果是leader,则更新为LEADING

    服务器运行期间无法和leader保持连接的leader选举分为以下几步:

    • 变更状态。非Observer首先将服务器状态变更为LOOKING,然后进入Leader选举过程。

    • 其余步骤与服务器初始化启动leader选举过程相同,这里不再赘述。

    ZooKeeper伪分布式安装

    在了解ZooKeeper的仲裁模式(quorum)后,下面讲解如何安装ZooKeeper的伪分布式(3个服务器节点,法定人数2)。

    • 安装ZooKeeper第1个节点,与standalone安装方法相同(且开发环境中已经安装,安装目录/opt/zookeeper-3.4.12),这里不再赘述

    vi /opt/zookeeper-3.4.12/conf/zoo.cfg
    • zoo.cfg配置文件新增如下配置:

    1. server.1=127.0.0.1:2888:3888
    2. server.2=127.0.0.1:2889:3889
    3. server.3=127.0.0.1:2890:3890
    • 其中,每一行分别是ip,通信端口,选举leader端口。

    • 修改zoo.cfg配置文件中dataDir配置项值。修改为如下值(可根据实际情况改变):

    dataDir=/home/liujun/Downloads/zookeeper-3.4.12/tmp/data

    修改后配置文件如下图所示:

    指定myid。在配置项dataDir指定目录下,新建myid文件,并写入数字1(即第1个服务器节点),使用以下命令:

     
    
    echo 1 > /home/liujun/Downloads/zookeeper-3.4.12/tmp/data/myid

     

    将ZooKeeper的安装目录复制2个副本(即第2个和第3个服务器节点,命名可根据实际情况更改),使用如下命令(可根据实际安装目录修改):

    1. cd /home/liujun/Downloads
    2. cp -r zookeeper-3.4.12 zookeeper-3.4.12-2
    3. cp -r zookeeper-3.4.12 zookeeper-3.4.12-3

     

    将第2个和第3个服务器节点的clientPort修改为21822183(第3个服务器节点不同即可),dataDir修改为服务器节点对应安装目录(均可根据实际情况修改)。

    2服务器节点配置如下:

    1. clientPort=2182
    2. dataDir=/home/liujun/Downloads/zookeeper-3.4.12-2/tmp/data

    3服务器节点配置如下:

     
    

    1. clientPort=2183
    2. dataDir=/home/liujun/Downloads/zookeeper-3.4.12-3/tmp/data

    修改第2个和第3个服务器节点myid文件内容。分别更改为23。启动服务器。分别进入3个节点安装目录的/bin目录下,使用以下命令启动服务器:

    • ./zkServer.sh start

       

    • 利用jps命令查看当前进程,如下图所示,则伪分布式安装成功:

       

    注意:以上的 /home/liujun/Downloads 文件目录对应平台的 /opt 目录。

    编程要求

    本关任务是使用命令行,完成ZooKeeper的分布式安装3个服务器节点并启动服务器(ZooKeeper单节点安装目录为/opt/zookeeper-3.4.12),要求如下:

    • clientPort分别为218121822183

    • 3个节点的通信端口,选举leader端口分别为2888:38882889:38892890:3890

    • 3服务器节点均在/opt下,命名分别为zookeeper-3.4.12-01zookeeper-3.4.12-02zookeeper-3.4.12-03

    • dataDir分别为每个服务器节点目录的/tmp/data目录。

    • myid文件均在每个服务器节点目录的/tmp/data目录下。

     

  • 相关阅读:
    电力物联网关智能通讯管理机-安科瑞黄安南
    柠檬文案:水果柠檬宣传文案
    Qt实战案例(56)——利用QProcess实现应用程序重启功能
    Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed
    嵌入式人工智能入门:深度学习模型的部署与优化
    域名解析不生效的排查思路
    Unity3D教程:调用C++中DLL文件
    使用C语言构建一个独立栈协程和共享栈协程的任务调度系统
    SQL Server 安装后,服务器再改名,造成名称不一致,查询并修改数据库服务器真实名称
    k8s集群中部署项目之数据库准备
  • 原文地址:https://blog.csdn.net/qq_61604164/article/details/126059986