zookeeper3.6.0集群部署,动态更新配置

前置条件

  1. 安装JDK 1.8
  2. 安装zookeeper 3.6.0
  3. 集群模式启动时,最少需要3台节点,否则无法启动

动态更新节点

  • 优点:不用重启服务,动态上下线节点

  • 缺点:配置繁琐,需要对zookeeper有一定的理解

  • 想知道详细介绍的同学请直接查看官方文档https://zookeeper.apache.org/doc/r3.6.0/zookeeperReconfig.html,下面的文章只是把关键点整理做了一个总结,方便快速配置

  • 3.5.0之前的版本不支持动态扩容

  • 3.5.0-3.5.3 无法禁用动态配置

  • 3.5.3之后的版本动态配置默认处于禁用状态

  • conf 目录下 zoo_sample.cfg 名称更改为 zoo.cfg

# 心跳时间(毫秒)
tickTime=2000
initLimit=5
syncLimit=2
# 文件存储目录,和事务日志的存储目录
dataDir=/opt/module/apache-zookeeper-3.6.0-bin/zkDate
# 单独定义事务日志的存储目录
# dataLogDir=/opt/module/apache-zookeeper-3.6.0-bin/zkDateLog

# 禁用standalone启动模式
standaloneEnabled=false
# 启用动态配置
reconfigEnabled=true
# 指定动态配置文件
dynamicConfigFile=/opt/module/apache-zookeeper-3.6.0-bin/conf/zoo.cfg.dynamic
  • zoo.cfg.dynamic 动态配置文件
# server. = ::[:role];[:]
# role是可选的,可以是participant和observer,默认participant
# client port address是可选的,默认0.0.0.0
server.1=192.168.0.1:2888:3888:participant;0.0.0.0:2181
server.2=192.168.0.2:2888:3888:participant;0.0.0.0:2181
server.3=192.168.0.3:2888:3888:participant;0.0.0.0:2181
  • dataDir 目录下新建myid文件,把positive id值填进去

创建超级管理员

// 使用如下java代码获取管理员的sha值
System.out.println(DigestAuthenticationProvider.generateDigest("super:ccy"));
// super:hEp8FYdVCK8tij+VukN9LOn3d+w=
  • 修改zkServer.sh,新增
    “-Dzookeeper.DigestAuthenticationProvider.superDigest=super:g9oN2HttPfn8MMWJZ2r45Np/LIA=”
    值填写java代码中获取到的值
# 找到如下代码:大约在第158行
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
# 修改后如下
nohup "$JAVA" $ZOO_DATADIR_AUTOCREATE "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" \
"-Dzookeeper.log.file=${ZOO_LOG_FILE}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:hEp8FYdVCK8tij+VukN9LOn3d+w=" \
-XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError='kill -9 %p' \
-cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
  • 启动集群
bin/zkServer.sh
  • 客户端模式下执行以下命令
# 进入客户端
zkCli.sh
# 使用超级管理员权限
addauth digest super:ccy
# 查看动态配置文件
config
  • 修改当前动态配置文件,有2种模式

增量模式

  • 定义:增量指定对当前配置的更改
增加节点

正在运行的集群进入客户端更新配置文件

# 增加节点,可同时指定多个,用逗号分隔
# reconfig -add serverId=host:port1:port2:clientPort
# 管理员用户权限才能执行操作
reconfig -add 4=192.168.0.4:2888:3888:participant;0.0.0.0:2181

增加一台节点192.168.0.4,保持该节点配置文件和其他节点配置文件一致,除了myid中的值,启动192.168.0.4

能启动成功则表示动态添加成功,失败请查看logs中的日志寻原因

删除节点
# 删除节点,可同时指定多个,逗号分隔 reconfig -remove [serverId,*]
reconfig -remove 3,4

执行成功后,该节点已经退出该集群,调用zkServer.sh stop命令停止服务

非增量模式
  • 简单地指定系统的新动态配置。
# 直接指定一个新的动态配置文件即可
reconfig -file /opt/module/apache-zookeeper-3.6.0-bin/conf/new.cfg

你可能感兴趣的:(大数据,分布式,zookeeper)