Zookeeper 安装配置

以下是 Apache ZooKeeper完整安装与配置教程(中文),支持 单机模式生产级集群模式(3/5 节点),基于最新稳定版 ZooKeeper 3.8.4(截至 2025 年 10 月)。


一、环境准备

项目要求
系统Linux(CentOS 7+/Ubuntu 18.04+)
JavaJDK 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角色
zk1192.168.1.101Leader/Follower
zk2192.168.1.102Leader/Follower
zk3192.168.1.103Leader/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 连接 Leader
  • 3888:选举端口

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

六、验证集群高可用

  1. 停止 Leader 节点:
   systemctl stop zookeeper  # 或 zkServer.sh stop
  1. 观察其他节点会自动选举新 Leader
  2. 重启后自动加入集群

七、监控与运维命令

命令用途
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 + 启动
systemdsystemctl start zookeeper
Dockerdocker-compose up -d

下一步建议

  1. 部署 3 节点集群
  2. zkCli.sh 创建节点测试
  3. 接入 Java 客户端或 Curator

需要我提供:

  • 完整安装脚本(Shell)
  • Ansible 自动化部署
  • Prometheus + Grafana 监控面板
  • 备份恢复方案

请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注