1、ZooKeeper介绍
1.1、ZooKeeper 在 Java 版本 1.8 或更高版本中运行(JDK 8 LTS、JDK 11 LTS、JDK 12 - 不支持 Java 9 和 10),它作为 ZooKeeper 服务器的集合运行,三个 ZooKeeper 服务器是一个整体的最小推荐大小,我们还建议它们在不同的机器上运行。
1.2、ZooKeeper 集群强烈建议使用奇数台机器,例如,在四台机器上,ZooKeeper 只能处理一台机器的故障;如果两台机器发生故障,则其余两台机器不构成多数。但是,如果有五台机器,ZooKeeper 可以处理两台机器的故障。容错集群设置至少需要三台服务器。
1.3、通常三台服务器对于生产安装来说绰绰有余,但为了在维护期间获得最大的可靠性,您可能希望安装五台服务器。
1.4、官方网站:
https://zookeeper.apache.org/
1.5、下载地址:
目前最新版本
https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.4/apache-zookeeper-3.9.4-bin.tar.gz
1.6、说明文档:
https://zookeeper.apache.org/doc/current/zookeeperAdmin.html
2、部署zookeeper集群,这里使用三台服务器组成集群模式。
操作系统:AnolisOS
ip地址:192.168.21.201,192.168.21.202,192.168.21.203
zookeeper默认使用2181端口,集群模式还会用到2888、3888端口,建议zookeeper部署在内网环境中,服务器上关闭防火墙、关闭SELINUX。
分别在三台服务器上操作。
2.1、安装Java
ZooKeeper依赖Java才能运行,首先安装Java环境,我们使用Java 25版本
Linux系统下安装Java JDK:https://www.osyunwei.com/archives/16760.html
2.2、安装ZooKeeper
mkdir -p /data/server/zookeeper #创建安装目录
mkdir -p /data/server/zookeeper/data #创建数据目录
mkdir -p /data/server/zookeeper/logs #创建日志目录
下载目录:/usr/local/src/apache-zookeeper-3.9.4-bin.tar.gz
cd /usr/local/src/
tar zxvf apache-zookeeper-3.9.4-bin.tar.gz -C /data/server/zookeeper --strip-components 1
#拷贝配置文件
cp /data/server/zookeeper/conf/zoo_sample.cfg /data/server/zookeeper/conf/zoo.cfg
vi /data/server/zookeeper/conf/zoo.cfg #修改添加,注意端口等参数不要重复添加,否则启动失败
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/server/zookeeper/data #数据目录
dataLogDir=/data/server/zookeeper/logs #日志目录
clientPort=2181
admin.enableServer=false #禁用内置的 AdminServer(Web UI 管理页面)
#需要开启添加下面的参数
#admin.enableServer=true
#admin.serverPort=8080 #默认是8080端口
#禁用所有 four letter word 命令
4lw.commands.whitelist=
#或者只允许特定的命令
#4lw.commands.whitelist=stat, ruok, conf
#添加zookeeper节点
#服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
#本机的地址也可以写成server.1=0.0.0.0:2888:3888
server.1=192.168.21.201:2888:3888
server.2=192.168.21.202:2888:3888
server.3=192.168.21.203:2888:3888
#保留最近的 3 个快照和日志文件,并每隔 24 小时自动清理一次
autopurge.snapRetainCount=3
autopurge.purgeInterval=24
:wq! #保存退出
#添加myid文件,每个节点的内容不同,分别对应server.1的这个数字1,server.2的这个数字2,server.3的这个数字3
echo "1" >/data/server/zookeeper/data/myid #192.168.21.201设置为1
echo "2" >/data/server/zookeeper/data/myid #192.168.21.202设置为2
echo "3" >/data/server/zookeeper/data/myid #192.168.21.203设置为3
:wq! #保存退出
vi /etc/profile #配置环境变量
#set zookeeper environment
export ZOOKEEPER_HOME=/data/server/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
:wq! #保存退出
source /etc/profile #使配置立即生效
启动命令:/data/server/zookeeper/bin/zkServer.sh start
停止命令:/data/server/zookeeper/bin/zkServer.sh stop
重启命令:/data/server/zookeeper/bin/zkServer.sh restart
状态查看命令:/data/server/zookeeper/bin/zkServer.sh status
#创建系统服务
vi /etc/systemd/system/zookeeper.service
[Unit]
Description=Apache ZooKeeper Server
After=network.target
[Service]
Type=forking
User=root
Group=root
Environment="JAVA_HOME=/data/server/java/jdk-25+36"
WorkingDirectory=/data/server/zookeeper
ExecStart=/data/server/zookeeper/bin/zkServer.sh start
ExecStop=/data/server/zookeeper/bin/zkServer.sh stop
ExecReload=/data/server/zookeeper/bin/zkServer.sh restart
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
:wq! #保存退出
#重载并启用
systemctl daemon-reload
systemctl enable --now zookeeper
systemctl restart zookeeper
#验证
systemctl status zookeeper
/data/server/zookeeper/bin/zkServer.sh status
2.3设置ZooKeeper访问权限,只允许指定ip访问ZooKeeper服务
设置ZooKeeper访问权限,只允许指定ip访问ZooKeeper服务
低版本ZooKeeper 的 ip:ACL 只能针对单个 IP 地址,比如 ip:192.168.21.100:cdrwa,不支持 ip:192.168.21.0/24这种 CIDR 网段写法!
设置白名单ip网络段(zk版本要求3.5以上,一定要将127.0.0.1添加到ip白名单过滤)
#登录ZooKeeper控制台
/data/server/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
getAcl / #查看当前权限
setAcl / ip:127.0.0.1:cdrwa #允许本机
setAcl / ip:192.168.21.201:cdrwa #允许某个内网 IP
setAcl / ip:192.168.21.202:cdrwa #允许另一个内网 IP
setAcl / ip:192.168.21.0/24:cdrwa #允许一个网段
#可以写在一起
setAcl / ip:127.0.0.1:cdrwa,ip:192.168.21.201:cdrwa,ip:192.168.21.202:cdrwa,ip:192.168.21.203:cdrwa,ip:192.168.21.0/24:cdrwa
#验证
/data/server/zookeeper/bin/zkCli.sh -server 192.168.21.201:2181
getAcl / #查看当前权限
注意:
1、设置 IP 白名单时,一定要包含本机 IP 127.0.0.1,确保本机可以访问和修改
2、ZooKeeper 的 setAcl 是覆盖式的!后续添加白名单时,必须把之前所有的 IP 都重新写一遍,否则之前设置的会被覆盖掉
3、如果想恢复为“所有 IP 都可以访问”,可以执行以下命令setAcl / world:anyone:cdrwa
4、ZooKeeper 中通过 setAcl设置的 ACL(访问控制列表)规则是 持久化存储在 ZooKeeper 内部数据中的
5、重启 ZooKeeper 服务后,你之前通过 setAcl设置的 ACL 规则(比如 IP 白名单)仍然会保留,不需要重新添加。
至此,Linux系统下安装部署最新版3节点ZooKeeper集群环境完成。



