什么叫做动态的加入或移除节点?
简单理解就是在zookeeper集群不停止的情况下,向这个集群中加入新的节点或移除现有的节点。这是zookeeper3.5+才有的新功能。

  1. 搭建一个zookeeper集群
    参考:https://blog.csdn.net/admin_15082037343/article/details/100045048
  2. 将现有zookeeper的集群上的jdk和zk复制到新需要加入集群的节点机器上
    新的集群配置一下jdk环境变量
  3. 新的节点修改zookeeper配置,zoo.cfg
    zoo.cfg
    注意:这里只需要配置当前节点和集群中的任意节点连接信息即可,zk3.5+节点的连接信息都放在zoo.cfg.dynamic.*文件中,会自动同步,别忘了${dataDir}下面的myid文件。
  4. 启动该需要加入集群的节点
    在${ZOOKEEPER_HOME}/bin目录下
./zkServer.sh start
  1. 集群任意节点使用命令行客户端连接到集群
    在${ZOOKEEPER_HOME}/bin目录下,使用zkCli.sh连接到集群
./zkCli.sh -server master:2181
  1. 使用config查看节点连接信息
    config
  2. 添加节点
> reconfig -add server.4=worker1-bak:2888:3888;2181

auth
添加节点失败,因为zk在3.5.3之后添加了权限控制,防止任意节点使用客户端连接到集群破坏集群

  1. 生成摘要
    在zk的根目录,使用以下命令生成摘要
java -cp ./lib/*:./* org.apache.zookeeper.server.auth.DigestAuthenticationProvider su:passwd >> passwd

成功后,在passwd文件中就生成好了摘要信息 su:passwd->su:gACzJ4L2A0F2ygTno5HQnfabuik=
9. 更新zkServer.sh
在zkServer.sh文件中新增命令行,注意修改上一步生成的摘要

SERVER_JVMFLAGS="-Dzookeeper.DigestAuthenticationProvider.superDigest=su:gACzJ4L2A0F2ygTno5HQnfabuik="
  1. 重启该节点
./zkServer.sh restart
  1. 认证,重新添加节点
> addauth digest su:passwd
> reconfig -add server.4=worker1-bak:2888:3888;2181

add
12. 可以使用以下命令移除节点

> reconfig -remove 4
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐