赞
踩
ZooKeeper 搭建详细步骤之三(真集群)
ZooKeeper 搭建详细步骤之二(伪集群模式)
ZooKeeper 搭建详细步骤之一(单机模式)
ZooKeeper 及相关概念简介
ZooKeeper 伪集群是指在一个单一的物理或虚拟机环境中模拟出一个由多个 ZooKeeper 节点构成的集群。尽管这些节点实际上运行在同一台机器上,但它们通过配置不同的端口、数据目录和配置文件,以模拟在真实分布式环境下不同服务器上运行的效果。
伪集群的主要目的是便于开发、测试和学习 ZooKeeper 集群的功能和行为,而不必消耗大量的硬件资源来部署多台独立的物理服务器。
以下是搭建 ZooKeeper 伪集群的一般步骤:
环境要求:
目录结构:
为每个 ZooKeeper 节点创建独立的数据目录和日志目录,例如:
zk_node1_data
zk_node1_log
zk_node2_data
zk_node2_log
zk_node3_data
zk_node3_log
# 也可以让数据和日志存放同一个目录,这样只需要三个目录即可
zk1
zk2
zk3
创建 myid 文件
myid
的文本文件配置文件:
对于每个节点,复制 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
启动节点:
使用如下命令启动每个节点,指定各自的配置文件:
bin/zkServer.sh start conf/zooX.cfg
其中 X
应替换为实际节点编号(1、2、3)。
检查状态:
使用 zkCli.sh
工具连接任意一个节点的客户端端口,检查集群状态:
bin/zkCli.sh -server localhost:2181
在 CLI 中执行 stat
或 ls /
命令,确认是否能正常连接并查看集群信息。
模拟故障与恢复:
通过以上步骤,您可以在一台机器上搭建起一个由三个节点组成的 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 及相关概念简介
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。