zookeeper动态配置应用

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: zookeeper动态配置应用

背景


在zookeeper 3.5.0版本之前,其配置不支持动态加载,只能通过重启加载新配置。因此在老版本中如果要对zk集群进行扩缩容,需要滚动重启集群中所有节点,以使新的配置生效。而在zookeeper 3.5.0版本之后(包含3.5.0),引入了动态配置的特性,即zk节点运行时可动态加载zk成员配置,这样可在保持数据一致性的同时不会中断业务。


总结起来,zk动态配置可解决之前zk集群日常扩缩容过程中的如下痛点:


  • zk集群短时间内不可用:zk节点滚动重启导致重新选举,选举周期内zk集群对外不可用;


  • 依赖zk client端重连:zk节点滚动重启导致已建立的客户端连接被断开,客户端需主动重连其他节点;


  • 扩缩容过程繁琐易出错:在静态配置版本下,扩容操作包括:配置新节点、启动新节点、配置老节点、滚动重启老节点。操作繁琐,步骤冗长,依赖人工容易出错。

下面介绍如何启动zk动态配置,以及利用该特性扩容和缩容。


一、操作步骤


1.1 配置zk集群


1.1.1 配置静态文件:zoo.cfg

autopurge.purgeInterval=1
initLimit=30000
syncLimit=10
autopurge.snapRetainCount=10
skipACL=yes
maxClientCnxns=2000
4lw.commands.whitelist=*
maxSessionTimeout=60000000
tickTime=2000
dataDir=/data/
reconfigEnabled=true
dataLogDir=/data/logs
preAllocSize=131072
dynamicConfigFile=/conf/zoo.cfg.dynamic

一些值得注意的参数(必选):


  • reconfigEnabled: 使能动态配置


  • dynamicConfigFile:加载dynamic配置文件的路径


  • skipACL=yes:跳过acl检查。如果不设置成yes,则需要superuser权限才能执行reconfig.


1.1.2 配置动态文件:zoo.cfg.dynamic

server.2=zoo2:2888:3888;2181
server.3=zoo3:2888:3888;2181
server.5=zoo5:2888:3888;2181

1.2 部署zk集群


为了方便快速验证,使用docker-compose部署以上三个zk实例


docker-compose.yml

version: '3.1'
services:
zoo2:
image: zookeeper:3.5.6
restart: always
hostname: zoo1
container_name: zookeeper_1
ports:
      - 2181:2181
volumes:
      - ./data1:/data
      - ./datalog1:/datalog
      - ./conf1:/conf
environment:
ZOO_MY_ID: 1
zoo3: 略
zoo5: 略

启动集群并查看状态

# 启动集群
sudo docker-compose up -d
# 进入zoo2容器
sudo docker exec -it zookeeper_2 /bin/bash      
# 查看状态
echo stat | nc localhost 2181
# 进入zk客户端命令行
./bin/zkCli.sh
> config
server.2=zoo2:2888:3888:participant;0.0.0.0:2181
server.3=zoo3:2888:3888:participant;0.0.0.0:2181
server.5=zoo5:2888:3888:participant;0.0.0.0:2181
version=1600000002

1.3 扩容:加入zoo1节点



1.3.1 配置并启动zoo1节点

# 修改zoo.cfg.dynamic,server列表包含老节点(zoo2, zoo3, zoo5)和本节点(zoo1)
server.1=zoo1:2888:3888;2181
server.2=zoo2:2888:3888;2181
server.3=zoo3:2888:3888;2181
server.5=zoo5:2888:3888;2181
# 首先启动zoo1
sudo docker-compose up -d zoo1

1.3.2 执行reconfig -add

./bin/zkCli.sh 
# 动态添加zoo1节点
> reconfig -add 1=zoo1:2888:3888;2181

可以看到,执行完reconfig命令之后,所有节点都生成了一份新的配置文件 zoo.cfg.dynamic.160000000b (后缀表示当前动态配置的版本号)

image.png


并且由zoo.cfg指向该dynamic文件

image.png

1.4 缩容:删除zoo5节点


1.4.1 执行reconfig -remove

./bin/zkCli.sh 
# 动态添加zoo1节点
> reconfig -remove 5

同1.3.2,也可看到每个实例的配置文件更新


1.4.2 停止zoo5

sudo docker-compose stop zoo5

二、注意事项


  • 执行reconfig命令后,需确认扩容/缩容是否成功:执行reconfig命令只意味着激活新配置的请求已发出,至于新配置有没有在所有节点上生效需要用户自行确认。


  • 为了避免zk集群短时不可用,应当尽量避免执行reconfig -remove leader节点


  • zk客户端可通过监听zk路径:/zookeeper/config实时监听zk节点列表的变化(前提是:客户端配置的zk节点列表中至少一个可用)。得到完整的zk节点列表之后,zk客户端可平衡每个zk节点的请求数,客户端也无需重新配置zk节点列表甚至重启。
相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
消息中间件 监控 Ubuntu
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
84 3
大数据-54 Kafka 安装配置 环境变量配置 启动服务 Ubuntu配置 ZooKeeper
|
2月前
|
Dubbo 应用服务中间件 Apache
Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移
如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?
19 4
|
6月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 05 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
50 1
|
3月前
|
Java 网络安全
zookeeper的环境搭建和配置
本文介绍了如何在多台节点上搭建和配置Zookeeper环境。内容包括Zookeeper的下载、解压、环境变量配置、配置文件修改、zkdata目录创建、myid文件设置,以及将Zookeeper及其配置文件复制到其他节点。还提供了运行测试的命令,包括启动、状态检查和停止Zookeeper服务。
zookeeper的环境搭建和配置
|
2月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
49 0
|
2月前
|
存储 Kubernetes 调度
k8s学习--k8s群集部署zookeeper应用及详细解释
k8s学习--k8s群集部署zookeeper应用及详细解释
|
5月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
阿里云微服务引擎及 API 网关 2024 年 6 月产品动态
161 21
|
4月前
|
人工智能 Java 测试技术
就AI 基础设施的演进与挑战问题之ZooKeeper的稳定性提升配置优化的问题如何解决
就AI 基础设施的演进与挑战问题之ZooKeeper的稳定性提升配置优化的问题如何解决
|
6月前
|
API
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态。
875 18
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态