Zookeeper 安装配置
以下是 Apache ZooKeeper 的 完整安装与配置教程(中文),支持 单机模式 和 生产级集群模式(3/5 节点),基于最新稳定版 ZooKeeper 3.8.4(截至 2025 年 10 月)。
一、环境准备
| 项目 | 要求 |
|---|---|
| 系统 | Linux(CentOS 7+/Ubuntu 18.04+) |
| Java | JDK 8 或 JDK 11(推荐 OpenJDK) |
| 内存 | 单机 ≥ 1GB,集群每节点 ≥ 2GB |
| 磁盘 | 数据目录建议独立磁盘或 SSD |
# 检查 Java
java -version
# 应输出类似:openjdk version "11.0.21" ...
二、单机模式安装配置
1. 下载 ZooKeeper
cd /opt
wget https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
# 或使用镜像(更快)
# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
2. 解压并创建目录
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz
mv apache-zookeeper-3.8.4-bin zookeeper
cd zookeeper
# 创建数据和日志目录(生产建议挂载独立磁盘)
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
3. 配置 zoo.cfg
cp conf/zoo_sample.cfg conf/zoo.cfg
vim conf/zoo.cfg
修改内容:
# 心跳间隔(毫秒)
tickTime=2000
# 数据目录
dataDir=/data/zookeeper/data
# 日志目录(可选,推荐分离)
dataLogDir=/data/zookeeper/logs
# 客户端连接端口
clientPort=2181
# 最大客户端连接数(可选)
maxClientCnxns=60
4. 启动 ZooKeeper
# 前台启动(测试用)
bin/zkServer.sh start-foreground
# 后台启动
bin/zkServer.sh start
5. 检查状态
bin/zkServer.sh status
输出:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/conf/zoo.cfg
Mode: standalone
6. 连接测试(客户端)
bin/zkCli.sh -server 127.0.0.1:2181
进入后输入:
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test "hello"
Created /test
[zk: 127.0.0.1:2181(CONNECTED) 2] get /test
hello
三、生产集群模式(3 节点)
推荐奇数节点(3、5、7),支持少数派容错。
1. 主机规划
| 主机 | IP | 角色 |
|---|---|---|
| zk1 | 192.168.1.101 | Leader/Follower |
| zk2 | 192.168.1.102 | Leader/Follower |
| zk3 | 192.168.1.103 | Leader/Follower |
2. 每台节点操作(重复 3 次)
# 1. 解压(同单机)
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /opt/
ln -s /opt/apache-zookeeper-3.8.4-bin /opt/zookeeper
# 2. 创建目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
3. 配置 zoo.cfg(每台都一样)
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
端口说明:
2888:Follower 连接 Leader3888:选举端口
4. 创建 myid 文件(每台不同!)
# zk1
echo "1" > /data/zookeeper/data/myid
# zk2
echo "2" > /data/zookeeper/data/myid
# zk3
echo "3" > /data/zookeeper/data/myid
5. 防火墙放行(每台)
# CentOS
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent
firewall-cmd --reload
# Ubuntu
ufw allow 2181
ufw allow 2888
ufw allow 3888
6. 启动集群(每台执行)
/opt/zookeeper/bin/zkServer.sh start
7. 检查状态
/opt/zookeeper/bin/zkServer.sh status
预期输出:
- 一台显示
Mode: leader - 两台显示
Mode: follower
示例:
# zk1
Mode: leader
# zk2
Mode: follower
8. 客户端连接(任意一台)
bin/zkCli.sh -server 192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
四、系统服务配置(开机自启)
1. 创建 systemd 服务文件
vim /etc/systemd/system/zookeeper.service
[Unit]
Description=Apache ZooKeeper Server
Requires=network.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
ExecReload=/opt/zookeeper/bin/zkServer.sh restart
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
2. 启用服务
systemctl daemon-reload
systemctl enable zookeeper
systemctl start zookeeper
systemctl status zookeeper
五、Docker 快速部署(开发测试)
docker-compose.yml
version: '3.8'
services:
zk1:
image: zookeeper:3.8.4
hostname: zk1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
volumes:
- ./data/zk1:/data
- ./datal og/zk1:/datalog
zk2:
image: zookeeper:3.8.4
hostname: zk2
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
zk3:
image: zookeeper:3.8.4
hostname: zk3
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
启动:
docker-compose up -d
六、验证集群高可用
- 停止 Leader 节点:
systemctl stop zookeeper # 或 zkServer.sh stop
- 观察其他节点会自动选举新 Leader
- 重启后自动加入集群
七、监控与运维命令
| 命令 | 用途 |
|---|---|
zkServer.sh status | 查看角色 |
echo mntr | nc localhost 2181 | 监控指标 |
echo ruok | nc localhost 2181 | 存活检查(返回 imok) |
echo stat | nc localhost 2181 | 详细状态 |
echo conf | nc localhost 2181 | 查看配置 |
八、常见问题
| 问题 | 解决方案 |
|---|---|
myid 不一致 | 检查 /data/zookeeper/data/myid |
| 端口被占用 | netstat -tlnp | grep 2181 |
| 集群无法启动 | 检查主机名解析、zoo.cfg 一致性 |
| 连接超时 | 防火墙、客户端连接串写错 |
九、下载总结
| 模式 | 命令 |
|---|---|
| 单机 | zkServer.sh start |
| 集群 | 每台配置 myid + zoo.cfg + 启动 |
| systemd | systemctl start zookeeper |
| Docker | docker-compose up -d |
下一步建议:
- 部署 3 节点集群
- 用
zkCli.sh创建节点测试 - 接入 Java 客户端或 Curator
需要我提供:
- 完整安装脚本(Shell)
- Ansible 自动化部署
- Prometheus + Grafana 监控面板
- 备份恢复方案
请告诉我!