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

这篇具有很好参考价值的文章主要介绍了zookeeper动态扩缩容(无需重启)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、启动一个zk

二、扩容一个zk

三、缩容一个zk

四、重新配置集群的节点


前言:

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

zookeeper客户端支持的命令:

[zk: localhost:2181(CONNECTED) 5] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
	addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
	addauth scheme auth
	close 
    # 查看配置
	config [-c] [-w] [-s]
	connect host:port
	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
	delete [-v version] path
	deleteall path [-b batch size]
	delquota [-n|-b|-N|-B] path
	get [-s] [-w] path
	getAcl [-s] path
	getAllChildrenNumber path
	getEphemerals path
	history 
	listquota path
	ls [-s] [-w] [-R] path
	printwatches on|off
	quit 
    # 动态配置
	reconfig [-s] [-v version] [[-file path] | [-members serverID=host:port1:port2;port3[,...]*]] | [-add serverId=host:port1:port2;port3[,...]]* [-remove serverId[,...]*]
	redo cmdno
	removewatches path [-c|-d|-a] [-l]
	set [-s] [-v version] path data
	setAcl [-s] [-v version] [-R] path acl
	setquota -n|-b|-N|-B val path
	stat [-w] path
	sync path
	version 
	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=false

server.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章节~文章来源地址https://www.toymoban.com/news/detail-833431.html

到了这里,关于zookeeper动态扩缩容(无需重启)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes中Pod的扩缩容介绍

    在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需 要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale 机制来完成这些工作。 Kubernetes 对 Pod 的扩缩容操作提供了手动和自动两种模式,手动模式通过执行

    2024年02月07日
    浏览(49)
  • k8s教程(pod篇)-扩缩容

    声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记 在实际生产系统中,我们经常会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。此时可以利用 Deployment/RC 的 Scale机制 来完成

    2024年02月08日
    浏览(58)
  • k8s扩缩容与滚动更新

    使用kubectl run创建 应用 端口暴露出去 使用kubectl  create 创建应用 端口暴露出去 run 与 create 区别: run 为一次性的创建运行,删除后不会自动生成,没有 pod 控制器 create 创建的,删除后还会自动生成,有 pod 控制器,拥有副本集控制 scale 应用 默认情况下 应用只会运行一个副

    2024年02月12日
    浏览(45)
  • 研发工程师玩转Kubernetes——自动扩缩容

    在《研发工程师玩转Kubernetes——使用Deployment进行多副本维护》一文中,我们通过Deployment实现了多副本维护——即维持在一个确定数量的副本个数。而在现实场景中,我们往往需要根据服务的压力,采用水平(横向)扩容的方式——即增加多个副本,来分担压力。当服务压力

    2024年02月06日
    浏览(46)
  • 18. Pod 自动管理——HPA 自动扩缩容机制

    前言 HPA 自动扩缩容机制 前面我们学习了 Deployment、 StatefulSet、DeamonSet、Job,明白了 Kubernetes 为了帮助我们更好的管理 Pod,提供了一系列好用的工具。但是还远远不止于此,以上工具还需要我们手动设置 replicas 副本数量。 我们来想象一种场景,我们服务已经正常上线了,运

    2024年02月03日
    浏览(41)
  • Apache Doris 极简运维之BE扩缩容(1)

    已部署三个BE节点并且状态显示正常运行中 CPU :1C CPU型号 :ARM64 内存 :2GB 硬盘 :36GB SSD VM镜像版本 :CentOS-7 Apahce Doris版本 :1.2.4.1 集群规模 :1FE * 3BE 注意:DROP BACKEND 会直接删除该 BE,并且其上的数据将不能再恢复!!! 所以强烈不推荐使用 DROP BACKEND 这种方式删除 BE 节

    2024年02月11日
    浏览(34)
  • Kuibernetes 如何根据不同业务场景调节 HPA 扩缩容灵敏度

    在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由  kube-controller-manager  的  --horizontal-pod-autoscaler-downscale-stabilization-window  参数控制缩容时间窗口,默认 5 分钟 ,即负载减小后至少需要等 5 分钟才会缩容。 对于扩容,由 hpa controller 固定的算法、硬编码的常量因子

    2024年02月14日
    浏览(45)
  • Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】

    💖The Begin💖点点关注,收藏不迷路💖 首先,确保你已经安装了Docker。 要下载特定版本的Tomcat镜像,可以在 docker pull 命令后面添加 image_name: tag 参数。其中 tag 制定了镜像的版本号。 解决插入中文报错: 总结: docker安装完mysql,运行实例之后,建议先修改完字符集编码后再

    2024年02月10日
    浏览(38)
  • 第⑫讲:Ceph集群OSD扩缩容中Reblanceing数据的重分布

    当集群中OSD进行扩缩容操作后,会触发一个Reblanceing数据重分布的机制,简单的理解就是将扩缩容前后OSD中的PG在每一个OSD中进行均匀分布,如下图所示: 在扩容前集群有两个OSD节点,这两个OSD中分布着十个PG,扩容后,集群中有三个OSD节点,此时就会触发Reblanceing数据重分布

    2024年04月15日
    浏览(43)
  • EKS集群的弹性扩缩容CA的配置实战 ·『云原生品鉴与布道』·

    弹性伸缩主要有三个维度: HPA,根据利用率,自动伸缩 Pod 数量 VPA,根据历史数据,自动设置 Pod 的 Request、Limit CA,根据使用率,自动伸缩 Node 数量 EKS集群的弹性扩缩容是一项功能(这里指node的),可以自动上下伸缩您的资源以满足不断变化的需求。若没有此项重要的 Ku

    2024年03月24日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包