1. 依赖
该教程依赖已经准备好的 linux 环境,请先查看:
2. 下载和解压
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /opt/module
cd /opt/module
mv apache-zookeeper-3.8.4-bin zookeeper
3. 配置
3.1. 创建集群唯一标识
准备一个数据文件夹,并创建节点唯一标识 myid
cd /opt/module/zookeeper
mkdir data
cd data
vim myid
# 写入一个节点的唯一标识,如数字:2
# 注意每台服务器都需要设置成不同的数字
3.2. JAVA 进程配置文件
这个配置可以不配,但是由于我们学习阶段,资源有限,这里则特意将进程的内存调小,防止资源不够
cd /opt/module/zookeeper/conf
vim java.env
# 文件中可以写一点 JAVA 程序参数配置,如堆内存
export JVMFLAGS="-Xms64m -Xmx64m $JVMFLAGS"
3.3. zookeeper 程序配置文件
官方存在一个配置文件的样板,我们可以通过复制样板修改自己的配置文件
cd /opt/module/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
配置文件内容大致如下
# 服务端与客户端的心跳时间
tickTime=2000
# 主节点和从节点初始化连接的心跳次数上限
initLimit=10
# 主节点和从节点同步通讯的心跳次数上限
syncLimit=5
# 数据储存路径,默认 tmp 为临时目录
dataDir=/opt/module/zookeeper/data
# 数据目录下数据快照的数量
autopurge.snapRetainCount=1
# 清理快照的时间间隔,单位小时,0 为不清理
autopurge.purgeInterval=0
# 客户端连接端口
clientPort=2181
# 最大的客户端连接数量
maxClientCnxns=60
# 集群节点配置,配置格式如下,[] 表示变量
# server.[myid]=[host | ip]:[主从通信端口]:[重选主机的端口]
server.1=mitchell-101:2888:3888
server.2=mitchell-102:2888:3888
server.3=mitchell-103:2888:3888
4. 分发
将 zookeeper 和 修改的配置文件一起分发给其它机器
xsync /opt/module/zookeeper
ps:注意,分发完成后需要修改其它机器上的 3.1 步骤创建的 myid 文件的数字,保证其唯一
5. 帮助脚本
集群环境下,不管是启动还是关闭都是一件比较麻烦的事情,这里准备一个脚本,从而实现一次性的启动和关闭,方便操作
vim /opt/module/bin/mzookeeper.sh
chmod +x mzookeeper.sh
脚本内容参考
#!/bin/bash
if [ $# -lt 1 ]
then
echo "请输入参数 start、stop 或 status"
exit;
fi
case $1 in
"start")
echo "=============================== 启动 zookeeper 集群 ==============================="
for i in mitchell-101 mitchell-102 mitchell-103
do
echo "------------------------------- 启动 $i -------------------------------"
ssh $i "/opt/module/zookeeper/bin/zkServer.sh start"
done
;;
"stop")
echo "=============================== 停止 zookeeper 集群 ==============================="
for i in mitchell-101 mitchell-102 mitchell-103
do
echo "------------------------------- 停止 $i -------------------------------"
ssh $i "/opt/module/zookeeper/bin/zkServer.sh stop"
done
;;
"status")
echo "=============================== 查看 zookeeper 集群 ==============================="
for i in mitchell-101 mitchell-102 mitchell-103
do
echo "------------------------------- 查看 $i -------------------------------"
ssh $i "/opt/module/zookeeper/bin/zkServer.sh status"
done
;;
*)
echo "请输入参数 start、stop 或 status"
;;
esac