Zookeeper3.5.+的新功能——动态服务发现

Zookeeper的伪集群模式部署可以参考下面这篇,我觉得写的非常详细了。
https://blog.csdn.net/ceasadan/article/details/52343734

关于zookeeper集群的动态服务发现,我之前看的参考书上说的是并不支持,也不能很好支持水平扩容,需要重启集群server(一起重启或者轮流重启)。
后来查了一下,发现官网有对动态配置功能的相关介绍:
http://zookeeper.apache.org/doc/current/zookeeperReconfig.html

接下来,测试一下:
环境:
windows10+zookeeper3.5.6

1.先开3个zookeeper服务,部署伪集群模式

按照说明配置文件上加上
reconfigEnabled=true

zoo1.cfg:
reconfigEnabled=true
standaloneEnabled=false
tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:\zookeeper\apache-zookeeper-3.5.6\data\1
dataLogDir=D:\zookeeper\apache-zookeeper-3.5.6\log\1
clientPort=2181
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

zoo2.cfg,zoo3.cfg也是一样的
然后启动。启动之后client 用config指令可获得集群信息:
在这里插入图片描述
然后我发现配置文件发生了变化,
Zookeeper3.5.+的新功能——动态服务发现_第1张图片
Zookeeper3.5.+的新功能——动态服务发现_第2张图片
打开这个动态文件,里面就是集群信息了。
Zookeeper3.5.+的新功能——动态服务发现_第3张图片
关于这个动态文件,官网也有说明:
Zookeeper3.5.+的新功能——动态服务发现_第4张图片
动态配置文件由zookeeper来写,不要手动去修改。

2.添加服务器

同样增加一个conf4.cfg和zkServer-4.其它server的配置文件不动。
启动zkServer-4,用一个客户端去连接新增的server:
在这里插入图片描述
Zookeeper3.5.+的新功能——动态服务发现_第5张图片
可以看到,该cli是可以看到同步的数据的,说明server4确实连上了集群,但config是没有新server的信息的。

3.利用超级用户模式修改动态配置
I.在安装目录下,用下面的指令生成认证使用的摘要信息(要放到配置文件里的信息):

在这里插入图片描述

java -cp ./lib/*;./* org.apache.zookeeper.server.auth.DigestAuthenticationProvider su:passwd

-cp 和-classpath一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类。(注意windows用分号;分隔,linux用冒号:分隔)。
这句话的作用其实就是利用DigestAuthenticationProvider这个类生成信息。
su和passwd是传入参数,分别为超级用户的用户名和密码。
根据传入参数会生成不一样的输出参数。
(我理解就相当于是给超级用户密码加密)
或者,这里也可以用IDE来进行生成:
Zookeeper3.5.+的新功能——动态服务发现_第6张图片

II.修改配置文件

打开zkServer-x.cmd(linux系统在zkServer-x.sh里改)
Zookeeper3.5.+的新功能——动态服务发现_第7张图片
在call %JAVA% 这行里加上“-Dzookeeper.DigestAuthenticationProvider.superDigest=su:gACzJ4L2A0F2ygTno5HQnfabuik=”
就是刚才生成的摘要信息。之后保存退出并重启该server。
这里配置了哪台server就是在哪台server上开了超级用户。

III.超级用户动态修改配置信息

用客户端连接上刚才集群内配置了超级用户的server。
在这里插入图片描述
Zookeeper3.5.+的新功能——动态服务发现_第8张图片

addauth digest su:passwd
reconfig -add server.4=127.0.0.1:2890:3890:participant;2184

这里对配置的修改支持两种增量和全量。
增量就是-add/ -remove 后面加server;
全量就相当于重新写所有的server信息,使用-members。
(注意-members 要输入所有server 而不是要修改的一个或部分server(血泪教训))

参考资料:

linux下的动态配置参考:
https://www.cnblogs.com/nullifier/p/10798575.html
配置超级用户(Windows Linux):
https://www.jianshu.com/p/530b75674647
官方文档说明:
https://zookeeper.apache.org/doc/r3.5.7/zookeeperReconfig.html#sc_reconfig_access_control

你可能感兴趣的:(zookeeper)