Linux环境下ZooKeeper 3.6.3集群部署与生产级运维指南
2026/7/15 1:21:23 网站建设 项目流程

1. ZooKeeper集群部署前的准备工作

在开始部署ZooKeeper 3.6.3集群之前,我们需要做好充分的准备工作。首先确保你有三台运行Linux的服务器,这三台服务器需要满足以下条件:

  • 操作系统:建议使用CentOS 7.x或Ubuntu 18.04及以上版本
  • Java环境:ZooKeeper需要Java 8或更高版本
  • 网络配置:服务器之间需要能够互相通信,建议关闭防火墙或开放相关端口
  • 时间同步:集群节点间时间必须同步,建议配置NTP服务

我建议将三台服务器的主机名分别设置为zk1、zk2和zk3,这样后续配置会更清晰。在实际生产环境中,这三台服务器最好分布在不同的物理机上,以确保高可用性。

提示:在开始安装前,建议先更新系统软件包。在CentOS上可以使用yum update -y,在Ubuntu上使用apt update && apt upgrade -y

2. 安装Java环境

ZooKeeper运行需要Java环境支持,以下是安装OpenJDK 11的步骤:

# 对于CentOS/RHEL系统 sudo yum install -y java-11-openjdk-devel # 对于Ubuntu/Debian系统 sudo apt install -y openjdk-11-jdk

安装完成后,验证Java版本:

java -version

输出应该类似于:

openjdk version "11.0.12" 2021-07-20 OpenJDK Runtime Environment (build 11.0.12+7-post-Debian-2) OpenJDK 64-Bit Server VM (build 11.0.12+7-post-Debian-2, mixed mode, sharing)

3. 下载并安装ZooKeeper

在三台服务器上分别执行以下步骤:

  1. 创建安装目录并下载ZooKeeper:
cd /opt sudo wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz
  1. 解压安装包:
sudo tar -xzf apache-zookeeper-3.6.3-bin.tar.gz sudo mv apache-zookeeper-3.6.3-bin zookeeper
  1. 创建数据和日志目录:
sudo mkdir -p /var/lib/zookeeper/{data,logs} sudo chown -R $(whoami):$(whoami) /var/lib/zookeeper

4. 配置ZooKeeper集群

这是部署过程中最关键的一步,我们需要正确配置ZooKeeper集群。

  1. 首先,复制示例配置文件:
cd /opt/zookeeper/conf cp zoo_sample.cfg zoo.cfg
  1. 编辑zoo.cfg文件,添加以下内容:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/lib/zookeeper/data dataLogDir=/var/lib/zookeeper/logs clientPort=2181 server.1=zk1:2888:3888 server.2=zk2:2888:3888 server.3=zk3:2888:3888

让我解释一下这些关键参数的含义:

  • tickTime:ZooKeeper使用的基本时间单位(毫秒)
  • initLimit:follower节点初始连接leader节点的超时时间(以tickTime为单位)
  • syncLimit:follower节点与leader节点之间请求应答的超时时间
  • dataDir:存储内存数据库快照的目录
  • dataLogDir:事务日志目录(如果不设置,会使用dataDir)
  • server.X:集群服务器列表,X对应每台服务器的myid文件中的数字
  1. 创建myid文件,每台服务器的myid文件内容不同:

在zk1上:

echo "1" > /var/lib/zookeeper/data/myid

在zk2上:

echo "2" > /var/lib/zookeeper/data/myid

在zk3上:

echo "3" > /var/lib/zookeeper/data/myid

5. 配置系统服务

为了便于管理,我们可以将ZooKeeper配置为系统服务。

  1. 创建systemd服务文件:
sudo vi /etc/systemd/system/zookeeper.service
  1. 添加以下内容:
[Unit] Description=Apache ZooKeeper Server Documentation=https://zookeeper.apache.org After=network.target [Service] Type=forking User=root Group=root ExecStart=/opt/zookeeper/bin/zkServer.sh start ExecStop=/opt/zookeeper/bin/zkServer.sh stop ExecReload=/opt/zookeeper/bin/zkServer.sh restart Restart=on-abnormal [Install] WantedBy=multi-user.target
  1. 重新加载systemd并设置开机自启:
sudo systemctl daemon-reload sudo systemctl enable zookeeper

6. 启动ZooKeeper集群

现在可以启动ZooKeeper服务了。注意,启动顺序应该是随机的,ZooKeeper会自动选举leader。

在三台服务器上分别执行:

sudo systemctl start zookeeper

检查服务状态:

sudo systemctl status zookeeper

查看集群状态:

/opt/zookeeper/bin/zkServer.sh status

正常情况下,输出会显示其中一台是leader,另外两台是follower:

ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: leader # 或 follower

7. 生产环境优化配置

在生产环境中,我们需要对ZooKeeper进行一些优化配置。以下是zoo.cfg中建议添加的配置项:

# 限制单个IP的最大连接数,防止某个客户端占用过多资源 maxClientCnxns=60 # 自动清理快照和日志文件 autopurge.snapRetainCount=5 autopurge.purgeInterval=24 # 启用四字命令监控 4lw.commands.whitelist=* # 调整JVM堆大小(在zookeeper-env.sh中配置) export JAVA_OPTS="-Xms4G -Xmx4G -XX:+UseG1GC"

8. 集群监控与维护

8.1 使用四字命令监控

ZooKeeper提供了一些简单的四字命令用于监控:

echo stat | nc localhost 2181 echo mntr | nc localhost 2181 echo ruok | nc localhost 2181

8.2 使用ZooInspector可视化工具

ZooInspector是ZooKeeper官方提供的GUI工具,可以直观地查看ZooKeeper中的数据。

  1. 下载ZooInspector:
wget https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip unzip ZooInspector.zip
  1. 运行:
cd ZooInspector/build java -jar zookeeper-dev-ZooInspector.jar

8.3 日志清理脚本

ZooKeeper不会自动清理旧的快照和日志文件,我们需要定期清理。创建一个清理脚本:

#!/bin/bash # 保留最近5个快照和日志 count=5 dataDir=/var/lib/zookeeper/data logDir=/var/lib/zookeeper/logs # 清理旧快照 ls -t $dataDir/snapshot.* | tail -n +$((count+1)) | xargs rm -f # 清理旧日志 ls -t $logDir/log.* | tail -n +$((count+1)) | xargs rm -f

然后添加到crontab中,每天凌晨执行:

0 2 * * * /path/to/cleanup_script.sh

9. 常见问题排查

在实际部署过程中,可能会遇到各种问题。以下是一些常见问题及解决方法:

  1. 无法选举leader

    • 检查防火墙是否开放了2888和3888端口
    • 检查myid文件是否正确
    • 检查服务器时间是否同步
  2. 客户端无法连接

    • 检查2181端口是否开放
    • 检查zoo.cfg中的clientPort配置
    • 检查ZooKeeper服务是否正常运行
  3. 性能问题

    • 检查磁盘IO性能,事务日志最好放在单独的SSD上
    • 调整JVM堆大小
    • 考虑增加观察者节点分担读压力

10. 集群扩展与升级

10.1 添加新节点

要向现有集群添加新节点,需要:

  1. 在新节点上安装ZooKeeper
  2. 在zoo.cfg中添加所有服务器列表
  3. 创建myid文件
  4. 逐步重启现有节点使配置生效

10.2 版本升级

升级ZooKeeper版本时,建议:

  1. 先升级观察者节点
  2. 然后升级follower节点
  3. 最后升级leader节点
  4. 确保所有节点使用相同的配置文件

在生产环境中,我建议先在测试环境验证升级过程,确保兼容性和稳定性。升级过程中要密切关注监控指标,准备好回滚方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询