作为在大数据圈摸爬滚打十年的老鸟,我可以负责任地说:Zookeeper 是分布式系统的「瑞士军刀」——Hadoop HA、Kafka 分区管理、HBase 元数据协调都离不开它。但新手常被集群安装绕晕,今天就把生产级安装流程拆解成「5 步傻瓜式操作」,附自动化脚本和避坑指南,让你 20 分钟搭完集群!
一、安装前的「致命三问」(必看!)
-
防火墙关了吗?
- Zookeeper 依赖端口通信(2181、2888、3888),必须关闭防火墙:
systemctl stop firewalld && systemctl disable firewalld # 永久关闭
- 老鸟提醒:云服务器需额外检查安全组,开放这三个端口!
- Zookeeper 依赖端口通信(2181、2888、3888),必须关闭防火墙:
-
JDK 装对了吗?
- 必须先装 JDK 且配置
JAVA_HOME
,Zookeeper 依赖 Java 环境运行。
- 必须先装 JDK 且配置
-
节点间 SSH 互通了吗?
- 后续脚本需要远程操作节点,提前配置免密登录(
ssh-keygen -t rsa
)
- 后续脚本需要远程操作节点,提前配置免密登录(
二、5 步搞定集群安装(以 3 节点为例)
节点规划表
节点名称 | IP 地址 | 角色 | myid | 数据目录 |
---|---|---|---|---|
bigdata01 | 192.168.100.128 | Leader/Follower | 1 | /opt/installs/zookeeper/zkData |
bigdata02 | 192.168.100.129 | Follower | 2 | 同上 |
bigdata03 | 192.168.100.130 | Follower | 3 | 同上 |
步骤 1:上传安装包并解压
# 1. 进入软件目录(提前创建/software)
cd /software
# 2. 上传Zookeeper安装包(官网下载3.6.3版本)
rz apache-zookeeper-3.6.3-bin.tar.gz
# 3. 解压到/opt/installs目录
tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /opt/installs/
# 4. 重命名为简洁目录名
mv /opt/installs/apache-zookeeper-3.6.3-bin /opt/installs/zookeeper
步骤 2:修改核心配置文件 zoo.cfg
cd /opt/installs/zookeeper/conf
mv zoo_sample.cfg zoo.cfg # 重命名配置文件
vi zoo.cfg # 关键配置如下:
📝 zoo.cfg 核心配置(逐行解析)
tickTime=2000 # Zookeeper心跳间隔(毫秒),默认2000ms
initLimit=10 # Follower初始连接Leader的超时时间(单位:tickTime)
syncLimit=5 # Follower与Leader数据同步的超时时间(单位:tickTime)
dataDir=/opt/installs/zookeeper/zkData # 数据存储目录(需手动创建)
clientPort=2181 # 客户端连接端口(必填)
# 集群节点配置(3节点版)
server.1=bigdata01:2888:3888
server.2=bigdata02:2888:3888
server.3=bigdata03:2888:3888
- 2888 端口:Follower 与 Leader 的数据同步端口
- 3888 端口:Leader 选举端口
步骤 3:创建数据目录并配置 myid
# 在每台节点执行(以bigdata01为例)
cd /opt/installs/zookeeper
mkdir zkData # 创建数据目录
cd zkData
echo "1" > myid # myid需与server.x中的x一致(bigdata02写2,bigdata03写3)
cat myid # 验证是否写入成功(应输出1)
步骤 4:配置环境变量(全局生效)
vi /etc/profile # 添加以下内容
export ZOOKEEPER_HOME=/opt/installs/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile # 刷新环境变量
步骤 5:分发配置到从节点(老鸟省时技巧)
# 在bigdata01执行,同步整个Zookeeper目录到bigdata02/03
scp -r /opt/installs/zookeeper bigdata02:/opt/installs/
scp -r /opt/installs/zookeeper bigdata03:/opt/installs/
# 分别在bigdata02/03修改myid为2和3
ssh bigdata02 "echo '2' > /opt/installs/zookeeper/zkData/myid"
ssh bigdata03 "echo '3' > /opt/installs/zookeeper/zkData/myid"
三、集群启停自动化:一键脚本 zk.sh
痛点:手动逐台启动 Zookeeper 太麻烦?老鸟写了个脚本,一行命令启停集群!
📄 zk.sh 脚本代码(放在 /usr/local/bin 目录)
#!/bin/bash
# 功能:一键管理Zookeeper集群(启动/停止/状态查看)
case $1 in
"start"){
for i in 1 2 3; do
echo "========= 启动 bigdata0$i ========="
ssh bigdata0$i "zkServer.sh start"
done
};;
"stop"){
for i in 1 2 3; do
echo "========= 停止 bigdata0$i ========="
ssh bigdata0$i "zkServer.sh stop"
done
};;
"status"){
for i in 1 2 3; do
echo "========= bigdata0$i 状态 ========="
ssh bigdata0$i "zkServer.sh status"
done
};;
*)
echo "Usage: zk.sh [start|stop|status]"
;;
esac
🚀 使用示例
zk.sh start # 启动所有节点
zk.sh status # 查看集群状态(其中一台会显示Leader,其他显示Follower)
zk.sh stop # 停止所有节点
四、避坑指南:新手必知的 3 个「死亡陷阱」
-
myid 与 server.x 不匹配
- 后果:节点无法加入集群,启动后状态一直是
LOOKING
- 解决:确保
zkData/myid
文件内容与配置中的server.x
完全一致
- 后果:节点无法加入集群,启动后状态一直是
-
端口被占用
- 报错:
Cannot bind to port: 2181
- 解决:
lsof -i:2181
查看进程,杀死后重启服务
- 报错:
-
数据目录权限错误
- 后果:写入快照失败,日志报
Permission denied
- 解决:设置目录权限为 755:
chmod -R 755 /opt/installs/zookeeper/zkData
- 后果:写入快照失败,日志报
五、老鸟经验:如何验证集群是否正常?
-
状态检查
zk.sh status # 输出中应有1个Leader和2个Follower
-
客户端连接测试
zkCli.sh -server bigdata01:2181 # 连接任意节点 ls / # 应显示根节点下的默认目录(如zookeeper)
-
集群容错测试
- 停掉 Leader 节点,观察是否自动选举新 Leader(
zk.sh status
查看)
- 停掉 Leader 节点,观察是否自动选举新 Leader(
六、总结
Zookeeper 安装的核心是配置一致性和端口规划,而脚本自动化是提升效率的关键。掌握这套流程后,无论是 3 节点还是 100 节点集群,都能轻松部署。
需要完整脚本和配置文件的同学,关注博主并留言「ZK 脚本」即可获取!你在安装中遇到过最奇葩的问题是什么?评论区聊聊,老鸟帮你排雷~