搭建 zk 3.5.x 版本的集群环境
本次搭建使用 3.5.7 版本的zk。
3.5.x 版本进行集群环境的搭建,本质其实和 3.4.x 是没有太大区别的。
但是 3.5.x 的集群环境支持动态的扩缩容,因此 在配置文件方面,将集群节点的配置单独抽取出来了,存放到一个 zoo.cfg.dynamic 的配置文件中。
解压安装包
本次使用 192.168.1.41、192.168.1.42、192.168.1.43、192.168.1.44 四台机器进行初始搭建。其中 192.168.1.44 机器节点为 observer 节点。
所谓的 observer 就是观察者。他参与到集群环境中,但是不会参与master 的竞争。
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /usr/local/
# 192.168.1.41
drwxr-xr-x. 7 root root 146 4月 2 05:28 zookeeper3.5.7
# 192.168.1.42
drwxr-xr-x. 7 root root 146 4月 2 05:28 zookeeper3.5.7
# 192.168.1.43
drwxr-xr-x. 7 root root 146 4月 2 05:28 zookeeper3.5.7
# 192.168.1.44
drwxr-xr-x. 7 root root 146 4月 2 05:28 zookeeper3.5.7
zk 的目录结构
- bin 目录:该目录中包含启动脚本,客户端连接的脚本等等。
- conf 目录:主要是一些配置文件
drwxr-xr-x. 2 502 games 232 2月 10 2020 bin
drwxr-xr-x. 2 502 games 148 4月 2 05:29 conf
drwxr-xr-x. 5 502 games 4096 2月 10 2020 docs
drwxr-xr-x. 2 root root 4096 4月 2 05:01 lib
-rw-r--r--. 1 502 games 11358 9月 13 2018 LICENSE.txt
drwxr-xr-x. 2 root root 45 4月 2 05:28 logs
-rw-r--r--. 1 502 games 432 2月 10 2020 NOTICE.txt
-rw-r--r--. 1 502 games 1560 2月 7 2020 README.md
-rw-r--r--. 1 502 games 1347 2月 7 2020 README_packaging.txt
# bin 目录中的内容
-rwxr-xr-x. 1 502 games 232 5月 4 2018 README.txt
-rwxr-xr-x. 1 502 games 2067 2月 7 2020 zkCleanup.sh
-rwxr-xr-x. 1 502 games 1158 2月 10 2020 zkCli.cmd
-rwxr-xr-x. 1 502 games 1621 2月 7 2020 zkCli.sh
-rwxr-xr-x. 1 502 games 1766 2月 7 2020 zkEnv.cmd
-rwxr-xr-x. 1 502 games 3690 1月 31 2020 zkEnv.sh
-rwxr-xr-x. 1 502 games 1286 1月 31 2020 zkServer.cmd
-rwxr-xr-x. 1 502 games 4573 2月 7 2020 zkServer-initialize.sh
-rwxr-xr-x. 1 502 games 9386 2月 7 2020 zkServer.sh
-rwxr-xr-x. 1 502 games 996 10月 3 2019 zkTxnLogToolkit.cmd
-rwxr-xr-x. 1 502 games 1385 2月 7 2020 zkTxnLogToolkit.sh
# conf 目录中的内容
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.cfg
zk 常用命令
# zk 服务启动
./zkServer.sh start
# zk 服务重启
./zkServer.sh restart
# zk 服务停止
./zkServer.sh stop
# zk 的状态
./zkServer.sh status
进行集群环境配置
以 192.168.1.41 节点为例。其他节点的配置只需要重复上面的步骤。
基于 zoo_sample.cfg 配置文件创建 zoo.cfg 文件
zoo_sample.cfg 配置文件是zk 提供给我们的一个样例文件,我们需要根据该文件创建 一个 zoo.cfg 文件。
zoo.cfg 文件才是 zk 服务启动时所加载的真正的配置文件。
cp zoo_sample.cfg zoo.cfg
# 配置一些超时时间参数
tickTime=2000
initLimit=10
syncLimit=5
# 配置data 数据文件的目录
dataDir=/zookeeper
# 配置客户端连接的端口
clientPort=2181
根据配置文件中的配置,创建 对应的目录。
mkdir /zookeeper
进行myid 文件的配置
cd /zookeeper
echo 1 >myid
创建集群的节点配置文件 zoo.cfg.dynamic
# 创建一个 zoo.cfg.dynamic 文件
touch zoo.cfg.dynamic
# 编辑 zoo.cfg.dynamic 该文件,该文件中就是配置我们的集群中各个节点信息。
server.1=192.168.1.41:2888:3888
server.2=192.168.1.42:2888:3888
server.3=192.168.1.43:2888:3888
server.4=192.168.1.44:2888:3888:observer
zoo.cfg.dynamic 与 zoo.cfg 配置文件相关联
在 zoo.cfg 配置文件中加入 动态扩缩容的配置,引入 zoo.cfg.dynamic 配置文件。
# 配置一些超时时间参数
tickTime=2000
initLimit=10
syncLimit=5
# 配置data 数据文件的目录
dataDir=/zookeeper
# 配置客户端连接的端口
clientPort=2181
# 引入集群节点对应的配置文件。
skipACL=yes
reconfigEnabled=true
dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic
其中可以看到,相比于3.4.x 而言,在3.5.x 版本以后,将集群的配置文件单独抽取到了一个 zoo.cfg.dynamic 文件中。
这样做,是有一定好处的,在后面的集群启动,以及动态的添加zk 节点中我们就可以看到。
至此,我们完成了 192.168.1.41 节点的配置。然后,我们可以依次配置 192.168.1.42、192.168.1.43、192.168.1.44 三台节点。
注意:在进行其他节点的配置的时候,所有步骤基本相同。但是注意 myid 文件中的内容。
# 192.168.1.42 节点内容
mkdir /zookeeper
cd /zookeeper
echo 2 >myid
# 192.168.1.43 节点内容
mkdir /zookeeper
cd /zookeeper
echo 3 >myid
# 192.168.1.44 节点内容
mkdir /zookeeper
cd /zookeeper
echo 4 >myid
启动集群
# 192.167.1.41 节点
./zkServer.sh start
# 192.167.1.42 节点
./zkServer.sh start
# 192.167.1.43 节点
./zkServer.sh start
# 192.167.1.44 节点
./zkServer.sh start
启动完集群环境,我们可以使用客户端连接集群中的任意一个节点
# 使用客户端进行连接
./zkCli.sh -server 192.168.1.41:2181
[zk: 192.168.1.41:2181(CONNECTED) 0]
[zk: 192.168.1.41:2181(CONNECTED) 0]
[zk: 192.168.1.41:2181(CONNECTED) 0] ls /
[zookeeper]
# 使用confg 命令查看配置信息
[zk: 192.168.1.41:2181(CONNECTED) 1] config
server.1=192.168.1.41:2888:3888:participant
server.2=192.168.1.42:2888:3888:participant
server.3=192.168.1.43:2888:3888:participant
server.4=192.168.1.44:2888:3888:observer
version=100000000
注意:config 命令在3.5.x 版本的客户端中才有,在3.4.x 的老版本中是无法执行该命令的。
version=100000000 就是一个版本号
集群启动,观察配置文件的变化
集群启动之后,我们依次进入 4台节点中,观察 conf 中配置文件的变化
# 集群启动之前
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 root root 182 4月 2 05:29 zoo.cfg
-rw-r--r--. 1 root root 137 4月 2 05:15 zoo.cfg.dynamic
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.cfg
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
# 集群启动之后
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 root root 182 4月 2 05:29 zoo.cfg
-rw-r--r--. 1 root root 137 4月 2 05:15 zoo.cfg.dynamic
-rw-r--r--. 1 root root 172 4月 2 05:29 zoo.cfg.dynamic.100000000
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.cfg
启动之后,我们发现当前的配置文件中多了一个 zoo.cfg.dynamic.100000000 配置文件,该配置文件是 zk 自动为我们生成的。
查看 zoo.cfg 文件
syncLimit=5
initLimit=10
tickTime=2000
clientPort=2181
dataDir=/zookeeper
skipACL=yes
reconfigEnabled=true
dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic.100000000
此时,zoo.cfg 文件中也发生了变化,原来我们配置的 动态文件是 dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic 发生了变化,
已经变为了 zk 自动生成的 zoo.cfg.dynamic.100000000 文件
查看 zoo.cfg.dynamic.100000000 文件中的内容
server.1=192.168.1.41:2888:3888:participant
server.2=192.168.1.42:2888:3888:participant
server.3=192.168.1.43:2888:3888:participant
server.4=192.168.1.44:2888:3888:observer
我们发现,貌似zk 生成的该文件和我们自己定义的 zoo.cfg.dynamic 文件中内容一样。
其实,他这样设计,主要是为了动态扩缩容的时候使用,文件中的 00000000 后缀其实就是一个版本号。
当我们动态增加 zk 节点的时候,还会再次生成一个 新的文件,然后在 zoo.cfg 文件中重新指定新的节点配置文件。这样实现了类似于一个版本的递增的效果。
动态增加节点
假设,当前的zk 集群,我们需要增加一个节点 192.168.1.45 。该怎么增加呢?
增加 192.168.1.45 zk 节点
当前我们使用的3.5.x 的版本,是支持动态的扩缩容的,因此,我们在不重启现有 zk 集群的情况下,就可以实现。
- 在 192.168.1.45 节点上正常部署 zk。配置对应的 zoo.cfg、zoo.cfg.dynamic 配置文件。
# 配置 zoo.cfg 配置文件
syncLimit=5
tickTime=2000
initLimit=10
skipACL=yes
reconfigEnabled=true
dataDir=/zookeeper
dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic
# 配置 zoo.cfg.dynamic 配置文件。
# 该配置文件中,我们原来有 server1、server2、server3、server4 四个节点。
# 现在,我们需要增加 server.5 这个新的节点。
server.1=192.168.1.41:2888:3888
server.2=192.168.1.42:2888:3888
server.3=192.168.1.43:2888:3888
server.4=192.168.1.44:2888:3888:observer
server.5=192.168.1.45:2888:3888
在现有集群中加入该新增节点
使用 zkCli.sh 客户端连接集群中任意一个节点。然后进行 reconfig 重新配置即可。
[root@bogon bin]# ./zkCli.sh
Connecting to localhost:2181
[zk: localhost:2181(CONNECTED) 2]
[zk: localhost:2181(CONNECTED) 2]
[zk: localhost:2181(CONNECTED) 2] reconfig -add 5=192.168.1.45:2888:3888;2181
Committed new configuration:
server.1=192.168.1.41:2888:3888:participant
server.2=192.168.1.42:2888:3888:participant
server.3=192.168.1.43:2888:3888:participant
server.4=192.168.1.44:2888:3888:observer
server.5=192.168.1.45:2888:3888:participant;0.0.0.0:2181
version=10000000b
reconfig -add 5=192.168.1.45:2888:3888;2181 完成了新节点的加入。
此时,我们可以看到,集群节点中已经有了 192.168.1.45 这个新的节点了。
server.1=192.168.1.41:2888:3888:participant
server.2=192.168.1.42:2888:3888:participant
server.3=192.168.1.43:2888:3888:participant
server.4=192.168.1.44:2888:3888:observer
server.5=192.168.1.45:2888:3888:participant;0.0.0.0:2181
version=100000000此时的 version 也已经从原来的 100000000 变为了 10000000b
启动新增加的节点
最后,192.168.1.45 已经加入到了 zk的集群中,我们只需要将 该节点启动,提供服务即可。
./zkServer.sh
观察配置文件的变化
192.168.1.41、192.168.1.42、192.168.1.43、192.168.1.44 三个老节点中。
配置文件中已经又多了一个 zoo.cfg.dynamic.10000000b 配置文件
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 root root 182 4月 2 06:47 zoo.cfg
-rw-r--r--. 1 root root 137 4月 2 05:13 zoo.cfg.dynamic
-rw-r--r--. 1 root root 172 4月 2 05:29 zoo.cfg.dynamic.100000000
-rw-r--r--. 1 root root 229 4月 2 06:47 zoo.cfg.dynamic.10000000b
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.cfg
zoo.cfg 配置文件中也重新指向了 zoo.cfg.dynamic.10000000b 这个新的配置文件。
syncLimit=5
tickTime=2000
initLimit=10
clientPort=2181
dataDir=/zookeeper
skipACL=yes
reconfigEnabled=true
dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic.10000000b
192.168.1.5 这个新的节点中。
启动之后,配置文件中自动生成了 一个 zoo.cfg.dynamic.10000000b 配置文件
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 root root 166 4月 2 06:48 zoo.cfg
-rw-r--r--. 1 root root 169 4月 2 06:41 zoo.cfg.dynamic
-rw-r--r--. 1 root root 229 4月 2 06:48 zoo.cfg.dynamic.10000000b
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.cfg
配置文件 zoo.cfg 指向了新生成的节点文件
syncLimit=5
tickTime=2000
initLimit=10
dataDir=/zookeeper
skipACL=yes
reconfigEnabled=true
dynamicConfigFile=/usr/local/zookeeper3.5.7/conf/zoo.cfg.dynamic.10000000b
至此,我们就完成了 zk 集群中新增节点操作。
动态缩容
动态缩容和动态扩容类似,都可以在不重启zk 集群环境的情况下实现。指定 reconfig 命令即可。
假如,现在要动态的将 5 号server 删除,要如何做?
直接使用 reconfig -remove 5 即可。
./zkCli.sh
[zk: localhost:2181(CONNECTED) 4]
[zk: localhost:2181(CONNECTED) 4]
[zk: localhost:2181(CONNECTED) 4] reconfig -remove 5
Committed new configuration:
server.1=192.168.1.41:2888:3888:participant
server.2=192.168.1.42:2888:3888:participant
server.3=192.168.1.43:2888:3888:participant
server.4=192.168.1.44:2888:3888:observer
version=10000000f
至此,我们就将 serverid=5 的zk 节点实现了移除。
此时,我们发现我们 version=10000000f 又发生了变化
我们的配置文件文件版本也递增的一版。新增了 zoo.cfg.dynamic.10000000f 版本。
-rw-r--r--. 1 502 games 535 5月 4 2018 configuration.xsl
-rw-r--r--. 1 502 games 2712 2月 7 2020 log4j.properties
-rw-r--r--. 1 root root 182 4月 2 07:26 zoo.cfg
-rw-r--r--. 1 root root 137 4月 2 05:15 zoo.cfg.dynamic
-rw-r--r--. 1 root root 172 4月 2 05:29 zoo.cfg.dynamic.100000000
-rw-r--r--. 1 root root 229 4月 2 06:47 zoo.cfg.dynamic.10000000b
-rw-r--r--. 1 root root 172 4月 2 07:26 zoo.cfg.dynamic.10000000f
-rw-r--r--. 1 502 games 922 2月 7 2020 zoo_sample.c
标签:--,cfg,zookeeper,--.,192.168,zoo,3.5,集群,root
From: https://www.cnblogs.com/YX-NO1/p/17281099.html