Zookeeper集群部署协调服务
为什么要用 Zookeeper 集群部署协调服务?
在分布式系统里,多个服务之间需要协调行为,比如配置文件同步、服务发现、选主等。Zookeeper 就是专门干这个事的协调服务,而集群模式能保证单点故障下依然稳定运行。
下面我会带着你从零开始在 3 台 Linux 服务器上部署一个可用的 Zookeeper 集群。
搭建前的环境和配置清单
- 三台服务器(虚拟机或云主机均可),IP 假设为:
192.168.1.10、192.168.1.11、192.168.1.12。 - Java 8 或 11:Zookeeper 依赖 JVM,检查方式
java -version。 - 放行端口:Zookeeper 默认使用
2181(客户端连接),2888(集群内部通讯),3888(选举通讯)。请在防火墙或安全组中打开这三个端口。
三步完成 Zookeeper 集群部署
1. 下载并解压
在三台服务器都执行以下命令(以 /opt 目录为例):
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
mv apache-zookeeper-3.8.4-bin zookeeper
2. 修改配置文件
每台机器上都要编辑 conf/zoo.cfg(先复制模板):
cp /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
用 vim 打开 conf/zoo.cfg,修改或添加以下内容(重点关注最后的 server 配置):
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/data
clientPort=2181
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.12:2888:3888
注意:dataDir目录需要自己创建:mkdir -p /opt/zookeeper/data。
3. 创建 myid 文件
在每台服务器的 dataDir 目录下创建 myid 文件,里面只写一个数字(对应上面 server 后面的序号):
- 在
192.168.1.10上执行:
echo "1" > /opt/zookeeper/data/myid
- 在
192.168.1.11上执行:
echo "2" > /opt/zookeeper/data/myid
- 在
192.168.1.12上执行:
echo "3" > /opt/zookeeper/data/myid
4. 启动集群
按顺序启动:先在三台机器上分别启动 Zookeeper:
/opt/zookeeper/bin/zkServer.sh start
启动后查看状态:
/opt/zookeeper/bin/zkServer.sh status
正常会看到其中一台是 Mode: leader,另外两台是 Mode: follower。
避坑指南:最容易翻车的几个点
- 端口没放行:如果无法选举或节点之间连不上,先检查
2181、2888、3888是否在防火墙开放。临时关闭防火墙测试:systemctl stop firewalld(仅测试)。 - myid 数字冲突:每个节点的 myid 必须不同,且对应 zoo.cfg 里的 server.X。
- JAVA_HOME 未设置:执行
zkServer.sh报错时,运行export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk或写入/etc/profile。 - dataDir 权限:保证
dataDir目录可写,否则启动报错。
如何验证 Zookeeper 集群协调服务已正常运行
- 客户端连接测试:任意一台机器上执行
zkCli.sh -server 192.168.1.10:2181,进入交互界面后输入ls /看到[zookeeper]说明连接成功。 - 选举稳定性:手动停掉 leader 节点(执行
zkServer.sh stop),剩下两台会重新选举,此时观察status应能快速选出新 leader。 - 写入与同步:在客户端创建一个临时节点,比如
create /testnode test,然后换一台客户端连接另一个 follower ,执行get /testnode应该能读到相同数据。
如果你正在处理 Zookeeper集群部署协调服务,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分。
部署完成后,你就能得到一个高可用的分布式协调基础单元,后续可以配合 Kafka、Dubbo 等中间件一起使用。