Zookeeper HA集群搭建和使用指南
一、Zookeeper HA集群概述
Zookeeper是一个分布式的、开放源码的分布式应用程序协调服务,它为分布式应用提供一致性服务,包括:配置维护、域名服务、分布式同步、组服务等。
HA(High Availability)高可用集群通常由2n+1个节点组成,能够容忍n个节点故障。
二、集群搭建步骤
1. 环境准备
- 至少3台服务器(推荐奇数台,如3、5、7)
- 已安装Java环境(JDK 1.8+)
- 服务器之间网络互通
- 时间同步(使用NTP服务)
2. 下载安装
bash
# 下载Zookeeper (以3.7.0版本为例)
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
# 解压
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz -C /opt/
# 创建软链接
ln -s /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper
3. 配置Zookeeper
创建数据目录和日志目录
bash
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
配置zoo.cfg
bash
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
编辑zoo.cfg文件:
properties
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
参数说明:
tickTime
: Zookeeper的基本时间单位(毫秒)initLimit
: 集群中follower服务器与leader服务器之间初始连接时能容忍的最多心跳数syncLimit
: 集群中follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数dataDir
: 数据目录dataLogDir
: 事务日志目录clientPort
: 客户端连接端口server.X
: 集群服务器列表,X为服务器ID
创建myid文件
在每个节点的dataDir目录下创建myid文件,内容为对应的服务器ID:
bash
# 在node1上
echo "1" > /data/zookeeper/data/myid
# 在node2上
echo "2" > /data/zookeeper/data/myid
# 在node3上
echo "3" > /data/zookeeper/data/myid
4. 启动集群
在每个节点上执行:
bash
/opt/zookeeper/bin/zkServer.sh start
5. 验证集群状态
查看每个节点的角色:
bash
/opt/zookeeper/bin/zkServer.sh status
正常输出类似:
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: leader # 或 follower
三、集群使用
1. 客户端连接
连接单个节点:
bash
/opt/zookeeper/bin/zkCli.sh -server node1:2181
连接整个集群(客户端会自动故障转移):
bash
/opt/zookeeper/bin/zkCli.sh -server node1:2181,node2:2181,node3:2181
2. 基本操作示例
bash
# 创建节点
create /test "test data"
# 获取节点数据
get /test
# 设置节点数据
set /test "new data"
# 列出子节点
ls /
# 删除节点
delete /test
3. 四字命令监控
bash
echo stat | nc node1 2181 # 查看服务器状态
echo ruok | nc node1 2181 # 检查服务器是否运行
echo mntr | nc node1 2181 # 监控集群健康状态
四、集群维护
1. 停止节点
bash
/opt/zookeeper/bin/zkServer.sh stop
2. 重启节点
bash
/opt/zookeeper/bin/zkServer.sh restart
3. 集群扩容
- 在新节点上安装Zookeeper
- 修改所有节点的zoo.cfg,添加新服务器
- 在新节点的dataDir下创建myid文件
- 启动新节点
4. 数据备份
bash
# 使用快照和日志备份
cp -r /data/zookeeper/data /backup/zookeeper_data_backup
cp -r /data/zookeeper/logs /backup/zookeeper_logs_backup
五、常见问题解决
-
无法选举Leader:
- 检查防火墙是否开放2888和3888端口
- 检查myid文件是否正确
- 检查服务器时间是否同步
-
客户端无法连接:
- 检查Zookeeper服务是否运行
- 检查clientPort是否被占用
- 检查网络连通性
-
磁盘空间不足:
- 定期清理快照和日志
- 配置autopurge参数自动清理
六、最佳实践
-
生产环境建议至少3个节点
-
将数据目录和日志目录放在不同的磁盘
-
配置自动清理策略:
propertiesautopurge.snapRetainCount=5 autopurge.purgeInterval=24
-
监控Zookeeper集群状态
-
定期备份数据
通过以上步骤,您可以成功搭建和管理一个高可用的Zookeeper集群。