Zookeeper linux 服务端集群搭建步骤
以下是 Linux 环境下 Apache ZooKeeper 生产级集群(3 节点)搭建完整步骤,从零开始,手动操作 + 脚本自动化双版本,适用于 CentOS 7/8、Ubuntu 20.04+。
目标:搭建一个 高可用、支持自动 Leader 选举 的 ZooKeeper 集群
版本:apache-zookeeper-3.8.4-bin(截至 2025 年 10 月最新稳定版)
一、集群规划(3 节点)
| 主机 | IP | 角色 | myid |
|---|---|---|---|
| zk1 | 192.168.1.101 | Leader/Follower | 1 |
| zk2 | 192.168.1.102 | Leader/Follower | 2 |
| zk3 | 192.168.1.103 | Leader/Follower | 3 |
推荐使用 奇数节点,保证多数派(Quorum)容错。
二、每台服务器通用准备(3 台都执行)
1. 安装 JDK(必须)
# CentOS
sudo yum install -y java-11-openjdk-devel
# Ubuntu
sudo apt update
sudo apt install -y openjdk-11-jdk
验证:
java -version
# 输出类似:openjdk version "11.0.21" ...
2. 创建 zookeeper 用户(推荐)
sudo groupadd zookeeper
sudo useradd -g zookeeper -m -s /bin/bash zookeeper
3. 创建目录(建议挂载独立磁盘)
sudo mkdir -p /data/zookeeper/data
sudo mkdir -p /data/zookeeper/logs
sudo chown -R zookeeper:zookeeper /data/zookeeper
三、下载 & 解压 ZooKeeper(每台执行)
cd /opt
# 下载(推荐使用官方镜像)
sudo wget https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
# 解压
sudo tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
sudo mv apache-zookeeper-3.8.4-bin zookeeper
sudo chown -R zookeeper:zookeeper zookeeper
四、配置 zoo.cfg(每台都一样)
sudo -u zookeeper vim /opt/zookeeper/conf/zoo.cfg
# 基本参数
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
# 集群配置(关键!)
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888
# 优化参数(生产推荐)
maxClientCnxns=200
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
五、设置 myid(每台不同!)
# zk1
echo "1" | sudo tee /data/zookeeper/data/myid
# zk2
echo "2" | sudo tee /data/zookeeper/data/myid
# zk3
echo "3" | sudo tee /data/zookeeper/data/myid
必须唯一,对应
server.x中的x
六、配置 hosts 解析(每台执行)
sudo vim /etc/hosts
添加:
192.168.1.101 zk1
192.168.1.102 zk2
192.168.1.103 zk3
验证:
ping zk1
七、防火墙放行(每台执行)
CentOS
sudo firewall-cmd --add-port=2181/tcp --permanent
sudo firewall-cmd --add-port=2888/tcp --permanent
sudo firewall-cmd --add-port=3888/tcp --permanent
sudo firewall-cmd --reload
Ubuntu
sudo ufw allow 2181
sudo ufw allow 2888
sudo ufw allow 3888
八、配置 systemd 服务(开机自启)
sudo vim /etc/systemd/system/zookeeper.service
[Unit]
Description=Apache ZooKeeper Server
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/bin/zkServer.sh restart
Restart=always
TimeoutSec=30
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable zookeeper
九、启动集群(顺序启动)
# 在每台机器上执行
sudo systemctl start zookeeper
十、验证集群状态
# 查看角色
/opt/zookeeper/bin/zkServer.sh status
预期输出:
# zk1(可能为 Leader)
Mode: leader
# zk2
Mode: follower
# zk3
Mode: follower
十一、四字命令验证(任意一台)
echo mntr | nc 127.0.0.1 2181
输出示例:
zk_version 3.8.4
zk_avg_latency 0
zk_max_latency 0
zk_min_latency 0
zk_packets_received 12
zk_packets_sent 11
zk_num_alive_connections 1
zk_outstanding_requests 0
zk_server_state leader
zk_znode_count 5
zk_watch_count 0
zk_ephemerals_count 0
zk_approximate_data_size 49
zk_open_file_descriptor_count 38
zk_max_file_descriptor_count 1048576
zk_followers 2
zk_synced_followers 2
zk_pending_syncs 0
十二、客户端连接测试
/opt/zookeeper/bin/zkCli.sh -server zk1:2181,zk2:2181,zk3:2181
[zk: zk1:2181,zk2:2181,zk3:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: …] create /cluster_test “hello cluster” Created /cluster_test [zk: …] get /cluster_test hello cluster
高可用测试(模拟故障)
# 停止 Leader 节点(假设 zk1 是 Leader)
sudo systemctl stop zookeeper # 在 zk1 上执行
# 查看 zk2/zk3 状态
/opt/zookeeper/bin/zkServer.sh status
# 其中一台会变成 leader
集群仍可正常提供服务,zk1 重启后自动加入。
自动化脚本(一键部署)
setup_zookeeper.sh(每台执行)
#!/bin/bash
ID=$1
IP=$2
if [ -z "$ID" ] || [ -z "$IP" ]; then
echo "用法: $0 <myid> <本机IP>"
exit 1
fi
# 1. 创建用户和目录
sudo groupadd zookeeper 2>/dev/null
sudo useradd -g zookeeper -m -s /bin/bash zookeeper 2>/dev/null
sudo mkdir -p /data/zookeeper/data /data/zookeeper/logs
sudo chown -R zookeeper:zookeeper /data/zookeeper
# 2. 下载解压
cd /opt
if [ ! -d "zookeeper" ]; then
sudo wget -q https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
sudo tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
sudo mv apache-zookeeper-3.8.4-bin zookeeper
sudo chown -R zookeeper:zookeeper zookeeper
fi
# 3. 配置 zoo.cfg
cat > /opt/zookeeper/conf/zoo.cfg <<EOF
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
maxClientCnxns=200
autopurge.snapRetainCount=10
autopurge.purgeInterval=1
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888
EOF
sudo chown zookeeper:zookeeper /opt/zookeeper/conf/zoo.cfg
# 4. 设置 myid
echo "$ID" | sudo tee /data/zookeeper/data/myid > /dev/null
# 5. systemd 服务
cat > /etc/systemd/system/zookeeper.service <<EOF
[Unit]
Description=Apache ZooKeeper Server
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable zookeeper
echo "ZooKeeper 配置完成!myid=$ID, IP=$IP"
echo "执行: sudo systemctl start zookeeper"
使用方法:
# zk1
chmod +x setup_zookeeper.sh
sudo ./setup_zookeeper.sh 1 192.168.1.101
# zk2
sudo ./setup_zookeeper.sh 2 192.168.1.102
# zk3
sudo ./setup_zookeeper.sh 3 192.168.1.103
总结:启动顺序
# 1. 每台执行脚本(或手动配置)
# 2. 启动服务
sudo systemctl start zookeeper
# 3. 检查状态
/opt/zookeeper/bin/zkServer.sh status
附:常用运维命令
| 命令 | 用途 |
|---|---|
zkServer.sh start | 启动 |
zkServer.sh stop | 停止 |
zkServer.sh status | 查看角色 |
zkServer.sh restart | 重启 |
zkCli.sh -server ... | 客户端 |
echo mntr | nc localhost 2181 | 监控 |
集群搭建完成!
需要我提供:
- Ansible 自动化部署 Playbook
- Prometheus + Grafana 监控
- 日志清理策略
- 备份恢复脚本
请继续提问!