【架构】docker实现集群主从扩容【案例3/4】

news2024/11/19 16:28:57

实现集群主从扩容

当整个集群扛不住流量的情况时,需要给集群扩容增加设备,由3主3从,扩为4主4从。实现:

示意图如下:
在这里插入图片描述

第一步:新创建两个节点(redis-node-7,端口6387和 redis-node-8,端口6388),并启动。
尽可能和之前创建节点的命名规则一致

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387

docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388

第二步:进入其中任意一个容器实例内部

docker exec -it redis-node-7 /bin/bash

第三步:将新的redis-node-7节点(空槽位),作为master加入集群 【--cluster add-node

redis-cli --cluster add-node  12.114.161.16:6387  12.114.161.16:6381
root@localhost:/data# redis-cli --cluster add-node  12.114.161.16:6387    12.114.161.16:6381
>>> Adding node 12.114.161.16:6387 to cluster 12.114.161.16:6381
>>> Performing Cluster Check (using node 12.114.161.16:6381)
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 12.114.161.16:6387 to make it join the cluster.
[OK] New node added correctly.

第四步:查看集群情况(第一次)

redis-cli --cluster check 127.0.0.1:6387
root@localhost:/data# redis-cli --cluster check 127.0.0.1:6387
127.0.0.1:6387 (bf73145e...) -> 0 keys | 0 slots | 0 slaves.      # 新增加Master主机 包含0槽位,0台从机器
12.114.161.16:6381 (6e961a47...) -> 2 keys | 5461 slots | 1 slaves.
12.114.161.16:6383 (78ac7be1...) -> 1 keys | 5461 slots | 1 slaves.
12.114.161.16:6382 (f097fec9...) -> 1 keys | 5462 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:6387)
M: bf73145e2eaaaa08084c9c2dad0d8c757faa48e1 127.0.0.1:6387
   slots: (0 slots) master                               # 新增加Master主机,但是哈希槽个数为 0    
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

第五步:给该主机,重新分派槽号【--cluster reshard

redis-cli --cluster reshard 12.114.161.16:6381
root@localhost:/data# redis-cli --cluster reshard 12.114.161.16:6381
>>> Performing Cluster Check (using node 12.114.161.16:6381)
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
M: bf73145e2eaaaa08084c9c2dad0d8c757faa48e1 12.114.161.16:6387
   slots: (0 slots) master
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096                # 分配槽位个数为:16384 / Master主机个数 
What is the receiving node ID? bf73145e2eaaaa08084c9c2dad0d8c757faa48e1   # 选择新加的Master主机id号
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all    # 选用之前的Master主机作为 哈希槽源
...
...

第六步:查看集群情况(第二次)

redis-cli --cluster check 127.0.0.1:6387
root@localhost:/data# redis-cli --cluster check 12.114.161.16:6381
12.114.161.16:6381 (6e961a47...) -> 1 keys | 4096 slots | 1 slaves.
12.114.161.16:6387 (bf73145e...) -> 1 keys | 4096 slots | 0 slaves.   # 注意: 新加Master主机分得槽位,0个从机
12.114.161.16:6382 (f097fec9...) -> 1 keys | 4096 slots | 1 slaves.
12.114.161.16:6383 (78ac7be1...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 12.114.161.16:6381)
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
M: bf73145e2eaaaa08084c9c2dad0d8c757faa48e1 12.114.161.16:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master    # 特别注意:新主机的4096槽位,分三个段,从原主机瓜分而来
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

第七步:增加第四台Slave主机(端口6388,redis-node-8)到新的Master主机

redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli --cluster add-node 12.114.161.16:6388 12.114.161.16:6387 --cluster-slave --cluster-master-id   bf73145e2eaaaa08084c9c2dad0d8c757faa48e1
root@localhost:/data# redis-cli --cluster add-node 12.114.161.16:6388   12.114.161.16:6387 --cluster-slave --cluster-master-id bf73145e2eaaaa08084c9c2dad0d8c757faa48e1
>>> Adding node 12.114.161.16:6388 to cluster 12.114.161.16:6387
>>> Performing Cluster Check (using node 12.114.161.16:6387)
M: bf73145e2eaaaa08084c9c2dad0d8c757faa48e1 12.114.161.16:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 12.114.161.16:6388 to make it join the cluster.   # 端口6388,redis-node-8 新的从主机,加入集群
Waiting for the cluster to join

>>> Configure node as replica of 12.114.161.16:6387.
[OK] New node added correctly.

第八步:查看集群情况(第三次)

redis-cli --cluster check 127.0.0.1:6387
root@localhost:/data# redis-cli --cluster check 127.0.0.1:6387
127.0.0.1:6387 (bf73145e...) -> 1 keys | 4096 slots | 1 slaves.   # 新加入1个从主机
12.114.161.16:6381 (6e961a47...) -> 1 keys | 4096 slots | 1 slaves.
12.114.161.16:6383 (78ac7be1...) -> 1 keys | 4096 slots | 1 slaves.
12.114.161.16:6382 (f097fec9...) -> 1 keys | 4096 slots | 1 slaves.
[OK] 4 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 127.0.0.1:6387)
M: bf73145e2eaaaa08084c9c2dad0d8c757faa48e1 127.0.0.1:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
   1 additional replica(s)
S: 4ed46e0368698cd9d5af2ee84631c878b8ebc4d0 12.114.161.16:6386
   slots: (0 slots) slave
   replicates 6e961a4765b555189708bebb69badf7dfad25cd5
S: 664e456ae7d5cf27ea6583ba2f437dac11d4e767 12.114.161.16:6388   # 从主机redis-node-8,成功加入master主机
   slots: (0 slots) slave
   replicates bf73145e2eaaaa08084c9c2dad0d8c757faa48e1
S: 9bc2417a9cd6545ef2445eb4aa0610d586acd73b 12.114.161.16:6385
   slots: (0 slots) slave
   replicates 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2
M: 6e961a4765b555189708bebb69badf7dfad25cd5 12.114.161.16:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 0e34147ce2544cd90f5cce78d5493ae9e8625dfe 12.114.161.16:6384
   slots: (0 slots) slave
   replicates f097fec937f54d147d316c1c62e26cb67c9fd059
M: 78ac7be13522bd4ffd6fcf900c6c149c6938ecc2 12.114.161.16:6383
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
M: f097fec937f54d147d316c1c62e26cb67c9fd059 12.114.161.16:6382
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

- 前3个Master机器,每个机器“切”出一部分槽位,分别给第四台新加的Master的槽位,好处:
1、避免从新分配,资源分配浪费;
2、原来每个Master槽位的数据,不用重新分配;

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

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

相关文章

白码CRM快速实现报价转订单功能

某crm项目已经做到销售模块了,销售模块实现了从报价到销售单,再到财务模块的应收流程。但使用过程中发现不好用的地方:报价通过后客户下单,销售相关人员又要重新录入数据一样的销售单,觉得这样的操作比较繁琐&#xff…

若依基于sm-crypto实现前后端登录密码加密

上一节介绍了基于jsencrypt实现的密码加密解密登录功能,这次来介绍基于sm-crypto实现前后端登录密码加密,本次采用的是sm2进行的加密解密。 后端 首先从后端代码开始写起(因为公钥和私钥都是要从java代码中生成): 首先需要引入sm-crypto的j…

【UE Niagara 条带粒子系列】01-初识条带渲染器

目录 效果 步骤 一、创建条带渲染器 二、增加粒子生成数量 三、设置条带粒子的初始宽度 效果 步骤 一、创建条带渲染器 1. 新建一个Niagara系统 选择“Simple Sprite Burst”模板 这里命名为“NS_RibbonRenderer” 打开“NS_RibbonRenderer”,删除“Sprite…

Kubernetes API 和流量控制:管理请求数量和排队进程

本文描述了我们最近遇到的一个真实案例:Kubernetes API 因其中一个集群中的大量请求而瘫痪。今天,我们将讨论我们如何处理这个问题,并提供一些关于如何预防它的提示。 高并发搞崩 Kubernetes API 一个非常普通的早晨,我们开始了…

KT148A语音芯在智能锁语音提示的优势在哪里成本还是性能

智能锁,已经广泛的应用于生活的各个场景,确实是一个好产品,我自己都在用,也很方便 而锁基本上都搭配有语音芯片或者蜂鸣器,低端的产品都是蜂鸣器,中端的产品基本都搭配语音芯片而智能锁方案中,…

智谱AI技术开放日:新一代基座大模型GLM-4及GLMs的发布

2024年1月16日,智谱AI举行了一次重要的技术开放日,发布了新一代基座大模型GLM-4和定制化的大模型GLMs。此次发布标志着智谱AI在人工智能领域的新一轮突破,进一步提升了大模型的性能,并降低了使用门槛,使得更多的人能够…

从界面探讨产品的卖点

背景 最近经常用这个平台来发布一些东西,总觉得体验不够好,毕竟这是号称是技术人员的聚集地,为何自己做的这个东西,好不好用,交互性咱们放到第二位,看了起码应该舒服,这应该是第一位的吧&#…

KubeSphere 核心实战之一【在kubesphere平台上部署mysql】(实操篇 1/3)

文章目录 1、登录kubesphere平台2、kubesphere部署应用分析2.1、工作负载2.2、服务2.3、应用路由2.4、任务2.5、存储与配置2.6、部署应用三要素 3、部署mysql3.1、mysql容器启动实例3.2、mysql部署分析3.3、创建mysql的配置3.4、创建mysql的数据卷pvc3.5、创建mysql工作负载3.6…

09- OpenCV:图像上采样和降采样

目录 1、上采样和降采样 简介 2、采样的应用场景 3、采样的API 4、图像金字塔概念 5、代码演示 1、上采样和降采样 简介 在图像处理中,上采样(Upsampling)和降采样(Downsampling)是常用的操作。 (1&…

申泰勇教练的独家人物化身系列即将登陆 The Sandbox

申泰勇(Shin Tae-yong)教练是足球界的传奇人物,他来到 The Sandbox,推出了自己的专属人物化身系列。作为前 K 联赛中场球员和印尼队取得历史性成就的幕后教练,他的传奇经历现在已经影响到了虚拟世界。 向过去、现在和未…

C:\Windows\Temp占用空间过大, 这样删除

1. windowsi, 打开windows设置, 点击系统 2. 点击存储, 点击临时文件 3. 选择你想要删除的临时文件

Abp vNext(一)说明

平时工作中使用Abp vNext框架比较多,但没有把文档系统的学习过,对于技术人员,不管什么框架,基本上拿到框架就可以着手开发了,都是c#语言,每套系统只是业务不同罢了,对于写业务的技术人员&#x…

【QT】自定义对话框及其调用

目录 1 对话框的不同调用方式 2 对话框QWDialogSize的创建和使用 3 对话框QWDialogHeaders的创建和使用 4 对话框QWDialogLocate的创建与使用 5 利用信号与槽实现交互操作 1 对话框的不同调用方式 在一个应用程序设计中,为了实现一些特定的功能,必须设计…

Ceph的介绍与部署

目录 存储基础 单机存储设备 DAS(直接附加存储,是直接接到计算机的主板总线上去的存储) NAS(网络附加存储,是通过网络附加到当前主机文件系统之上的存储) SAN(存储区域网络) 单…

【C++】vector模拟实现过程中值得注意的点

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 本篇文章旨在记录博主在模…

linux高级篇基础理论十二( 自动化运维工具Ansible )

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技…

分布式存储

1 存储基础 1.1 单机存储设备 DAS(直接附加存储,是直接接到计算机打的主板总线上去的存储) UDE、SATA、SCSI、SAS、USB接口的磁盘 所谓的接口就是一种存储设备驱动下的磁盘设备,提供块级别的存储 NAS(网络附加存储…

通俗易懂实现功能强大的实战项目 springboot+java+vue+mysql 日常办公用品直售推荐系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

投资自己,成就未来——社科院杜兰大学金融管理硕士项目

或许你一直在寻找一个能够提升自己、实现职业突破的机会。如果你对金融领域充满热情,并且渴望在这个竞争激烈的行业中脱颖而出,那么我要向你介绍一个绝佳的选择——中国社会科学院与美国杜兰大学金融管理硕士项目。 在这个高速发展的时代,投…

C语言调试大作战:与VS编译器共舞,上演一场“捉虫记”的艺术与科学

少年们好,我是博主那一脸阳光,我们接下来介绍C语言的调试和bug的分享。 引言: “如果你曾经在深夜与一串神秘莫测的C代码狭路相逢,彼此瞪大眼睛,犹如牛仔对决般紧张刺激;或者你曾试图驯服一段狂野不羁的循环…