公司动态

Linux环境下ZooKeeper 3.6.3集群部署与生产级运维指南

📅 2026/7/15 1:21:29
Linux环境下ZooKeeper 3.6.3集群部署与生产级运维指南
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.127-post-Debian-2) OpenJDK 64-Bit Server VM (build 11.0.127-post-Debian-2, mixed mode, sharing)3. 下载并安装ZooKeeper在三台服务器上分别执行以下步骤创建安装目录并下载ZooKeepercd /opt sudo wget https://archive.apache.org/dist/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz解压安装包sudo tar -xzf apache-zookeeper-3.6.3-bin.tar.gz sudo mv apache-zookeeper-3.6.3-bin zookeeper创建数据和日志目录sudo mkdir -p /var/lib/zookeeper/{data,logs} sudo chown -R $(whoami):$(whoami) /var/lib/zookeeper4. 配置ZooKeeper集群这是部署过程中最关键的一步我们需要正确配置ZooKeeper集群。首先复制示例配置文件cd /opt/zookeeper/conf cp zoo_sample.cfg zoo.cfg编辑zoo.cfg文件添加以下内容tickTime2000 initLimit10 syncLimit5 dataDir/var/lib/zookeeper/data dataLogDir/var/lib/zookeeper/logs clientPort2181 server.1zk1:2888:3888 server.2zk2:2888:3888 server.3zk3:2888:3888让我解释一下这些关键参数的含义tickTimeZooKeeper使用的基本时间单位毫秒initLimitfollower节点初始连接leader节点的超时时间以tickTime为单位syncLimitfollower节点与leader节点之间请求应答的超时时间dataDir存储内存数据库快照的目录dataLogDir事务日志目录如果不设置会使用dataDirserver.X集群服务器列表X对应每台服务器的myid文件中的数字创建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/myid5. 配置系统服务为了便于管理我们可以将ZooKeeper配置为系统服务。创建systemd服务文件sudo vi /etc/systemd/system/zookeeper.service添加以下内容[Unit] DescriptionApache ZooKeeper Server Documentationhttps://zookeeper.apache.org Afternetwork.target [Service] Typeforking Userroot Grouproot ExecStart/opt/zookeeper/bin/zkServer.sh start ExecStop/opt/zookeeper/bin/zkServer.sh stop ExecReload/opt/zookeeper/bin/zkServer.sh restart Restarton-abnormal [Install] WantedBymulti-user.target重新加载systemd并设置开机自启sudo systemctl daemon-reload sudo systemctl enable zookeeper6. 启动ZooKeeper集群现在可以启动ZooKeeper服务了。注意启动顺序应该是随机的ZooKeeper会自动选举leader。在三台服务器上分别执行sudo systemctl start zookeeper检查服务状态sudo systemctl status zookeeper查看集群状态/opt/zookeeper/bin/zkServer.sh status正常情况下输出会显示其中一台是leader另外两台是followerZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Client SSL: false. Mode: leader # 或 follower7. 生产环境优化配置在生产环境中我们需要对ZooKeeper进行一些优化配置。以下是zoo.cfg中建议添加的配置项# 限制单个IP的最大连接数防止某个客户端占用过多资源 maxClientCnxns60 # 自动清理快照和日志文件 autopurge.snapRetainCount5 autopurge.purgeInterval24 # 启用四字命令监控 4lw.commands.whitelist* # 调整JVM堆大小在zookeeper-env.sh中配置 export JAVA_OPTS-Xms4G -Xmx4G -XX:UseG1GC8. 集群监控与维护8.1 使用四字命令监控ZooKeeper提供了一些简单的四字命令用于监控echo stat | nc localhost 2181 echo mntr | nc localhost 2181 echo ruok | nc localhost 21818.2 使用ZooInspector可视化工具ZooInspector是ZooKeeper官方提供的GUI工具可以直观地查看ZooKeeper中的数据。下载ZooInspectorwget https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip unzip ZooInspector.zip运行cd ZooInspector/build java -jar zookeeper-dev-ZooInspector.jar8.3 日志清理脚本ZooKeeper不会自动清理旧的快照和日志文件我们需要定期清理。创建一个清理脚本#!/bin/bash # 保留最近5个快照和日志 count5 dataDir/var/lib/zookeeper/data logDir/var/lib/zookeeper/logs # 清理旧快照 ls -t $dataDir/snapshot.* | tail -n $((count1)) | xargs rm -f # 清理旧日志 ls -t $logDir/log.* | tail -n $((count1)) | xargs rm -f然后添加到crontab中每天凌晨执行0 2 * * * /path/to/cleanup_script.sh9. 常见问题排查在实际部署过程中可能会遇到各种问题。以下是一些常见问题及解决方法无法选举leader检查防火墙是否开放了2888和3888端口检查myid文件是否正确检查服务器时间是否同步客户端无法连接检查2181端口是否开放检查zoo.cfg中的clientPort配置检查ZooKeeper服务是否正常运行性能问题检查磁盘IO性能事务日志最好放在单独的SSD上调整JVM堆大小考虑增加观察者节点分担读压力10. 集群扩展与升级10.1 添加新节点要向现有集群添加新节点需要在新节点上安装ZooKeeper在zoo.cfg中添加所有服务器列表创建myid文件逐步重启现有节点使配置生效10.2 版本升级升级ZooKeeper版本时建议先升级观察者节点然后升级follower节点最后升级leader节点确保所有节点使用相同的配置文件在生产环境中我建议先在测试环境验证升级过程确保兼容性和稳定性。升级过程中要密切关注监控指标准备好回滚方案。