在3.5.3版本以后,zookeeper支持动态添加节点不需要进行重启,可自动关联配置,动态重新配置功能默认情况下处于禁用状态,必须通过reconfigEnabled配置选项显式打开。这里配置2个版本,一个动态集群,一个静态集群。想要了解动态集群特性推荐查看官网文档:
https://zookeeper.apache.org/doc/r3.6.2/zookeeperReconfig.html
服务器列表
hostname | ip |
node1 | 10.134.11.101 |
node2 | 10.134.11.102 |
node3 | 10.134.11.103 |
node4 | 10.134.11.104 |
node5 | 10.134.11.105 |
下载Zookeeper并传到每个节点上
#wget下载官网的zookeeper
[root@node1 ~]# wget https://apache.claz.org/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
#传到每个节点中
[root@node1 ~]# scp -r apache-zookeeper-3.6.2-bin.tar.gz root@node2:`pwd`
[root@node1 ~]# scp -r apache-zookeeper-3.6.2-bin.tar.gz root@node3:`pwd`
[root@node1 ~]# scp -r apache-zookeeper-3.6.2-bin.tar.gz root@node4:`pwd`
[root@node1 ~]# scp -r apache-zookeeper-3.6.2-bin.tar.gz root@node5:`pwd`
解压安装Zookeeper
#创建存放目录(每个节点使用)也可以使用xshell利用撰写栏,一条命令操作全部节点。
mkdir -p /data/zookeeper
#解压文件(每个节点使用)
tar -xf apache-zookeeper-3.6.2-bin.tar.gz -C /data/zookeeper
#修改名称(每个节点使用)存放目录路径根据业务而定,我习惯将zookeeper放在data下。
cd /data/zookeeper
mv apache-zookeeper-3.6.2-bin apache-zookeeper-3.6.2
#进入到zookeeper目录中
cd apache-zookeeper-3.6.2
#创建数据存放目录
mkdir data
集群搭建(静态)
修改配置文件
#修改配置文件名称
cd conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg
#开放端口
clientPort=2181
#Jetty服务器侦听的端口3.5中新功能
admin.serverPort=8092
#数据存放路径
dataDir=/data/zookeeper/apache-zookeeper-3.6.2/data
#集群设置
server.0=node1:2182:2183
server.1=node2:2182:2183
server.2=node3:2182:2183
server.3=node4:2182:2183
server.4=node5:2182:2183
在数据存放路径中添加myid文件,要求各个ID不能重复
cd /data/zookeeper/apache-zookeeper-3.6.2/data
#node1
[root@node1 data]# vim myid
0
#node2
[root@node2 data]# vim myid
1
#node3
[root@node3 data]# vim myid
2
#node4
[root@node4 data]# vim myid
3
#node5
[root@node5 data]# vim myid
4
添加zookeeper用户和用户组
#添加组
groupadd zookeeper
#添加用户
useradd -g zookeeper zookeeper
#给zookeeper赋予权限
chown -R zookeeper.zookeeper /data/zookeeper
#从防火墙中允许服务监听端口2181,2182,2183访问
firewall-cmd --add-port=2181/tcp --permanent
firewall-cmd --add-port=2182/tcp --permanent
firewall-cmd --add-port=2183/tcp --permanent
添加开机自启动,以及将zookeeper做成服务。
创建自启动文件
vim /usr/lib/systemd/system/zookeeper.service
[Unit]
Description=Zookeeper
After=network.target
[Service]
Type=forking
#启动的用户
User=zookeeper
#启动的用户组
Group=zookeeper
Environment=JAVA_HOME=/usr/java/jdk-11.0.9
Environment=/data/zookeeper/apache-zookeeper-3.6.2
ExecStart=/data/zookeeper/apache-zookeeper-3.6.2/bin/zkServer.sh start
ExecStop=/data/zookeeper/apache-zookeeper-3.6.2/bin/zkServer.sh stop
ExecReload=/data/zookeeper/apache-zookeeper-3.6.2/bin/zkServer.sh restart
[Install]
WantedBy=multi-user.target
添加可执行权限
chmod +x /usr/lib/systemd/system/zookeeper.service
chown -R zookeeper.zookeeper /usr/lib/systemd/system/zookeeper.service
出现得问题
可能需要关闭SELinux,在进行服务得开启,否则会报一些错误。有SELinux使用基础得可以设置完以后在启动,如果没有用过推荐关闭。详情参考:
重新加载systemctl服务配置文件
systemctl daemon-reload
zookeeper启动
#启动
systemctl start zookeeper.service
#关闭
systemctl stop zookeeper.service
#重启
systemctl restart zookeeper.service
#开机自启动
systemctl enable zookeeper.service
查看是否启动
jps
QuorumPeerMain就是zookeeper得服务名称,集群已经启动完成。
查看集群状态
curl -sL node1:8092/commands/stat | grep server_state
在zookeeper 3.5.0以后,不建议使用四个字母词而是使用AdminServer的方式。
ip:prot/commands 可以查看所有信息的列表。
这里简单列几个可以测试下,详情可以参考上面官方文档信息。
/commands/stat #查看节点状态。
/commands/voting_view #可以参与投票的节点。
/commands/leader #查看leader是哪个节点。
/commands/environment #查看节点环境变量的信息。
/commands/system_properties #所有集群的属性