第四章 ZooKeeper 集群部署
ZooKeeper 是 Apache 基金会维护的分布式协调服务,常用于配置管理、命名服务、分布式锁和 Leader 选举。在 Hadoop 生态中,它是很多组件实现协调与一致性的重要基础设施。
一、ZooKeeper 简介
ZooKeeper 通过一套轻量但可靠的协调机制,帮助分布式系统解决以下问题:
- 节点状态感知
- 配置集中管理
- 分布式锁
- 服务注册与发现
- Leader 选举
ZooKeeper 内部维护了一棵类似文件系统的树形结构,每个节点称为 ZNode。它支持持久节点、临时节点和顺序节点,并通过 Watch 机制实现事件通知。
二、下载安装 ZooKeeper
可前往官方发布页选择版本。这里以 ZooKeeper 3.9.5 为例:
cd /opt/
wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.5/apache-zookeeper-3.9.5-bin.tar.gz
tar -zxf apache-zookeeper-3.9.5-bin.tar.gz -C /usr/local/
cd /usr/local/
mv apache-zookeeper-3.9.5-bin zookeeper安装完成后目录大致如下:
bin/
conf/
docs/
lib/
LICENSE.txt
NOTICE.txt
README.md
README_packaging.md三、配置 ZooKeeper
ZooKeeper 的核心配置文件为 conf/zoo.cfg。可以从示例文件复制:
cd /usr/local/zookeeper/conf/
cp zoo_sample.cfg zoo.cfg编辑后的 zoo.cfg 可参考如下内容:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper
clientPort=2181
server.1=master.local:2888:3888
server.2=node01.local:2888:3888
server.3=node02.local:2888:3888参数说明:
tickTime:基础时间单元。initLimit:Follower 与 Leader 初始连接允许的最大心跳数。syncLimit:Follower 与 Leader 请求/应答允许的最大心跳数。dataDir:ZooKeeper 数据目录。clientPort:客户端连接端口,默认2181。server.x:集群节点定义,格式为主机名:同步端口:选举端口。
四、配置节点编号 myid
每个 ZooKeeper 节点都需要在 dataDir 目录下写入一个 myid 文件,用于标识自己的服务器编号。
先创建数据目录:
mkdir -p /data/zookeeper然后分别在三台机器写入:
# master.local
echo "1" > /data/zookeeper/myid
# node01.local
echo "2" > /data/zookeeper/myid
# node02.local
echo "3" > /data/zookeeper/myid这里的数字必须与 zoo.cfg 中 server.x 的编号一一对应。
五、配置环境变量
为了方便执行命令,可以将 ZooKeeper 的 bin 目录加入环境变量。
如果使用 bash:
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin如果使用 fish:
fish_add_path /usr/local/zookeeper/bin配置完成后重新加载 shell。
六、同步到其他节点
建议先在 Master 节点完成安装和配置,再统一同步至其他节点。
例如使用 ms 脚本:
ms /usr/local/zookeeper/同步后记得分别检查:
/usr/local/zookeeper/conf/zoo.cfg是否一致。/data/zookeeper/myid是否为当前节点自己的编号。
注意:myid 文件不能直接整目录覆盖,否则三个节点可能拿到相同编号。
七、启动集群
ZooKeeper 通过 zkServer.sh 管理服务。
7.1 启动
分别在三台服务器执行:
zkServer.sh start7.2 查看状态
zkServer.sh status在三节点集群中,正常情况下会选举出:
- 1 个
leader - 2 个
follower
7.3 停止与重启
zkServer.sh stop
zkServer.sh restart八、验证集群是否正常
可以在任意节点执行:
zkServer.sh status也可以通过客户端连接:
zkCli.sh -server master.local:2181连接成功后,可简单执行:
ls /如果能正常返回根节点列表,说明 ZooKeeper 服务基本正常。
九、本章小结
完成本章后,你应当已经得到一套三节点的 ZooKeeper 集群。后续部署 Hive 等组件时,就可以把 ZooKeeper 作为重要的协调基础设施接入。
