zookeeper动态配置应用

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
消息中间件 分布式计算 负载均衡
ZooKeeper应用案例
【2月更文挑战第24天】
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
阿里云微服务引擎及 API 网关 2024 年 2 月产品动态
|
1月前
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
1月前
|
Docker 容器
在docker中安装zookeeper,并且阿里云服务器配置
在docker中安装zookeeper,并且阿里云服务器配置
224 1
|
14天前
|
运维 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 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
14天前
|
API
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态。
阿里云微服务引擎及 API 网关 2024 年 5 月产品动态
|
1月前
|
人工智能 API
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态
阿里云微服务引擎及 API 网关 2024 年 4 月产品动态。
|
1月前
|
API
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态
阿里云微服务引擎及 API 网关 2024 年 3 月产品动态。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
1月前
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。