云服务器搭建Zookeeper集群

文章目录

    • 1.集群配置
    • 2.zookeeper的群起脚本
    • 3. Zookeeper节点的创建和删除相关
    • 4. Zookeeper的选举机制

1.集群配置

  • Zookeeper的集群个数最好保证是奇数个数,因为Zookeeper的选举过程有一个“半数机制”。

  • 5台服务器,可以设置Zookeeper的集群为3或者5,本文将Zookeeper的集群设置为5。

    s1s2s3s4gracal
    Server1(follower)Server2(follower)Server3(may be learder)Server4(follower)Server5(follower)
  • 第一次启动时,会采用半数选举机制,选出learder

2.zookeeper的群起脚本

  • 每次都需要在各个服务器分别启动zookeeper比较麻烦,因此可以编写脚本群起zookeeper集群

  • 在s1的/home/gaochuchu/bin目录下创建zk.sh脚本来启停zookeeper集群

    #启动zookeeper集群
    zk.sh start
    #停止zookeeper集群
    zk.sh stop
    #查看所有的zookeeper的状态
    zk.sh status
    

3. Zookeeper节点的创建和删除相关

  • 节点类型

image-20231023160008408

  • 创建普通节点(永久节点+不带序号)

    #create 节点目录位置 值
    create /a "ainfo"
    
  • 获得节点的值

    #get -s 获取节点的值
    get -s /a
    
  • 创建带序号的节点(永久节点+带序号)

    #create -s
    create -s /a/b/c "cinfo"
    
  • 创建短暂节点(短暂节点+不带序号)

    #create -e
    create -e /a/b "binfo"
    
  • 创建短暂节点(短暂节点+带序号)

    #create -e -s
    create -e -s /a/b/c "cinfo"
    
  • 查看当前znode所包含的内容

    ls /a
    
  • 查看当前节点的详细数据

    ls -s /a
    
  • 删除节点

    delete /a/b
    
  • 若是一个节点目录下有多个子节点,若要删除该目录下的所有子节点,以及子节点的子节点

    deleteall /sanguo/shuguo
    

4. Zookeeper的选举机制

Zookeeper的选举机制的理解,有助于理解后续对于Spark等各种分布式框架配置高可用的备用主节点的替换流程

  • 如果是第一次启动,采用半数选举机制

    image-20231023161404702

    • 假设Zookeeper集群中有五台服务器,其具体的流程如下:

      • 1.首先Server1启动,发起一次选举。Server1投自己一票,此时Server1的票数1票,不够半数以上(3票),选举无法完成,Server1的状态保持为LOOKING;

      • 2.Server2启动,再发起一次选举。Server1和Server2分别投自己一票并交换选票信息:此时Server1发现Server2的maid(服务器编号,唯一)比自己目前投票选举的(Server1)大,因此Server1更改选票为推选Server2.此时Server1的票数是0票,而Server2的票数是2票,没有半数以上结果,选举无法完成,此时Server1和Server2都保持LOOKING状态。

      • 3.Server3启动,发次一次选举。通过Server1、Server2、Server3分别投自己一票并且交换选票信息:此时Server1和Server2发现Server3的myid大于自身,因此Server1和Server2都转投Server3,此时Server3的票数为3,因此Server3当选Leader。Server1和2更改状态为FOLLOWING,Server3更改为LEADING

      • 4.Server4启动,此时发起选组,但是由于Server1和Server2都已经不是LOOKING状态,因此不会更改选票信息;Server3为3票,Server4为1票。Server4服从多数,更改选票信息为Server3,并更改状态为FOLLOWING;

      • 5.Server5启动,情况同Server4,也更改状态为FOLLOWING;

        因此可以得出结论:第一次启动时,只要确定的Leader之后,后续的选举过程不会再改变Leader,只是修改Server的状态为FOLLOWING

  • 如果不是第一次启动,Zookeeper的选举机制为:

    如果不是第一次启动,可能涉及了几个概念:

    • SID:服务器ID。用来唯一标识一台Zookeeper集群的机器,每台机器不能重复,和myid一致。

    • ZXID:事务ID。ZXID是事务ID,用来标识一次服务器状态的变更。在某一时刻,集群中的每台机器的ZXID不一定完全一致,这和Zookeeper服务器对于客户端“更新请求”的处理逻辑有关。

      • 每次对节点数据的变更都会更新事务id,事务id的值越大就说明数据越新,在选举算法中数据越新权重越大。

      • 关于ZXID的组成部分,其有更详细的解释:

        实现中 zxid 是一个 64 位的 数字,它高32位是epoch(ZAB协议通过epoch编号来 区分 Leader 周期变化的策略)用来标识 leader 关系是否 改变,每次一个 leader 被选出来,它都会有一个新的 epoch=(原来的epoch+1),标识当前属于那个leader的 统治时期。低32位用于递增计数
        epoch :可以理解为当前集群所处的年代或者周期,每个 leader就像皇帝,都有自己的年号,所以每次改朝换代, leader 变更之后,都会在前一个年代的基础上加 1 。这样就算旧的leader崩溃恢复之后 ,也没有人听他的了,因为follower只听从当前年代的leader的命令

      • Epoch:每个Leader任期的代号。没有Leader的时同一轮投票过程中的逻辑时钟的值是相同的。每投完一次票这个数据就会增加。

        image-20231023173240149

        其具体的选举过程如下:

        • 当Zookeeper集群中的一台服务器出现以下两种情况之一的时候,会进入Leader的选举:

          • 服务器初始化启动
          • 服务器运行期间无法和Leader保持连接
        • 而当一台机器进入Leader选举流程的时候,当前集群中也会出现两种状态:

          • 集群中本来已经存在一个Leader

            假设Server5断开连接,这对应第一种已经存在leader的状态,如果此时试图去选举Leader时,会被告知当前服务器的Leader的信息,仅仅需要和Leade r机器重新建立连接,并进行状态同步。

          • 集群中确实不存在Leader的情况。

            假设此时的Server3也突然出现故障挂了,此时就需要进行Leader的选举。

            Leader选举时的优先级:EPOCH>ZXID>SID

            服务器Server1Server2Server4
            (EPOCH,ZXID,SID)(1,8,1)(1,8,2)(1,8,4)

            此时按照选举优先级:

            1.EPOCH大的直接胜出

            2.EPOCH相同,则ZXID大的胜出

            3.ZXID相同,则SID大的胜出

            因此此时的Server2应该胜出,成为新的Leader,且EPOCH加一

        • 问题:当此时的Server3和Server5故障恢复重新加入集群时,会发生什么?

          此时会同步Leader的EPOCH的值,因为当前Leader的EPOCH值比之前未更新的大,因此会自动和Leader更新EPOCH的值,自己会转为FOLLOWING状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/124232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习(18)-任务并行度优化

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…

uniapp实现公众号微信登录

前端代码 data() {return {openid: "",server: ,code:}; }, mounted() {this.getCode() }, methods:{getCode() {// 非静默授权,第一次有弹框this.code ;var callback_url 回调地址; // 获取页面urlvar appid APPID;this.code this.getUrlCode().cod…

通信原理板块——卷积码(原理、代数和几何表示、编码和解码)

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、卷积码定义 卷积码(convolution…

uboot - 驱动开发 - 驱动模型

说明 类似于linux,为了规范、统一驱动适配和驱动接口调用,uboot定义了一套驱动模型(Driver Model),简称DM。本文基于:u-boot-2021.10。 优点 为同一类ip的驱动定义了统一的操作接口,DM在软件层面做了一定的抽象。分…

SM2协同签名算法

在介绍SM2协同签名之前,先介绍下门限签名机制,提到门限签名就不得不提区块链,在与区块链的结合应用中,门限签名的优势在于签名的生成是通过链下的 MPC 协议产生的,其结果是更加安全,避免了合约被黑客攻击的…

网络工程综合试题(二)

1. SR技术有哪些缺点? SR(Segment Routing)技术是一种新兴的网络编程技术,它具有很多优点,但也存在一些缺点,包括: 部署复杂性:SR技术需要对网络进行改造和升级,包括更新…

基于SpringBoot的企业财务管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 财务人员管理 留言管理 薪资管理 财务人员功能实现 报销信息管理 收费信息管理 支出信息管理 员工功能实现 报销信息管理 留言管理 薪资查询 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前…

研究生安排

研一 看论文不懂先记着 论文一定多看的,建议300篇论文,500最好。 选题的时候要心里有谱,先找小论文,再找大论文 研二 确定研究方向和目标 和老师切磋研究的是什么 明确要做的东西是什么,是否已经明确要做什么&#xff…

kubernetes组件

基本队对象 pod 最小单位 service 跟网络相关 Volume Namespace 准备工作: master (1) node1 node2 初始化 做本地解析 10.0.0.51 10.0.0.56 10.0.0.186 关闭swap分区:sed -i s/.*swap.*

Centos安装mongodb

mongodb官网 下载MongoDB cd /optwget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.2.tgztar -xf mongodb-linux-x86_64-rhel70-4.4.2.tgz -C /usr/local/cd /usr/local/mv mongodb-linux-x86_64-rhel70-4.4.2 mongodb部署Mongodb 2.1. 创建目录 cd mo…

k8s资源调度

默认的情况下,一个pod在哪个node节点上运行,是由scheduler组件采取对应的算法计算出来的,这个过程是不受人工控制的,在实际的使用过程中,这不能够满足客观的场景,针对这样的情况,k8s 提供了四大…

基于【逻辑回归】的评分卡模型金融借贷风控项目实战

背景知识: 在银行借贷过程中,评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段。今天我们来复现一个评分A卡的模型。完整的模型开发所需流程包括:获取数据,数据清洗和特征工程,模型开发&#xff0c…

计算机基础知识41

前端 # 前端是所有跟用户直接打交道 比如:PC页面、手机页面、汽车显示屏,肉眼可以看见的 # 后端:一堆代码,用户不能够直接看到,不直接与用户打交道 常见的后端:Python、Java、Go等 # 学了前端就可以做全栈…

C语言每日一练(二)

单链表经典算法专题 一、 单链表相关经典算法OJ题1:移除链表元素 解法一:在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…

【T】分治与倍增

分治,分而治之,其中最经典的便是二分 一、二分 一种经典而且非常好用的思想 将原问题对半转换成两个问题,子问题又继续转换成两个问题,许多子问题会很显然对答案没有关系,所以能讲原本O(n)的东西转化为O(logn) 但一般…

(13)PC端自动化测试-C#微信接收消息并自动回复

本篇文章实现了微信自动接收最新的实时聊天信息,并对当前实时的聊天信息做出对应的回复。 可以自行接入人工智能或者结合自己的业务来做出自动回复。 下面视频是软件实际效果 自动接收消息并回复 实现的逻辑是实时监控微信的聊天面板中UI对象来判断是否有最新的消…

世界前沿技术发展报告2023《世界航空技术发展报告》(五)直升机技术

(五)直升机技术 1.常规直升机技术1.1 北约六国联合启动下一代旋翼飞行器能力项目1.2 美国和法国重视发展有人/无人直升机编组能力1.3 美国“黑鹰”直升机完成不载人全自主飞行 2.新概念直升机技术2.1 美国“劫掠者”X型直升机参与陆军“未来攻击侦察机”…

Go学习第十五章——Gin参数绑定bind与验证器

Go web框架——Gin(参数绑定bind与验证器) 1 bind参数绑定1.1 JSON参数1.2 Query参数1.3 Uri绑定动态参数1.4 ShouldBind自动绑定 2 验证器2.1 常用验证器2.2 gin内置验证器2.3 自定义验证的错误信息2.4 自定义验证器 1 bind参数绑定 在Gin框架中&#…

Vue 路由指南:畅游单页应用的地图(Vue Router 和 <router-view>)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【时间复杂度和空间复杂度】

前言: 首先介绍一下算法(Algorithm) 算法是对特定问题求解步骤的一种描述。一个“好”的算法应该达到以下目标:正确性、可读性、健壮性、高效率与低存储量需求 算法的效率的度量 是通过 时间复杂度 和 空间复杂度 来描述的 一、时间复杂度 时间复杂度…