ZooKeeper 搭建详细步骤之二(伪集群模式)

ZooKeeper 搭建详细步骤之一(单机模式)
ZooKeeper 及相关概念简介

伪集群搭建

ZooKeeper 伪集群是指在一个单一的物理或虚拟机环境中模拟出一个由多个 ZooKeeper 节点构成的集群。尽管这些节点实际上运行在同一台机器上,但它们通过配置不同的端口、数据目录和配置文件,以模拟在真实分布式环境下不同服务器上运行的效果。

伪集群的主要目的是便于开发、测试和学习 ZooKeeper 集群的功能和行为,而不必消耗大量的硬件资源来部署多台独立的物理服务器。

以下是搭建 ZooKeeper 伪集群的一般步骤:

准备工作

  1. 环境要求

    • 安装了 Java 运行环境(JRE 或 JDK),确保版本符合 ZooKeeper 的兼容性要求。
  • 下载并解压 ZooKeeper 的官方发行包到本地目录。
  1. 目录结构

    为每个 ZooKeeper 节点创建独立的数据目录和日志目录,例如:

    zk_node1_data
    zk_node1_log
    zk_node2_data
    zk_node2_log
    zk_node3_data
    zk_node3_log
    # 也可以让数据和日志存放同一个目录,这样只需要三个目录即可
    zk1
    zk2
    zk3
    
  2. 创建 myid 文件

    • 在每个节点的数据目录下创建一个名为 myid 的文本文件
    • 其中仅包含一行,写入对应的节点编号(1、2、3)。
  3. 配置文件

    • 对于每个节点,复制 ZooKeeper 原始发行包中的 conf/zoo.cfg 文件,为每个节点创建对应的配置文件,如:

      zoo1.cfg
      zoo2.cfg
      zoo3.cfg
      
    • 在这些配置文件中设置以下关键参数:

      • dataDir: 指定对应节点的数据目录。

      • clientPort: 分配不同的端口号给每个节点,如 2181、2281、2381。

      • server.x:

        • x 是节点编号,从 1 开始递增。

        • 格式为 server.x=localhost:y:z,其中 localhost 表示本机地址,y 是用于内部通信的选举端口(如 2888 和 3888),z 是数据同步端口(通常与选举端口相差 1000,如 3888 和 4888)。

        • 示例:

          server.1=127.0.0.1:2888:3888
          server.2=127.0.0.1:4888:5888
          server.3=127.0.0.1:6888:7888
          

启动集群

  1. 启动节点

    • 使用如下命令启动每个节点,指定各自的配置文件:

      bin/zkServer.sh start conf/zooX.cfg
      
    • 其中 X 应替换为实际节点编号(1、2、3)。

验证与管理

  1. 检查状态

    • 使用 zkCli.sh 工具连接任意一个节点的客户端端口,检查集群状态:

      bin/zkCli.sh -server localhost:2181
      
    • 在 CLI 中执行 statls / 命令,确认是否能正常连接并查看集群信息。

  2. 模拟故障与恢复

    • 可以通过停止某个节点的进程来模拟节点故障,然后重新启动以观察集群的自我修复能力。

通过以上步骤,您可以在一台机器上搭建起一个由三个节点组成的 ZooKeeper 伪集群,用于学习、测试和验证 ZooKeeper 的集群功能和容错机制。在实际操作时,请参照具体版本的 ZooKeeper 文档,因为配置细节可能会随着版本更新而有所变化。

步骤举例演示

新建三个目录和 myid 文件

[zhang@node1 ~]$ cd /opt/apps/zookeeper/
[zhang@node1 zookeeper]$ ls
bin  conf  docs  lib  LICENSE.txt  logs  NOTICE.txt  README.md  README_packaging.md  zk_data  zk_logs
# 在 zookeeper 安装目录下新建三个目录
[zhang@node1 zookeeper]$ mkdir zk1 zk2 zk3
[zhang@node1 zookeeper]$ ls
bin  conf  docs  lib  LICENSE.txt  logs  NOTICE.txt  README.md  README_packaging.md  zk1  zk2  zk3  zk_data  zk_logs
# 每个目录下 新建 myid 文件 并追加内容分别为1 2 3 
[zhang@node1 zookeeper]$ touch zk1/myid
[zhang@node1 zookeeper]$ echo 1 >> zk1/myid
[zhang@node1 zookeeper]$ touch zk2/myid
[zhang@node1 zookeeper]$ echo 2 >> zk2/myid
[zhang@node1 zookeeper]$ touch zk3/myid
[zhang@node1 zookeeper]$ echo 3 >> zk3/myid
# 查看确认
[zhang@node1 zookeeper]$ cat zk1/myid
1
[zhang@node1 zookeeper]$ 

新建三个配置文件

[zhang@node1 zookeeper]$ cd conf
[zhang@node1 conf]$ ls
configuration.xsl  logback.xml  zoo.cfg  zoo_sample.cfg
# 以 zoo.cfg 为模板,复制出三个配置文件
[zhang@node1 conf]$ cp zoo.cfg zoo1.cfg
[zhang@node1 conf]$ cp zoo.cfg zoo2.cfg
[zhang@node1 conf]$ cp zoo.cfg zoo3.cfg
[zhang@node1 conf]$ ls
configuration.xsl  logback.xml  zoo1.cfg  zoo2.cfg  zoo3.cfg  zoo.cfg  zoo_sample.cfg
[zhang@node1 conf]$ vim zoo1.cfg
# 编辑内容如下

编辑 dataDir 、clientPort、server.1、server.2、server.3

三个配置文件分别编辑下面内容,三个配置文件 clientPort 和 dataDir 不同

在这里插入图片描述

继续编辑

# 继续编辑修改另两个配置文件
[zhang@node1 conf]$ cp zoo1.cfg zoo2.cfg
[zhang@node1 conf]$ cp zoo1.cfg zoo3.cfg
[zhang@node1 conf]$ vim zoo2.cfg
[zhang@node1 conf]$ vim zoo3.cfg# 启动一个节点,这里zkServer 会自动到 conf 目录下找 zoo1.cfg
[zhang@node1 conf]$ zkServer.sh start zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/bin/../conf/zoo1.cfg
Starting zookeeper ... STARTED
[zhang@node1 conf]$ zkServer.sh start zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/bin/../conf/zoo2.cfg
Starting zookeeper ... STARTED
[zhang@node1 conf]$ zkServer.sh start zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/bin/../conf/zoo3.cfg
Starting zookeeper ... STARTED# 启动后,可以查看进程,有三个 QuorumPeerMain
[zhang@node1 conf]$ jps
34962 QuorumPeerMain
30132 QuorumPeerMain
16533 NodeManager
2777 NameNode
2906 DataNode
35036 Jps
34911 QuorumPeerMain
登录节点

登录不同节点的方式,需要打开不同的 shell 窗口

zkCli.sh -server node1:2181

zkCli.sh -server node1:2182

zkCli.sh -server node1:2183

[zhang@node1 mybin]$ zkCli.sh -server node1:2181
Connecting to node1:2181
2024-04-26 14:49:53,975 [myid:] - INFO  [main:o.a.z.Environment@98] - Client environment:zookeeper.version=3.8.4-9316c2a7a97e1666d8f4593f34dd6fc36ecc436c, built on 
#......省略
2024-04-26 14:49:53,991 [myid:] - INFO  [main:o.a.z.c.X509Util@78] - Setting -D jdk.tls.rejectClientInitiatedRenegotiation=true to disable client-initiated TLS renegotiation
# 省略.......WATCHER::WatchedEvent state:SyncConnected type:None path:null
[zk: node1:2181(CONNECTED) 0] 
集群中角色

如何查看集群中各个节点的角色?

Leader(领导者):

  • 描述:在一个 ZooKeeper 集群中,任何时候都只会有一个 Leader 节点。它是集群的核心,负责处理写请求(如创建、更新、删除节点等操作)以及维护集群状态的一致性。

Follower(跟随者):

  • 描述:Follower 节点是集群中的大多数节点,它们接收并响应客户端的读请求,并参与 Leader 节点发起的事务投票。

可以使用命令:

zkServer.sh status 配置文件.cfg

# 启动三个节点
[zhang@node1 mybin]$ zkServer.sh start /opt/apps/zookeeper/conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo1.cfg
Starting zookeeper ... STARTED
[zhang@node1 mybin]$ zkServer.sh start /opt/apps/zookeeper/conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo2.cfg
Starting zookeeper ... STARTED
[zhang@node1 mybin]$ zkServer.sh start /opt/apps/zookeeper/conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo3.cfg
Starting zookeeper ... STARTED# 结合配置文件查看各个节点状态
[zhang@node1 mybin]$ zkServer.sh status /opt/apps/zookeeper/conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo3.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: follower # 跟随者
[zhang@node1 mybin]$ zkServer.sh status /opt/apps/zookeeper/conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower # 跟随者
[zhang@node1 mybin]$ zkServer.sh status /opt/apps/zookeeper/conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo2.cfg
Client port found: 2182. Client address: localhost. Client SSL: false.
Mode: leader # 领导者#====检查选举
# 停止领导者 node2
[zhang@node1 mybin]$ zkServer.sh stop /opt/apps/zookeeper/conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo2.cfg
Stopping zookeeper ... STOPPED# 再去查看剩余的两个节点,发现 节点3 变成了领导者了
[zhang@node1 mybin]$ zkServer.sh status /opt/apps/zookeeper/conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo3.cfg
Client port found: 2183. Client address: localhost. Client SSL: false.
Mode: leader
[zhang@node1 mybin]$ zkServer.sh status /opt/apps/zookeeper/conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: /opt/apps/zookeeper/conf/zoo1.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[zhang@node1 mybin]$ 

到此,ZooKeeper 伪集群的搭建过程完成,同时我们也以此学习了集群中节点的登录、角色查看、选举验证等相关内容。真集群的搭建过程,我们在下一节来详细讲解!

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

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

相关文章

字节秋招高频算法汇总(高级篇)

更多大厂面试内容可见 -> http://11come.cn 字节秋招高频算法汇总 接下来讲一下 字节秋招 中的高频算法题,分为三个部分: 基础篇 、 中级篇 、 进阶篇 目的就是为了应对秋招中的算法题,其实过算法题的诀窍就在于 理解的基础上 背会 看…

【ARMv9 DSU-120 系列 5 -- CHI Interface】

请阅读【Arm DynamIQ™ Shared Unit-120 专栏 】 文章目录 DSU-120 CHI BUSAddress Target Groups配置步骤映射和管理Hashing for CHI transaction distribution散列过程和地址目标组识别散列函数定义两个地址目标组的散列四个地址目标组的散列八个地址目标组的散列架构框图

与Apollo共创生态:我和Apollo七周年大会的心路历程

一、写在前面 前几天观看了Apollo七周年大会,给我带来了超多的惊喜,博主想将这份惊喜分享给大家! 二、Apollo开放平台 Apollo开放平台秉承其核心理念——开放能力、共享资源、加速创新、持续共赢,致力于推动自动驾驶技术的革新…

《HCIP-openEuler实验指导手册》1.2Apache主页面配置

一、配置服务器监听IP及端口 注释主配置文件“监听IP及端口”部分 cd /etc/httpd/conf cp httpd.conf httpd.conf.bak vim httpd.conf可以在普通模式下搜索Listen关键字 :/Listen按n键继续向后搜索 在/etc/httpd/conf.d中新建子配置文件port.conf: touch /etc…

新质生产力的内涵

新质生产力是以科技创新为先导,摆脱传统增长路径、符合高质量发展要求的生产力跃迁新形态,是数字时代更具有融合性、更体现新内涵的生产力组合。如果说传统生产力是人类已经掌握并正在使用的生产力,那么,新质生产力就是以大数据、…

Linux系统及工具的使用

​ Linux的版本系列与划分: Redhat与Debian系介绍(Linux各种发行版本概述)_酷炫人笨笨熊-CSDN博客_redhat和debian的区别 ubuntu下 1.打开 .bashrc文件, 在最后面添加下面一句话 Ubuntu 22.04下安装配置rime五笔输入法_ubuntu 22.04 五笔_繁星间漫步的博客-CSDN博客…

观成科技:蔓灵花组织加密通信研究分析总结

1.概述 蔓灵花,又名"Bitter",常对南亚周边及孟加拉湾海域的相关国家发起网络攻击,主要针对巴基斯坦和中国两国。其攻击目标主要包括政府部门、核工业、能源、国防、军工、船舶工业、航空工业以及海运等行业,其主要意图…

笔记:Python 注释(练习题)

文章目录 前言一、Python 注释是什么?二、选择题二、填空题三、编程题总结 前言 欢迎来到Python注释练习!在这个练习中,我们将探讨Python中注释的重要性和使用方法。注释在代码中扮演着关键的角色,不仅可以提高代码的可读性&…

火绒安全:全面守护你的数字世界

火绒安全:全面守护你的数字世界 在数字化时代的浪潮中,我们的电脑和生活已经紧密相连。然而,网络安全问题也如影随形,恶意软件、病毒、间谍软件等安全威胁层出不穷。作为一名国际著名的病毒程序软件专家,我深知一款高…

AI未来——从萌芽到智能新纪元

按照人工智能的发展阶段,具体的里程碑事件和细节: 人工智能的萌芽期(1940年代-1950年代) 1943年,麦卡洛克和皮茨发表题为《A Logical Calculus of Ideas Immanent in Nervous Activity》的论文,首次提出人工神经网络概念1950年,图灵在《计算机器与智能》一文中提出…

后端每日一题 2:DNS 解析过程

本文首发于公众号:腐烂的橘子 本文梗概: DNS 是什么,有什么作用一条 DNS 记录是什么样的DNS 域名解析原理DNS 服务器如何抵御攻击 DNS 是什么,有什么作用 DNS(Domain Name System)是一种应用层协议&…

JS高级 -- 数据类型

1. 分类 基本(值)类型 String:任意字符串Number:任意的数字Boolean:true / falseundefined:undefinednull:null 对象(引用)类型 Object:任意对象Function:一种特别的对象(可以执行)Array&am…

解决 Oracle 表锁

程序更新大量数据的时候, 由于时间太长, 页面刷新又重新提交了一次, 结果后续的任何变动都直接卡住, 一开始以为是代码问题, 使用 jstack 命令导出了当前堆栈, 结果发现有重复的语句卡在 update 上了, 看 sql 语句, 发现就是正常的 update, 那问题大概率就是出在表被锁身上了. …

使用和配置:超秀的 MySQL 客户端工具 MyCli

1.安装一个更人性化的一个mysql客户端、终端: sudo apt install mycli 登录方式 mycli -uroot password 2. 功能:界面更好看,且支持自动补全,按tab可以补全 3.mycli使用帮助说明文档 mycli --help用法: mycli [OPTIONS] [DATABASE]例如:…

西门子程序专业备份软件BUDdy for S7和使用说明

西门子程序专业备份软件BUDdy for S7和使用说明

如何在Django中使用Ajax进行动态数据更新?

在Django中使用Ajax进行动态数据更新需要以下步骤&#xff1a; 在前端页面中引入jQuery库。 <script src"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>创建一个处理Ajax请求的视图函数。 from django.http import Json…

虹科Pico汽车示波器 | 免拆诊断案例 | 2006 款林肯领航员车发动机怠速抖动

故障现象 一辆2006款林肯领航员车&#xff0c;搭载5.4 L发动机&#xff0c;累计行驶里程约为26万km。该车因发动机怠速抖动故障进厂维修&#xff0c;维修人员更换了火花塞、点火线圈及凸轮轴位置传感器&#xff0c;清洗了积炭和喷油器&#xff0c;故障依旧&#xff0c;于是向笔…

富格林:正确曝光做单欺诈套路

富格林悉知&#xff0c;黄金是一种不错的投资产品&#xff0c;其具有良好的避险作用。选择已曝光的正确黄金产品&#xff0c;也能把握不错的收益。虽然黄金投资的对象单一&#xff0c;但这并不意味着投资者可以轻而易举获得收益&#xff0c;要想获得收益就得杜绝欺诈套路。下面…

SpringBoot学习之Redis下载安装启动【Windows版本】(三十六)

一、下载Redis for Windows Redis 官方网站没有提供 Windows 版的安装包,但可以通过 GitHub 来下载安装包,下载地址:https://github.com/tporadowski/redis/releases 1、网站提供了安装包和免安装版本,这里我们直接选择下面的免安装版本 2、下载后的压缩包解压以后,如下…

C#基础之结构体

结构体 文章目录 1、概念2、基本语法3、示例4、结构体的使用5、访问修饰符6、结构体的构造函数思考1 描述矩形信息思考2 职业名字释放了技能思考3 小怪兽思考4 多个小怪兽思考5 奥特曼打小怪兽 1、概念 结构体是一种一定义变量类型 它是数据和函数的集合&#xff0c;可以在结…