三节点部署zookeeper集群
三节点部署 ZooKeeper 集群
适用版本:JDK 1.8 + Apache ZooKeeper 3.8.4,三个节点分别命名为 node01、node02、node03。以下命令默认在三台节点上均执行(特别注明的除外),安装目录统一为
/opt。
1. 安装 Java
# 解压 JDK 安装包
tar zxf jdk-8u361-linux-x64.tar.gz -C /opt/
# 配置环境变量
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/opt/jdk1.8.0_361
export PATH=$JAVA_HOME/bin:$PATH
EOF
# 使配置生效并验证
source /etc/profile
java -version
2. 解压 ZooKeeper 安装包
# 解压安装包
tar zxf apache-zookeeper-3.8.4-bin.tar.gz -C /opt/
# 创建软连接
cd /opt
ln -s apache-zookeeper-3.8.4-bin /opt/zookeeper
3. 配置 zoo.cfg
cd /opt/zookeeper/conf && cp zoo_sample.cfg zoo.cfg && vim zoo.cfg
修改/添加如下配置:
clientPort=2181 # 暴露端口号
autopurge.snapRetainCount=3 # 保留最新的快照和事务日志数量
autopurge.purgeInterval=24 # 清理频率,单位小时
tickTime=2000 # 定义最小时间单元长度,单位毫秒
initLimit=10 # 初始化时间,包含启动和数据同步,其值是tickTime的倍数
syncLimit=5 # 正常工作时的心跳监测间隔,其值是tickTime的倍数
dataDir=/data/zookeeper/data # 数据快照存储路径
dataLogDir=/data/zookeeper/logs # 事务日志存放目录,对性能影响较大,建议和数据快照分开存储
# 提供Prometheus监控指标
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true
# 增加如下集群配置
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
4. 修改日志文件路径【可选】
vim /opt/zookeeper/conf/logback.xml
修改日志输出目录(默认是 zookeeper 安装目录下的 logs):
<property name="zookeeper.log.dir" value="/data/zookeeper/logs" />
5. 创建数据与日志目录
mkdir -p /data/zookeeper/data
mkdir -p /data/zookeeper/logs
6. 配置节点 myid
每个节点分别设置对应的编号(myid 必须与 zoo.cfg 中 server.N 的编号一致):
# node01 主机执行
echo 1 > /data/zookeeper/data/myid
# node02 主机执行
echo 2 > /data/zookeeper/data/myid
# node03 主机执行
echo 3 > /data/zookeeper/data/myid
7. 配置主机名解析(如未配置需补充)
集群配置中使用了 node01/node02/node03 主机名,需保证三台节点均可相互解析,可配置 /etc/hosts(三台节点均添加):
192.168.1.11 node01
192.168.1.12 node02
192.168.1.13 node03
8. 配置环境变量
cat >> /etc/profile << 'EOF'
export ZOOKEEPER_HOME=/opt/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$PATH
EOF
source /etc/profile
9. 开放端口(如开启防火墙需执行)
三台节点均需放行 ZooKeeper 相关端口:
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2888/tcp --permanent
firewall-cmd --add-port=3888/tcp --permanent
firewall-cmd --reload
10. 逐个启动并查看状态
zkServer.sh start
zkServer.sh status
三台节点全部启动后,zkServer.sh status 应显示一个 leader 和两个 follower。
11. 集群一键启停脚本
在任意一台节点上创建 zk-cluster.sh,通过 SSH 统一管理整个集群:
vim /opt/zookeeper/bin/zk-cluster.sh
脚本内容如下:
#!/bin/bash
ZK_HOME=/opt/zookeeper
NODES=(node01 node02 node03)
case "$1" in
start)
for node in "${NODES[@]}"; do
echo "===== Starting ZooKeeper on $node ====="
ssh $node "$ZK_HOME/bin/zkServer.sh start"
done
;;
stop)
for node in "${NODES[@]}"; do
echo "===== Stopping ZooKeeper on $node ====="
ssh $node "$ZK_HOME/bin/zkServer.sh stop"
done
;;
restart)
$0 stop
sleep 3
$0 start
;;
status)
for node in "${NODES[@]}"; do
echo "===== Status on $node ====="
ssh $node "$ZK_HOME/bin/zkServer.sh status"
done
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
赋予执行权限并加入 PATH 后使用:
chmod +x /opt/zookeeper/bin/zk-cluster.sh
ln -s /opt/zookeeper/bin/zk-cluster.sh /usr/local/bin/zk-cluster
# 使用示例
zk-cluster start # 一键启动整个集群
zk-cluster status # 查看三个节点的角色状态
zk-cluster stop # 一键停止整个集群
说明:脚本依赖节点间的 SSH 免密登录,可提前执行
ssh-copy-id node01等命令配置。
12. 验证集群
# 查看各节点角色
zkServer.sh status
# 连接集群测试
zkCli.sh -server node01:2181
# 进入客户端后可执行:ls /、create /test hello、get /test 等命令验证
三节点部署zookeeper集群
https://www.zyifei.top/archives/c990f0e5-cd05-4634-9ec7-c74945d655f8
评论