zookeeper3.6.0集群部署,动态更新配置
修改配置文件conf/zoo_sample.cfg 修改名称zoo.cfg# 定义文件存储目录dataDir=/opt/module/apache-zookeeper-3.6.0-bin/zkDate# 定义集群节点server.2=hadoop02:2888:3888server.3=hadoop03:2888:3888server.4=hadoop04:2888:3888...
·
前置条件
- 安装JDK 1.8
- 安装zookeeper 3.6.0
- 集群模式启动时,最少需要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.<positive id> = <address1>:<port1>:<port2>[:role];[<client port address>:]<client port>
# 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
更多推荐
已为社区贡献1条内容
所有评论(0)