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

ZooKeeper 搭建详细步骤之三(真集群)
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 伪集群的搭建过程完成,同时我们也以此学习了集群中节点的登录、角色查看、选举验证等相关内容。真集群的搭建过程,我们在下一节来详细讲解!
ZooKeeper 搭建详细步骤之三(真集群)
ZooKeeper 搭建详细步骤之二(伪集群模式)
ZooKeeper 搭建详细步骤之一(单机模式)
ZooKeeper 及相关概念简介

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

活动回顾 | 春起潮涌——硬件驱动的量化交易与AI

4月20日,华锐技术ACLUB联合AMD在上海举办了“春起潮涌——硬件驱动的量化交易与AI”沙龙活动,会议围绕FPGA硬件加速、CPU&网卡调优、AI技术应用等展开,近50位量化IT与分享嘉宾一起探讨硬件技术在量化交易和AI领域的应用和创新。 FPGA在交…

云服务器把端口添加到安全组后无法访问

直接 sudo iptables -I INPUT 5 -p tcp --dport 8085 -j ACCEPT 8085就是端口号 然后再运行服务器 就成功了

YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)

上一节中我们讲到如何使用Labelimg工具标注自己的数据集,链接:YOLOv5利用Labelimg标注自己数据集,完成1658张数据集的预处理,接下来将进一步处理这批数据,通常是先划分再做数据增强。 目录 一、统计txt文件各标签类型…

【C语言】——数据在内存中的存储

【C语言】——数据在内存中的存储 一、整数在内存中的存储1.1、整数的存储方式1.2、大小端字节序(1)大小端字节序的定义(2)判断大小端 1.3、整型练习 二、浮点数在内存中的存储2.1、引言2.2、浮点数的存储规则2.3、浮点数的存储过…

OI Wiki—递归 分治

//新生训练,搬运整理 递归 定义 递归(英语:Recursion),在数学和计算机科学中是指在函数的定义中使用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法。 引入…

完美解决AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘

遇到这种错误通常是因为matplotlib的后端配置问题。在某些环境中,尤其是在某些特定的IDE或Jupyter Notebook环境中,可能会因为后端配置不正确而导致错误。错误信息提示 module backend_interagg has no attribute FigureCanvas 意味着当前matplotlib的后…

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用

基于STC12C5A60S2系列1T 8051单片机的Proteus中的单片机发送一帧或一串数据给串口调试助手软件接收区显示出来的串口通信应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列…

【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD)

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【MyBatis】 MyBatis框架下的高效数据操作:深入理解增删查改(CRUD) 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 My …

工具分享:免费一键生成像素风格头像神器

目录 引言神器介绍使用方法上传照⽚选择像素大小保存or分享图片生后图像处理功能娱乐功能 结语最后 引言 五一前一天和群友聊到换微信头像的事情,我就心想自己制作一些头像来用吧,起初是用的无界AI通过咒语来生成头像,但总不尽如人意。如下&…

TFLOPS和TOPS介绍

TFLOPS和TOPS都是衡量计算设备性能的单位,常用于评估处理器或加速器在科学计算、图形处理以及人工智能领域的运算能力。它们分别代表不同的运算类型: TFLOPS (Tera Floating Point Operations Per Second) TFLOPS用于衡量每秒执行的万亿次浮点运算数。…

「 网络安全常用术语解读 」软件物料清单SBOM详解

1. 概览 软件物料清单(Software Bill of Materials,SBOM)是软件成分信息的集合,SBOM文件中记录了软件产品或服务所使用组件、库、框架的清单,用于描述软件构建过程中使用的所有组件及其关系,以实现软件供应…

spring的高阶使用技巧1——ApplicationListener注册监听器的使用

Spring中的监听器,高阶开发工作者应该都耳熟能详。在 Spring 框架中,这个接口允许开发者注册监听器来监听应用程序中发布的事件。Spring的事件处理机制提供了一种观察者模式的实现,允许应用程序组件之间进行松耦合的通信。 更详细的介绍和使…

22 重构系统升级-实现不停服的数据迁移和用户切量

专栏的前 21 讲,从读、写以及扣减的角度介绍了三种特点各异的微服务的构建技巧,最后从微服务的共性问题出发,介绍了这些共性问题的应对技巧。 在实际工作中,你就可以参考本专栏介绍的技巧构建新的微服务,架构一个具备…

【Schrödinger薛定谔软件使用实战】- 4lyw蛋白实战

文章目录 软件选择1 pretein preparation1.1 import and process注意1.1.1 preprocess可能遇到的问题 1.2 review and modify1.3 refine1.3.1 optimize优化氢键网络1.3.2 minimize 氢原子会进行能量最小化 2 ligand prepare3 生成对接盒子-receptor grid generation3.1 recepto…

Q1营收稳健增长,云从科技如何在“百模大战”的险中求稳?

自从迈入大模型时代,AI行业可谓“一天一个样”。越来越多的企业涌现,舆论热议从未断绝。 但就像所有技术必须经历的那些考验,在现实尺度下,AI顺利走进商业化世界,仍然是少部分玩家掌握的稀缺能力。个中原因不尽相同&a…

第49期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

javase学习01-GUI设计中的菜单条,菜单及菜单项(简单的实现)

目录 一,效果及代码 二,相关内容 1,创建图片资源文件夹 2,菜单初识 3,图标大小设置 4,菜单高度设置 5,设置窗口的图标 ☀ 今天学习了Java的GUI(graphics user interface&…

C++入门基础(二)

目录 缺省参数缺省参数概念缺省参数分类全缺省参数半缺省参数声明与定义分离 缺省参数的应用 函数重载函数重载概念例子1 参数类型不同例子2 参数的个数不同例子3 参数的顺序不同 C支持函数重载的原理--名字修饰(name Mangling) 感谢各位大佬对我的支持,如果我的文章对你有用,欢…

报错“Install Js dependencies failed”【鸿蒙开发Bug已解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结Bug解决方案寄语项目场景: 最近也是遇到了这个问题,看到网上也有人在询问这个问题,本文总结了自己和其他人的解决经验,解决了【报错“Install Js dependencies failed”】的问题。 报错如下 问题描述 …

量子信息杂谈系列(一):关于费曼学习法

小伙伴们劳动节快乐呀,放假这几天博主准备从工作中“逃离”出来,分享一些轻松的话题。 一转眼我在一个多月的时间已经输出了二十多篇博客了,这些博客编写过程中查阅资料、消化理论和文本的编写等工作几乎占据了我所有的业余时间,压…
最新文章