Redis集群实战:如何实现节点的弹性伸缩与数据迁移?

在生产环境中,业务量的增长往往不可预测。今天我们的Redis集群可能只有3个节点,明天可能就需要扩展到10个节点。如果每次扩容都要停机迁移数据,那简直是运维的噩梦。

幸运的是,Redis Cluster天生就支持动态伸缩 。它允许我们在不中断服务的情况下,像搭积木一样增加或减少节点。今天,我们就来揭秘这一"弹性"背后的核心操作------Add-NodeReshard

第一步:请新成员入队(Add-Node)

假设我们现有的集群运行在7001-7003端口,现在为了应对流量高峰,我们启动了一台新的Redis实例(端口7004)。此时,7004只是一个孤独的节点,它并不知道集群的存在。

我们需要用一条命令把它"拉"进群里:

复制代码
redis-cli --cluster add-node 127.0.0.1:7004 127.0.0.1:7001

这条命令包含两个关键信息:

  • 新节点127.0.0.1:7004(我们要加入的新人)。
  • 现有节点127.0.0.1:7001(集群里的老成员,用于获取集群元数据)。

执行后,7004成功加入了集群。但请注意,此时它只是一个没有插槽(Slot)的Master。它虽然身在集群,却"无地可耕",无法存储任何数据。如果我们现在尝试写入数据,会发现数据依然只分布在老节点上。

第二步:划分地盘(Reshard)

新节点加入后,为了让它分担压力,我们需要从老节点那里"匀"一部分插槽给它。这个过程叫重分片

我们使用reshard命令来执行这一操作:

复制代码
redis-cli --cluster reshard 127.0.0.1:7001

执行该命令后,系统会进入交互式问答,我们需要依次回答三个核心问题:

  • How many slots?
    你需要输入迁移的插槽数量。例如,如果你想让新节点承担约20%的流量,可以输入3000(总共有16384个槽)。
  • Receiving node?
    你需要输入接收者 的节点ID。也就是我们新加入的7004节点的ID(可以通过cluster nodes命令查看)。
  • Source nodes?
    你需要输入贡献者 的节点ID。你可以指定某个特定的老节点(如7001),也可以输入all让所有老节点共同分担。

输入done确认源节点,最后输入yes确认执行。此时,你会看到终端疯狂刷屏,Redis正在后台将数据从老节点平滑地搬运到新节点。

验证成果:数据去哪儿了?

迁移完成后,神奇的事情发生了。假设num这个键原本哈希到了2765号插槽,而这个插槽恰好被分配给了7004。

当我们执行SET num 10时:

  • 客户端计算哈希,发现属于7004。
  • 数据直接写入7004。

通过cluster nodes命令,我们可以清晰地看到7004已经持有了属于它的插槽范围。扩容完成,且全程业务无感知!

课后思考:如何优雅地"裁员"?

学会了"加法","减法"同样重要。如果业务量下降,我们需要下线某个节点,该怎么做?

  • 提示 :使用redis-cli --cluster help查看帮助。
  • 核心难点 :你不能直接删除一个还有数据的节点。必须先使用reshard将该节点上的所有插槽全部迁移走,把它变成"光杆司令",然后才能使用del-node命令将其移除。
知识小结:核心考点速查表

为了方便大家复习,我将本文的重点整理成了下表:

知识点 核心内容 考试重点/易混淆点 难度系数
Redis集群伸缩功能 动态增加或移除节点,支持集群规模调整 add-node命令需同时指定新节点和集群现有节点信息 ⭐⭐
add-node命令参数 new_host:new_port(新节点) + existing_host:port(集群现有节点) 未加选项时默认新增主节点,--cluster-slave可指定为从节点 ⭐⭐
插槽分配 数据通过哈希槽分布,新增主节点后需手动迁移插槽 reshard命令实现插槽迁移,需指定源节点ID和目标节点ID ⭐⭐⭐
案例:扩容并存储数据 1. 新增主节点(7004) 2. 通过reshard将7001的插槽(含number键的2765槽)迁移至7004 迁移后数据自动跟随插槽,set number=10成功写入新节点 ⭐⭐⭐⭐
删除节点(作业) 需通过帮助文档查找命令(如del-node),需先清空节点插槽 移除主节点前需重新分配其全部插槽 ⭐⭐⭐
总结

Redis Cluster的伸缩性是其最大的亮点之一。通过add-node引入新成员,再通过reshard公平地分配工作(插槽),我们就能轻松应对业务的增长。记住,数据是跟着插槽走的,只要掌握了插槽的分配权,你就掌握了Redis集群的命脉。

相关推荐
love530love2 小时前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
Leaton Lee3 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
凌云拓界4 小时前
文件管理:让AI安全操作你的电脑 ——CogitoAgent开发实战(三)
javascript·人工智能·架构·开源·node.js
cfm_29144 小时前
Redis五大基本数据结构底层了解
数据结构·数据库·redis
凌云拓界4 小时前
联网能力:让AI看见更广阔的世界 ——CogitoAgent开发实战(四)
javascript·人工智能·架构·node.js·创业创新
Cosolar4 小时前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构
真实的菜5 小时前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
wb043072015 小时前
厨房实况直播——从阿明的“外卖骑手追踪系统“,看实时系统与事件驱动架构
架构
绿算技术5 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构