zookeeper动态扩缩容(无需重启)

目录

一、启动一个zk

二、扩容一个zk

三、缩容一个zk

四、重新配置集群的节点


前言:

zookeeper动态扩/缩容的reconfig命令旨在不需要重启zookeeper中任何一个节点的情况下,对整个zookeeper集群进行动态扩/缩容。

zookeeper客户端支持的命令:

[zk: localhost:2181(CONNECTED) 5] help
ZooKeeper -server host:port -client-configuration properties-file cmd argsaddWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVEaddauth scheme authclose # 查看配置config [-c] [-w] [-s]connect host:portcreate [-s] [-e] [-c] [-t ttl] path [data] [acl]delete [-v version] pathdeleteall path [-b batch size]delquota [-n|-b|-N|-B] pathget [-s] [-w] pathgetAcl [-s] pathgetAllChildrenNumber pathgetEphemerals pathhistory listquota pathls [-s] [-w] [-R] pathprintwatches on|offquit # 动态配置reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]redo cmdnoremovewatches path [-c|-d|-a] [-l]set [-s] [-v version] path datasetAcl [-s] [-v version] [-R] path aclsetquota -n|-b|-N|-B val pathstat [-w] pathsync pathversion whoami 

在实际验证中发现一些细节问题,先记录如下:

1、如果整个zk集群只有一个zk节点(即serverId只有它本身),这时默认运行的是单机模式,如果需要运行在集群模式下,需要加入standaloneEnabled=false的配置。

2、使用zkCli客户端提供的reconfig命令,需要修改/zookeper/config节点,普通账号对该节点上的数据只有ACL中的查看权限,有如下两种方法可以解决:

①关闭ACL,配置文件加入 skipACL=yes

②生成超级管理员账号:

Linux可直接执行如下命名:

echo -n cjian:111111 | openssl dgst -binary -sha1 | openssl base64

cjian:111111 为用户名和密码 ,启动脚本增加如下配置

-Dzookeeper.DigestAuthenticationProvider.superDigest=cjian:ST25maIOy8WImjpR7Nf2/D2wFXQ=

使用zkCli连接上后,执行addauth digest cjian:111111

之后就可以修改/zookeper/config节点的数据了,即可执行reconfig命令

3、要使用reconfig命令需要配置reconfigEnabled=true

实操一下:

下载zookeeper不做赘述~

一、启动一个zk

配置第一个zk(myid为0),配置如下:

initLimit=10
syncLimit=5
skipACL=yes
# 加上这个配置 可通过 echo stat|nc ip:port 命令查看实例角色
4lw.commands.whitelist=*
clientPort=2181
tickTime=2000
dataDir=/home/zookeeper/zookeeper1/data
dataLogDir=/home/zookeeper/zookeeper1/log
# 关闭 单机模式
standaloneEnabled=false
# 支持reconfig
reconfigEnabled=true
admin.enableServer=false
server.0=127.0.0.1:2888:3888

启动后,执行

[root@localhost zookeeper1]# echo stat|nc 127.0.0.1 2181
Zookeeper version: 3.8.1-74db005175a4ec545697012f9069cb9dcc8cdda7, built on 2023-01-25 16:31 UTC
Clients:/127.0.0.1:42266[1](queued=0,recved=224,sent=224)/127.0.0.1:42288[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/1.4933/42
Received: 226
Sent: 225
Connections: 2
Outstanding: 0
Zxid: 0x90000000a
Mode: leader
Node count: 6
Proposal sizes last/min/max: 239/36/239

发现zk 0 的角色为leader,符合预期

二、扩容一个zk

拷贝一份,myid修改为1,配置文件修改如下:

initLimit=10
syncLimit=5
skipACL=yes
# 加上这个配置 可通过 echo stat|nc ip:port 命令查看实例角色
4lw.commands.whitelist=*
clientPort=2182
tickTime=2000
dataDir=/home/zookeeper/zookeeper2/data
dataLogDir=/home/zookeeper/zookeeper2/log
# 关闭 单机模式
standaloneEnabled=false
# 支持reconfig
reconfigEnabled=true
admin.enableServer=falseserver.0=127.0.0.1:2888:3888
server.1=127.0.0.1:2889:3889

注意: 这里扩容的实例的配置需要加上目标集群leader的server.id配置,如果只配置server.1=127.0.0.1:2889:3889,启动后,它是个leader,这时我们在2181的客户端连接上执行reconfig -add XXX命令时,会提示:

[zk: localhost:2181(CONNECTED) 0] reconfig -add server.1=127.0.0.1:2889:3889:participant;2182
No quorum of new config is connected and up-to-date with the leader of last commmitted config - try invoking reconfiguration after new servers are connected and synced

 正常配置并启动完成后,在2181的客户端连接上执行add命令:

(这里连上2182的客户端执行也是一样的,该请求zk内部会转发给leader)

[zk: localhost:2181(CONNECTED) 3] reconfig -add server.1=127.0.0.1:2889:3889:participant;2182
Committed new configuration:
server.0=127.0.0.1:2888:3888:participant
server.1=127.0.0.1:2889:3889:participant;0.0.0.0:2182
# 这是一个新的配置文件版本号标识,会生成zoo.cfg.dynamic.version=900000005文件
version=900000005
[root@localhost zookeeper1]# cat conf/zoo.cfg.dynamic.900000005
server.0=127.0.0.1:2888:3888:participant
server.1=127.0.0.1:2889:3889:participant;0.0.0.0:2182
[root@localhost zookeeper2]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper2/bin/../conf/zoo.cfg
Client port not found in static config file. Looking in dynamic config file.
Client port found: 2182. Client address: 0.0.0.0. Client SSL: false.
Mode: follower

发现扩容后的实例角色为follower,符合预期,连上客户端查看配置:

[root@localhost zookeeper2]# ./bin/zkCli.sh -server 127.0.0.1:2182
...[zk: 127.0.0.1:2182(CONNECTED) 0] config
server.0=127.0.0.1:2888:3888:participant
server.1=127.0.0.1:2889:3889:participant;0.0.0.0:2182
version=900000005

三、缩容一个zk

现在我们将第二步扩容的zk,拿掉,连上2181的客户端,并执行命令

[zk: localhost:2181(CONNECTED) 7] reconfig -remove 1
Committed new configuration:
server.0=127.0.0.1:2888:3888:participant
version=90000000d
[root@localhost zookeeper1]# cat conf/zoo.cfg.dynamic.90000000d
server.0=127.0.0.1:2888:3888:participant

查看下2182的配置和角色

[root@localhost zookeeper2]# cat conf/zoo.cfg
initLimit=10
syncLimit=5
skipACL=yes
4lw.commands.whitelist=*
tickTime=2000
dataDir=/home/zookeeper/zookeeper2/data
dataLogDir=/home/zookeeper/zookeeper2/log
reconfigEnabled=true
admin.enableServer=false
standaloneEnabled=false
dynamicConfigFile=/home/zookeeper/zookeeper2/conf/zoo.cfg.dynamic.90000000d
[root@localhost zookeeper2]# cat conf/zoo.cfg.dynamic.90000000d
server.0=127.0.0.1:2888:3888:participant
[root@localhost zookeeper2]# echo stat|nc 127.0.0.1 2182
Zookeeper version: 3.8.1-74db005175a4ec545697012f9069cb9dcc8cdda7, built on 2023-01-25 16:31 UTC
Clients:/127.0.0.1:37140[0](queued=0,recved=1,sent=0)Latency min/avg/max: 0/0.7989/30
Received: 176
Sent: 175
Connections: 1
Outstanding: 0
Zxid: 0x90000000d
Mode: follower
Node count: 6

发现还是follower,只不过已经脱离了集群;

四、重新配置集群的节点

可通过如下命令进行整个zk集群的配置更新

reconfig -members serverID=host:port1:port2;port3[,...]

其它的一些注意事项和命令说明可以翻阅官网的reconfig章节~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/699817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt应用软件【文件篇】INI文件读写

文章目录 INI文件简介INI文件的主要特点INI文件的应用场景Qt INI文件相关API汇总Qt读取INI文件代码示例Qt写入INI文件代码示例Qt修改INI文件代码示例INI文件编码格式问题INI文件简介 INI文件,全称Initialization File,是一种简单的文本文件,用于存储配置信息和参数。它由多…

【明道云】导入Excel数据时的默认顺序

【背景】 明道云导入Excel过程中由于数据问题往往会有一些需要补录的地方。这种情况下就需要已上传到线上的数据和本地Excel的记录顺序完全一致才方便对比。因此需要清除如何让两者的记录顺序一致。 【分析】 经过多次排序对比,考虑到分页的影响,发现…

二层交换机和三层交换机区别

01、二层交换机 二层交换机,也被称为数据链路层交换机,是在OSI模型的数据链路层(第二层)进行数据交换的设备。它基于MAC(Media Access Control)地址来转发数据包,实现局域网内部的数据传输 1、…

jetson nano——报错(已解决):ModuleNotFoundError: No module named ‘dlib‘

目录 1.问题描述2. ps:下面二个方法选一个即可。2.1.方法一:2.2.方法二:我直接提供文件,大家进入cd dlib-19.17输入python3 setup.py install即可 系统:jetson-nano-jp451-sd-card-image ubuntu 18.04 借鉴了这位博主的…

HTMLElement.click()的回调触发踩坑

先看看以下代码 const el document.getElementById("btn") el.addEventListener("click", () > {Promise.resolve().then(() > console.log("microtask 1"));console.log("1"); }); el.addEventListener("click", (…

Spring Boot 手写starter!!!

原因:为什么要手写starter??? 原因:简化功能。 实例:以分页为例:写一个starter。 1.首先定义一个PageX注解。 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented p…

mac/windows git ssh 配置多平台账号(入门篇)

目录 引子多账号多平台配置git一、.ssh文件夹路径1.1 mac 系统1.2 windows 系统 二、生成new ssh2.1 mac系统2.2 windows 系统 三、配置 config四、验证五、用ssh方式拉取远程仓库代码 引子 push代码到github仓库时,提示报错。 Push failed Remote: Support for pa…

Channel

在Java中,Channel是一个用于IO操作(特别是NIO,即非阻塞IO)的接口,它提供了一种连接到IO服务(如文件系统或套接字)的开放连接。Channel是Java NIO中的核心组件之一,使得能够以更接近操…

Redis部署方式(一)四种部署方式介绍

redis的四种部署方式: Redis单机模式部署、Redis主从模式部署、Redis哨兵模式部署、Cluster集群模式部署,后面三种(主从模式,Sentinel哨兵模式,Cluster模式)也可以统称为集群模式。 一、单机 1、缺点&…

XFF伪造 [MRCTF2020]PYWebsite1

打开题目 直接查看源码 看到一个./flag.php 访问一下 购买者的ip已经被记录,本地可以看到flag,那么使用xff或者client-ip伪造一下ip试试 bp抓包 加一个X-Forwarded-For头 得到flag

目标检测新SOTA:YOLOv9问世,新架构让传统卷积重焕生机(附代码)

在目标检测领域,YOLOv9 实现了一代更比一代强,利用新架构和方法让传统卷积在参数利用率方面胜过了深度卷积。 继 2023 年 1 月 YOLOv8 正式发布一年多以后,YOLOv9 终于来了! 我们知道,YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Al…

T-Dongle-S3开发笔记——分区表

参考: ESP32之 ESP-IDF 教学(十三)—— 分区表_esp32分区表-CSDN博客 分区表 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 分区表是 ESP32 划分内部 flash 闪存的清单,它将 flash 划分为多个不同功能的区域用于…

提取淘宝店铺联系方式的爬虫工具

随着电子商务的快速发展,淘宝成为了许多人购物的首选平台。而对于一些商家来说,获取淘宝店铺的联系方式是非常重要的,以便建立更加直接和有效的沟通渠道。本文将介绍一种基于Python的爬虫工具,可以帮助我们提取淘宝店铺的联系方式…

QT问题 打开Qt Creator发现没有菜单栏

之前不知道按了什么快捷键,当我再次打开Qt Creator时发现菜单栏消失啦 找了许多原因发现:安装有道词典的快捷键Ctrl Alt m 与Qt Creator里的快捷键冲突导致菜单栏被莫名其妙的隐藏 解决方法: 1找到有道词典快捷键 2再次按快捷键 Ctrl Alt m就可以重新显示菜单栏

【Pytorch】从MoCo看无监督对比学习;从SupCon看有监督对比学习

目录 无监督对比学习:Moco文章内容理解代码解释 有监督对比学习:Supervised Contrastive Learning文章内容理解 无监督对比学习:Moco 文章内容理解 以下内容全部来自于:自监督学习-MoCo-论文笔记. 侵删 论文:Momentu…

超平面介绍

超平面公式 (1) 超平面是指n维线性空间中维度为n-1的子空间。它可以把线性空间分割成不相交的两部分。比如二维空间中,一条直线是一维的,它把平面分成了两部分;三维空间中,一个平面是二维的,它把空间分成了两部分。(2…

性能优化——canvas 加载海量图

背景 公司的在线设计稿平台的画板列表页开发时由于数据量不足,未能测出关于画板列表页性能问题,在经过用户一段时间的使用后出现了关于初始化卡顿、缩放卡顿等问题,画板列表页采用了vue-konva 原因 关于画板列表为何卡顿有如下几点原因 1、…

如何用jmeter请求application/octet-stream,image/jpeg

用postman调用时: 用jmeter: 注意上图不要勾选,不然会把所有的内容都以二进制传进去,我们不勾选只传二进制的图片内容,勾选了会把MIME类型、参数名称都转为二进制传进去。会报错。

华为配置WLAN AC和AP之间VPN穿越示例

配置WLAN AC和AP之间VPN穿越示例 组网图形 图1 配置WLAN AC和AP之间VPN穿越示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响…

Idea依赖爆红解决

Idea依赖爆红问题,确认依赖信息没问题,并且试了网上很多方法都无效的情况下,不妨更换maven的版本试一下,可能会有奇效。