云服务器搭建Zookeeper集群

news2024/9/23 7:26:44

文章目录

    • 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节点的创建和删除相关

  • 节点类型

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

    #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.coloradmin.cn/o/1143866.html

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

相关文章

世界前沿技术发展报告2023《世界航空技术发展报告》(二)军用飞机技术

(二)军用飞机技术 1.作战飞机1.1 美俄对第五代战斗机进行升级改进1.2 美欧第六代战斗机技术取得新进展1.3 美国B-21隐身轰炸机正式亮相 2.支援飞机2.1 美国空军拟研制翼身融合布局运输/加油机2.2 美欧厂商积极参加北约未来预警机技术研究项目2.3 美国空军…

FPGA时序分析与约束(7)——通过Tcl扩展SDC

一、概述 术语“Synopsys公司设计约束”(又名SDC,Synopsys Design Constraints)用于描述对时序、功率和面积的设计要求,是EDA工具中用于综合、STA和布局布线最常用的格式。本文介绍时序约束的历史概要和SDC的描述。 二、时序约束…

【计算机网络】TCP协议

文章目录 1. TCP报文的结构2. TCP的发送缓冲区和接收缓冲区3. 确保可靠性序列号和确认序列号确认应答超时重传连接管理1️⃣三次握手建立连接2️⃣四次挥手断开连接 4. 提高性能流量控制滑动窗口拥塞控制延迟应答捎带应答 5. 面向字节流6. TCP/UDP对比 概念:TCP&…

threejs(7)-精通粒子特效

一、初识Points与点材质 // 设置点材质 const pointsMaterial new THREE.PointsMaterial(); import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; // 导入动画库 import gsa…

854算法之线性表

周小伦说的建议王道的所有算法题最好都写一下啊,尤其是树的,排序相关的要写一下,然后还有链表,链表有一些反转链表啊一些经典的代码肯定要背的呀,比如说,三种遍历的递归和非递归,怎么找树的宽度…

【C程序设计】用心浇灌<C程序>

目录 数据类型 整数类型 实例 浮点类型 void 类型 类型转换 数据类型 在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。 C 中的类型可分为以下几种&…

服务端推送、 server sent event、sse、springboot+sse

SSE(server-sent events) SSE全称server-sent events,翻译过来是服务端发送事件,通常的http请求,客户端请求,服务端返回响应,一次只能返回一个值;SSE使用的http协议,客户端请求后,服…

bbr 的 “最优操作点”

最近做一组测试,我复现了一组结果准备阐释另一个事。先看这个测试结果: 常规的一个 wrk2(expected_latency_timing 改为 actual_latency_timing 计数) 压 nginx 的测试,调整 -R 参数,Req/sec 同步增加,当 Req/sec 不…

(免费领源码) Asp.Net#SQL Server校园在线投票系统10557-计算机毕业设计项目选题推荐

摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,校园投票通过网…

液氮恒温器主要特点

恒温器是直接或间接控制一个或多个热源和冷源来维持所要求的温度的一种装置。 主要特点 更宽温区:液氮恒温器的温区宽度扩展到了80K~500K,为液氮温区实验用户提供更宽温区解决方案。 操作更简单:液氮恒温器在样品更换、液氮填充、控制液氮…

UI自动化概念 + Web自动化测试框架介绍

1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …

【分享】RAR压缩包的密码可以取消吗?

在日常工作中,我们可能经常用到RAR文件,RAR作为一种常见的压缩文件格式,可以将一个或多个文件压缩成单个文件,方便传输和保存。 RAR文件还可以设置“打开密码”,这样只有输入正确的密码才能打开压缩包里面的文件&…

SpringBoot 快速实现 api 加密

在项目中,为了保证数据的安全,我们常常会对传递的数据进行加密。常用的加密算法包括对称加密(AES)和非对称加密(RSA),博主选取码云上最简单的API加密项目进行下面的讲解。 下面请出我们的最亮的…

5 个编写高效 Makefile 文件的最佳实践

在软件开发过程中,Makefile是一个非常重要的工具,它可以帮助我们自动化构建、编译、测试和部署。然而,编写高效的Makefile文件并不是一件容易的事情。在本文中,我们将讨论如何编写高效的Makefile文件,以提高我们的开发…

【Bug——VMware Workstation】虚拟机桥接网络没有 VMnet0

此时 没有VMnet0用来桥接网络。 接下来进行解决 1.找到安装VM的路径,在安装的目录里面找到如图所示的三个文件: 2.依次点击鼠标右键 将这三个文件依次安装如图所示: 二.windows下的操作 1.首先 找到电脑的控制面板->网络和internet->…

二维码智慧门牌管理系统升级解决方案:采集计划精细化管理的艺术

文章目录 前言一、采集计划的定义和配置流程二、多采集计划配置策略三、采集计划的实践应用 前言 在数字化时代,建设智慧城市需要借助各种先进的技术工具。其中,二维码智慧门牌管理系统在城市管理、资源调配和公众服务等方面扮演着举足轻重的角色。关键…

不容错过的Spring框架解析,掌握开发中的关键技术

Spring 原理 它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring仍然可以和其他的框架无缝整合。 Spring 特点 轻量级 控制反转 面向切面 容器 框架集合 Spring特征 Spring 核心组件 Spring 常用模块 Spring 主要包 Spring …

Self-Supervised MultiModal Versatile Networks

方法 视觉-音频空间S v a _{va} va​,嵌入z v , v a t _{v,vat} v,vat​ 体会 一篇文章只有一张图,笑死人。作者且未回复问题

体育竞技分析

体育竞技分析是一项重要的工作,它通过对运动员的数据进行收集、处理和分析,可以帮助教练和球队做出更明智的决策。Python作为一种强大的编程语言,提供了丰富的库和工具,可以用于体育竞技数据的分析和可视化。本文将介绍如何使用Py…

二、BurpSuite Decoder解码器

一、编码解码 解释:BurpSuite 可以用这个模块来轻松进行编码解码,下面是支持的类型 URL HTML Base64 ASCIIhex Hex Octal Binary Gzip 注意:特别注意的是URL编码,一般的在线网站都无法对比如‘abc’的文本编码,burps…