当前位置: 代码网 > it编程>数据库>Mysql > ZooKeeper 搭建详细步骤之二(伪集群模式)

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

2024年07月31日 Mysql 我要评论
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
# 编辑内容如下

在这里插入图片描述

继续编辑

# 继续编辑修改另两个配置文件
[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 窗口

[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] 

集群中角色
# 启动三个节点
[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 及相关概念简介

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com