Zookeeper 集群配置教程(Linux通用版)

Zookeeper 集群是由多个节点组成的分布式协调服务,采用主从架构(Leader-Follower)实现高可用。集群通过 ZAB 一致性协议保证数据强一致性,所有写操作由 Leader 节点协调并同步到 Follower 节点。其典型部署包含奇数个节点(如3/5台服务器),采用投票机制实现故障容错,当半数以上节点存活时集群即可继续提供服务。Zookeeper集群提供分布式锁、配置维护、命名服务等核心功能,广泛应用于Hadoop、Kafka等分布式系统的协调管理。

以下是 Linux 环境下 Zookeeper 集群配置教程。

一、准备操作

1. 请准备 3 台虚拟机,如需快速克隆并配置虚拟机相关设置,请点击右侧链接查看教程:点我查看

说明:这里我的 3 台主机信息如下,具体情况以你们的为准:

主机名称 IP地址 操作系统 说明
debian100 192.168.40.100 Debian 这台主机包含了parallel-execute命令,可以在三台主机同时执行一条命令
debian101 192.168.40.101 Debian
debian102 192.168.40.102 Debian

2. 请确保每一台虚拟机上已经安装了 Zookeeper,需要安装的小伙伴请点击右侧链接查看安装教程:点我查看

二、配置 Zookeeper 集群信息

说明:这部分内容无特殊说明外,都是在 debian100 主机上配置的。

1. 切换到 Zookeeper 数据存储目录下,这里我的数据存储目录是 /usr/local/zookeeper-3.8.4/data

1
cd /usr/local/zookeeper-3.8.4/data

2. 在此目录下创建一个 myid 文件,里面存储每一个存储 Zookeeper 节点的编号:

1
vim myid

说明:

  • 编号必须是整数;
  • 三台虚拟机的节点编号互不相同;
  • 文件中只能存储数字,不要存储任何无关的字符;

这里是我配置的 myid 情况:

虚拟机名称 myid
debian100 1
debian101 2
debian102 3

3. 保存完成后,编辑 Zookeeper 配置文件 zoo.cfg:

1
vim /usr/local/zookeeper-3.8.4/conf/zoo.cfg

4. 在配置文件后面新增如下内容:

1
2
3
server.1=debian100:2888:3888
server.2=debian101:2888:3888
server.3=debian102:2888:3888

关于 server.A=B:C:D 的说明:

上述内容符合 server.A=B:C:D 的格式,其中:

  • A 代表每一个 Zookeeper 的 myid;
  • B 代表每一台虚拟机的 IP 地址,这里我修改了 /etc/hosts 文件,使用 hostname 代替 IP 地址
  • C 代表 Zookeeper Follower 与集群中的 Leader 服务器交换信息的端口;
  • D 代表万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

5. 将上一步修改好的配置内容粘贴到每一个 zoo.cfg 文件中,效果图如下:

6. 保存完成。将 myid 依次分发到 debian101 和 debian102 上:

1
2
scp /usr/local/zookeeper-3.8.4/data/myid root@debian101:/usr/local/zookeeper-3.8.4/data
scp /usr/local/zookeeper-3.8.4/data/myid root@debian102:/usr/local/zookeeper-3.8.4/data

注意:分发完成后,一定要到对应的主机下修改 myid 文件,确保三台主机的 myid 互不相同且为整数!

7. 将配置文件 zoo.cfg 依次分发到 debian101 和 debian102 上:

1
2
scp /usr/local/zookeeper-3.8.4/conf/zoo.cfg root@debian101:/usr/local/zookeeper-3.8.4/conf
scp /usr/local/zookeeper-3.8.4/conf/zoo.cfg root@debian102:/usr/local/zookeeper-3.8.4/conf

8. 开放 2181、2888、3888 号端口,保证集群各个节点可以相互访问:

说明:parallel-execute 命令脚本请点击右侧链接查看:点我查看

  • CentOS
1
parallel-execute "firewall-cmd --zone=public --add-port=2181/tcp --permanent && firewall-cmd --zone=public --add-port=2888/tcp --permanent && firewall-cmd --zone=public --add-port=3888/tcp --permanent &&firewall-cmd --reload"
  • Ubuntu/Debian
1
parallel-execute "ufw enable && ufw allow 2181/tcp && ufw allow 2888/tcp && ufw allow 3888/tcp"

三、Zookeeper集群启动与停止

1. 依次启动每一台 Zookeeper:

1
parallel-execute "cd /usr/local/zookeeper-3.8.4 && bin/zkServer.sh start"

2. 查看每一台 Zookeeper 启动状态,执行如下命令:

1
parallel-execute "cd /usr/local/zookeeper-3.8.4 && bin/zkServer.sh status"

这里 debian101 是 leader,其他的是 follower(具体那台机器是 leader 请以你们的为准):

debian100 debian101 debian102

至此,Zookeeper 集群启动成功!

3. 如需停止当前集群,请执行如下命令:

1
parallel-execute "cd /usr/local/zookeeper-3.8.4 && bin/zkServer.sh stop"

Zookeeper 集群配置教程(Linux通用版)
https://www.icode504.com/posts/119.html
作者
iCode504
发布于
2025年5月5日
许可协议