Redis 7.x 系列【26】集群模式动态扩容、动态缩容

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 动态扩容
      • 1.1 安装、启动
      • 1.2 加入新节点
      • 1.3 分配哈希槽
      • 1.4 加入从节点
    • 2. 缩容
      • 2.1 删除从节点
      • 2.2 迁移哈希槽
      • 3.3 删除主节点

1. 动态扩容

Redis 集群支持动态增加节点实现扩容,提高集群容量和数据处理能力,接下来演示将之前三主三从扩容为四主四从。

1.1 安装、启动

新加节点网络访问地址如下 (一台服务器):

  • 主节点四:192.168.56.101:7000
  • 从节点四:192.168.56.101:7001

安装、修改配置、启动,这几个步骤和集群部署一样,这里就不赘述了。

1.2 加入新节点

查看节点信息(一台服务器):

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b5bde236f14f21f530a7095aaef3a98109009324 192.168.56.101:6383@16383 slave e909dc338f4c2fc7687cf4426d3b95956a90a8a8 0 1721384436435 2 connected
724c7b874dc0c37a462cd5ab59325203344f8008 192.168.56.101:6379@16379 myself,slave ce27fa445e987f75bddeeb68fc6fe440678ad1bb 0 1721384432000 7 connected
ce27fa445e987f75bddeeb68fc6fe440678ad1bb 192.168.56.101:6382@16382 master - 0 1721384434000 7 connected 0-5460
e909dc338f4c2fc7687cf4426d3b95956a90a8a8 192.168.56.101:6380@16380 master - 0 1721384435431 2 connected 5461-10922
0f1d8d6459ac4252636cb4b8e1764de9e277411c 192.168.56.101:6390@16390 slave 9f9c30c3f73106e256fdec27264fc8129e1287fd 0 1721384435000 3 connected
9f9c30c3f73106e256fdec27264fc8129e1287fd 192.168.56.101:6381@16381 master - 0 1721384435000 3 connected 10923-16383

此时,集群节点并不包含新节点信息,需要使用 add-node 将新的主节点加入:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7000 192.168.56.101:6380

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7000:新加入的主节点
  • 192.168.56.101:6380:负责扩容处理的节点(原先集群中的任意主节点)

打印日志日下:

在这里插入图片描述
重新查看集群信息,可以看到新节点:
在这里插入图片描述

1.3 分配哈希槽

新节点此时没有分配哈希槽,需要使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

首先会提示分配多少哈希槽,这里有四个主节点 16384/4=4096 ,所有输入 4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入新节点的 ID ,将分配的哈希槽给新节点(cluster nodes命令查看):

What is the receiving node ID? a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

接着提示从哪些节点移出这 4096 个哈希槽,这些输入 all 表示从所有节点平摊移出:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1:all

最后会打印一些迁移日志:

在这里插入图片描述
重新查看节点信息,可以看到新节点被分配了哈希槽:
在这里插入图片描述新节点的哈希槽,并不是连续的,分为了三个区间,直接截取了其他节点的部分哈希槽,如果是全部重新分配,需要全部迁移,这样成本高且效率很低。

1.4 加入从节点

接着使用 add-node 命令将新的从节点,加入到集群中:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7001 192.168.56.101:7000 --cluster-slave --cluster-master-id a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7001:新加入的从节点
  • 192.168.56.101:7000:新从节点对应的主节点
  • a95a0a529f62ff1793bf2c2cfc92ec51c96e1268:主节点 ID

打印日志如下:
在这里插入图片描述

重新查询节点信息,可以看到新的主从节点都加入成功:

在这里插入图片描述

2. 缩容

Redis 集群支持动态删除节点实现缩容,从集群中移除节点,将分配给该节点的哈希槽移动到其他现有节点上。接下来演示将上面的四主四从恢复为三主三从。

2.1 删除从节点

查看将被移除节点的信息:

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 192.168.56.101:7000@17000 master - 0 1721394340000 8 connected 0-1364 5461-6826 10923-12287
78d33242164ad02901903b195f54aaa1b0e14420 192.168.56.101:7001@17001 slave a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 0 1721394340538 8 connected

首先需要删除从节点,使用 del-node 命令,输入从节点的地址、ID

[root@localhost bin]# redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7001 78d33242164ad02901903b195f54aaa1b0e14420

打印日志如下:
在这里插入图片描述

查看节点信息,可以看到从节点已经被移除:

在这里插入图片描述

2.2 迁移哈希槽

删除主节点之前,需要将当前节点中的哈希槽迁移出去,这里直接将被删除节点中的 4096 个哈希槽,全部移入到 6380 节点中,使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

输入4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入 6380 节点的 ID 接收哈希槽 (cluster nodes命令查看):

What is the receiving node ID? e909dc338f4c2fc7687cf4426d3b95956a90a8a8

接着提示,从哪些节点移出这 4096 个哈希槽,这里输入删除节点的 ID,输入 done ,表示该节点将被删除:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1: e909dc338f4c2fc7687cf4426d3b95956a90a8a8
Source node #2: done

在这里插入图片描述

3.3 删除主节点

使用 del-node 命令删除主节点:

redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7000 a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

查看节点信息,可以看到主节点也被移除了:
在这里插入图片描述

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

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

相关文章

【Vue3】watch 监视 ref 定义的数据

【Vue3】watch 监视 ref 定义的数据 背景简介开发环境开发步骤及源码参数说明 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努…

基于STM32的逻辑分析仪

文章目录 一、逻辑分析仪体验1、使用示例1.1 逻辑分析仪1.2 开源软件PulseView 2、核心技术2.1 技术方案2.2 信号采集与存储2.3 数据上传 3、使用逻辑分析仪4、 SourceInsight 使用技巧4.1新建工程4.2 设置工程名及工程数据目录4.3 指定源码目录4.4 添加源码4.5 同步文件4.6 操…

string使用及模拟

前言 相信看过我博客的小伙伴都已经C的接触已经很久了,也没那么多废话。stl库直接走起,最开始、最简单的就是string。string就相当于是把C语言中的字符串“char[]”给升了级,像是顺序表一样多了记录长度和容量的大小,还加了很多的…

大模型面试:LLM+向量库的文档对话系统

面试题 1.1 为什么大模型需要外挂(向量)知识库?如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调 回答 大模型需要外挂(向量)知识库的原因: 知识更新频率:大模型在训练时使用的知识是静态的&am…

免杀笔记 -->API的整理Shellcode加密(过DeFender)

最近更新频率明显下降我懒,那么今天就来记录一下我们的一些常用的API的整理以及ShellCode的加密。 1.WinAPI整理 问我为什么要整理? 就是用起来的时候要左翻右翻 :: 烦死了 1.VirtualAlloc VirtualAlloc(NULL,sizeof(buf),MEM_…

人工智能和计算机视觉领域国际学术会议submission

文章目录 1. AAAI 20252. CVPR 20253. ICCV 20254. IJCAI 20255. ICRA 20256. NeurIPS 20257. ACL 20258. ICLR 2025 1. AAAI 2025 人工智能促进协会(AAAI)是一个成立于1979年的非营利性科学组织,专注于深化对智能行为和思维机制的科学理解&…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换,效率过低,所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本(Build 19041 及更高版本)或 Win…

排查一次线程泄漏

背景:最近经常发生K8S健康检查到应用的心跳接口超时不通,然后发生了重启,第一时间进入pod内部使用任何jvm命令都会导致java进程重启(也包括arthas工具使用不了),dump不下来,事故现场没法保留&am…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置3.编写测试类Entity层Mapper接口MapperXML文件测试类 4.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是: 2.3.…

电子期刊制作攻略:从零开始,轻松入门

​随着互联网的快速发展,电子期刊已经逐渐成为人们获取信息和娱乐的重要途径。越来越多的人开始关注并投身于电子期刊的制作行业。那么,如何从零开始,轻松入门电子期刊制作呢? 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中,有介绍过前端触发的通知服务。 【odoo】右上角的提示(通知服务) 此文章则介绍后端触发方法。 内容 直接上代码:但是前提一定是按钮触发!!!!! def bu…

无法解析插件 org.apache.maven.plugins:maven-war-plugin:3.2.3(已解决)

文章目录 1、问题出现的背景2、解决方法 1、问题出现的背景 最开始我想把springboot项目转为javaweb项目,然后我点击下面这个插件 就转为javaweb项目了,但是我后悔了,想要还原成springboot项目,点开项目结构关于web的都移除了&am…

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

【Git】merge合并分支

两个分支未修改同一个文件的同一处位置: Git自动合并 两个分支修改了同一个文件的同一处位置:产生冲突 例: 在master分支修改了main同时,feat分支也修改了相同的文件 合并的时候就会产生冲突 解决方法: Step1- 手工修改冲突文件,合并冲突内容…

【数据结构】单链表的增删改查

介绍 链表是有序的列表,但是它在内存中是如下存储的: ①链表以节点的方式进行存储,是链式存储的 ②每个节点包含 data 域、next 域:指向下一节点 ③链表的各个节点不一定是连续存放的 ④链表分为有头节点的链表和没有头节点的链表…

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法 flyfish Llama 3.1模型简介 Llama 3.1是一系列大型语言模型,包含以下几种规模: 8B 参数:模型中有80亿个参数 70B 参数:模型中有700亿个参数 405B 参数:模型中有4…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

【vue教程】四. Vue 计算属性和侦听器

目录 本章涵盖知识点回顾计算属性(Computed)创建计算属性计算属性的多样性计算属性的数组过滤计算属性的复杂表达式 计算属性 vs 方法计算属性的实例演示 侦听器(Watchers)创建侦听器侦听器的高级用法侦听器的深度观察侦听器的立即…

无线遥控控制直流电机和无刷电机开关

一 目的 此文章记录了arduino与陶晶驰串口屏实现联动,点击屏幕双态开关远程控制arduino2560板载的直流电机和无刷电机开关。为手搓乒乓球发球机做准备。 二 接线 2.1串口屏接线 串口屏与Arduino UNO接线如下: ———————————————— RX …

pdf2image:将PDF文档转化为图像的Python魔法

标题:探索pdf2image:将PDF文档转化为图 像的Python魔法 背景 在数字时代,我们经常需要处理各种格式的文档,尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而,有时我们需要将PDF文件转换成图像格式&am…