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

news2024/11/20 8:36:25

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

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

相关文章

【学习笔记二十八】EWM和QM集成的后台配置和前台展示

一、EWM和QM集成概述 SAP EWM(扩展仓库管理)和QM(质量管理)的集成是SAP系统中一个重要的特性,它允许企业在仓库管理过程中实现质量控制和检验流程的自动化。以下是关于EWM和QM集成的一些关键点概述: 集成优势:通过集成,企业可以确保仓库中的物料在收货、存储、…

flutter笔记-主要控件及布局

文章目录 1. 富文本实例2. Image2.1 本地图片2.2 网络图片 笔记3. 布局4. 滑动相关view4.1 GridView类似九宫格view4.2 ListView 关于widget的生命周期的相关知识这里就不做介绍,和很多语言类似; 1. 富文本实例 Dart中使用richtext,示例如下…

深入浅出MySQL-02-【MySQL支持的数据类型】

文章目录 前言1.数值类型2.日期时间类型3.字符串类型3.1.CHAR和VARCHAR类型3.2.ENUM类型3.3.SET类型 4.JSON类型 前言 环境: Windows11MySQL-8.0.35 1.数值类型 MySQL中的数值类型,如下: 整数类型字节最小值最大值TINYINT1有符号 -128无…

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应,即使设置参数默认值,也不可省略。 2.只知道类名,需要将该类作为参数调用泛型接口。 3.只知道类名,需要将该类的数组作为参数调用泛型接口…

基于51单片机的电梯仿真系统

基于51单片机的电梯设计 (仿真+程序PPT) 功能介绍 具体功能: 1.一共4层,数码管显示当前楼层; 2.六个按键模拟电梯外按键(1上、2上、2下、3上、3下、4下),每当按下时有…

前端HTML5学习2(新增多媒体标签,H5的兼容性处理)

前端HTML5学习2新增多媒体标签,H5的兼容性处理) 分清标签和属性新增多媒体标签新增视频标签新增音频标签新增全局属性 H5的兼容性处理 分清标签和属性 标签(HTML元素)和属性,标签定义了内容的类型或结构,而…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现,通常是ETCD、NACOS、ZOOKEEPER等等,但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式,接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图: Red…

多端文件互传软件-LocalSend

一、前言 日常学习或者是工作需求,需要手机和电脑互传文件。用到频率低的话,使用即时通讯软件也就够了。 像我日常使用的多端互传文件软件是LocalSend。 二、 LocalSend LocalSend是一款基于局域网的文件传输工具。 LocalSend是一种用于在本地网络中…

系统盘空间不足调优方式1-APPData/大文件清理

作者:私语茶馆 1.前言 Windows系统盘(C盘)很容易剩余空间不足,这种情况下会非常影响Windows系统的运行,系统盘约束非常多,不方便在线扩容,因此规划和利用好系统盘是保障整体运行效率的关键。包…

经典机器学习算法——Pagerank算法

目录 Pagerank介绍 背景介绍 中心思想 一、量化重要性 三大指标 1、数量指标 2、质量指标 3、稀释指标 二、实际应用简化为理论模型 PageRank公式 手动预测网站的重要度 马尔可夫矩阵预测网站的重要度 两个方法的联系 PageRank算法存在的问题 一、Dead Ends问题…

XTuner微调LLM:1.8B、多模态和Agent-笔记四

本次课程由XTuner 贡献者李剑锋、汪周谦、王群老师讲解【XTuner 微调 LLM:1.8B、多模态和 Agent】课程 课程视频:http:// https://b23.tv/QUhT6ni 课程文档:https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 两种Finetun…

web题目实操 5(备份文件和关于MD5($pass,true)注入的学习)

1.[ACTF2020 新生赛]BackupFile (1)打开页面后根据提示是备份文件 (2)查看源码发现啥都没有 (3)这里啊直接用工具扫描,可以扫描到一个文件名为:/index.php.bak的文件 (…

使用Docker部署Jupyter Notebook并结合花生壳的内网穿透实现远程访问(详文)

一、前言 本文主要介绍如何利用宝塔面板中的Docker 3.9.3管理器,使用Docker本地部署Jupyter Notebook,并结合花生壳内网穿透工具实现任意浏览器公网远程访问Jupyter登录界面。 安装完成后在宝塔面板中图例 Jupyter Notebook是一个交互式笔记本,支持运行40多种编程语言。…

D - Grid and Magnet

思路&#xff1a;标记一下磁铁周围的空地即可&#xff0c;每个连通块一定可以互相到达&#xff0c;我们dfs算出联通块的大小再加上该连通块周围的可达磁场区域即可。 代码&#xff1a; #include <bits/stdc.h> using namespace std; using ll long long; using ld lon…

【Godot4.2】自定义Todo清单类 - myTodoList

概述 在写myList类的时候&#xff0c;就想到可以写一个类似的Todo清单类。 基础思路 本质还是在内部维护一个数组&#xff0c;在其基础上进行增删改查操作的封装为了方便存储数据&#xff0c;编写一个自定义内置类TodoItem&#xff0c;内部数组就变成了Array[TodoItem]类型的…

66、二分-搜索旋转排序数组

思路&#xff1a; 不断二分&#xff0c;首先判断左侧有序还是右侧有序&#xff0c;如果左侧有序那么就在左侧寻找&#xff0c;如果右侧有序那就在右侧寻找。假设左侧有序&#xff0c;那就判断目标值在不在左侧&#xff0c;如果在左侧继续左侧二分。如果不在左侧&#xff0c;那么…

Redis可视化工具RedisInsight

下载地址&#xff1a;RedisInsight - The Best Redis GUIRedisInsight provides an intuitive and efficient graphical interface for Redis, allowing you to interact with your databases and manage your data.https://redis.com/redis-enterprise/redis-insight/#insight…

STM32通过ESP8266连接阿里云 详细步骤

一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是&#xff1a;AT固件。连接阿里云需要&#xff1a;MQTT固件。 因此&#xff0c;我们需要给8266重新烧录 MQTT固件。 针对“魔女开发板&#xff0c;ESP8266模块烧录MQTT固件&#xff0c;图解教程如下&#xff1a; ESP8266 烧录 …

Spring Task学习记录

介绍 cron表达式 cron表达式在线生成器 链接: link 入门案例 Component Slf4j public class MyTask {/*** 定时任务 每隔5秒触发1次*/Scheduled(cron "0/5 * * * * ?")public void executeTask(){log.info("定时任务开始执行&#xff1a;{}", new Date…

什么是外汇爆仓?怎样避免?

外汇爆仓是指当交易者的保证金低于特定比例时&#xff0c;经纪商会自动平仓一个或所有的开仓头寸。避免外汇爆仓的关键在于合理配置资金、设置止损、适度交易、顺势而为以及调整心态。 外汇爆仓是外汇交易中的一种风险控制机制。当交易者的账户净值低于已用保证金的特定比例时&…