ZooKeeper 分布式集群部署指南
环境与前置条件
- 虚拟化平台:VMware Workstation Pro 17(兼容其他版本)
- 操作系统:CentOS 7
- 远程连接工具:FinalShell
- 基础集群:已配置完成的 Hadoop 完全分布式集群(节点为 node1、node2、node3)
部署流程
1. 集群角色规划
在三台服务器 node1、node2 和 node3 上部署 ZooKeeper 实例,构建高可用集群。2. 软件安装与分发
从官方源获取 Apache ZooKeeper 发行包并解压至指定目录:[hduser@node1 software]$ tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /opt/module/
进入目标路径,重命名解压后的文件夹以简化管理:
[hduser@node1 module]$ mv apache-zookeeper-3.8.4-bin zookeeper-3.8.4
使用自定义同步脚本 xsync 将整个目录复制到其余两个节点:
[hduser@node1 module]$ xsync zookeeper-3.8.4/
3. 设置节点唯一标识
在每台机器的 ZooKeeper 安装路径下创建数据存储目录:[hduser@node1 zookeeper-3.8.4]$ mkdir -p zkData
在该目录中创建名为 myid 的文本文件,用于标识当前服务器编号:
[hduser@node1 zkData]$ echo "1" > myid
分别在 node2 和 node3 上执行相同操作,并将内容设为 "2" 和 "3"。也可先编辑再同步后手动修改。
通过以下命令同步文件:
[hduser@node1 zkData]$ xsync myid
随后登录各节点调整 myid 内容。
4. 配置核心参数文件
进入配置目录,将模板配置重命名为运行时使用的名称:[hduser@node1 conf]$ cd /opt/module/zookeeper-3.8.4/conf
[hduser@node1 conf]$ mv zoo_sample.cfg zoo.cfg
使用编辑器打开配置文件进行修改:
[hduser@node1 conf]$ vim zoo.cfg
更新数据目录指向之前创建的路径:
dataDir=/opt/module/zookeeper-3.8.4/zkData
添加集群成员声明:
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
上述格式说明如下:
- server.X:X 表示服务器逻辑编号,需与
myid文件内容一致。 - nodeX:对应主机的 hostname 或 IP 地址。
- 2888:Follower 与 Leader 间通信端口。
- 3888:选举过程中节点间通信端口。
[hduser@node1 conf]$ xsync zoo.cfg
5. 配置系统环境变量
创建全局环境变量脚本以便命令直接调用:[hduser@node1 conf]$ sudo vim /etc/profile.d/zk_env.sh
写入以下内容:
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.8.4
export PATH=$PATH:$ZOOKEEPER_HOME/bin
分发该脚本并加载生效:
[hduser@node1 conf]$ xsync /etc/profile.d/zk_env.sh
[hduser@node1 conf]$ source /etc/profile.d/zk_env.sh
在每个节点上也需执行 source 命令刷新环境。
6. 启动与状态检查
逐个启动各节点上的 ZooKeeper 服务:[hduser@node1 zookeeper-3.8.4]$ bin/zkServer.sh start
[hduser@node2 zookeeper-3.8.4]$ bin/zkServer.sh start
[hduser@node3 zookeeper-3.8.4]$ bin/zkServer.sh start
查看任一节点状态确认角色(Leader/ Follower):
[hduser@node1 zookeeper-3.8.4]$ bin/zkServer.sh status
7. 批量控制脚本(可选)
为便于统一管理,可编写一键启停脚本zk-cluster.sh:
#!/bin/bash
case $1 in
"start")
for node in node1 node2 node3
do
echo "=== 启动 $node 上的 ZooKeeper ==="
ssh $node "source /etc/profile; zkServer.sh start"
done
;;
"stop")
for node in node1 node2 node3
do
echo "=== 停止 $node 上的 ZooKeeper ==="
ssh $node "source /etc/profile; zkServer.sh stop"
done
;;
"status")
for node in node1 node2 node3
do
echo "=== 查询 $node 状态 ==="
ssh $node "source /etc/profile; zkServer.sh status"
done
;;
*)
echo "用法: $0 {start|stop|status}"
exit 1
;;
esac
赋予执行权限并放置于常用路径即可使用:
chmod +x zk-cluster.sh