Redis 集群架构通过在多个分片之间分布数据来提供水平可扩展性。随着工作负载要求的演变,您可能需要调整分片数量以优化性能、资源利用率和数据分布。本文档概述了分片扩展操作的技术考虑、资源要求和实施指南。
在修改 Redis 集群的分片配置之前,请确保满足以下条件:
运行中
状态,所有节点正常运行。适当的资源规划对于成功的分片扩展操作至关重要。以下与内存相关的概念重要:
术语 | 定义 | 备注 |
---|---|---|
数据内存 | Redis 数据集实际占用的内存 | 通过 info memory 命令可观察到;随着 Redis 执行内存优化和垃圾回收,该值会波动 |
最大数据内存 | 所有 Redis 节点观察到的最高内存消耗 | 用作容量规划的参考点 |
最大运行内存 | 最大数据内存 ÷ 0.8 | 系数(0.8)表示 maxmemory 和总实例内存分配之间的推荐比率;较低的比率会增加开销宽限,但会降低内存效率 |
迁移数据内存 | 被退役分片的聚合数据量 | 在缩减扩展操作期间,必须将这些数据重新分配到剩余的分片 |
当增加分片数量时,每个实例应满足:
该公式确保在平衡数据分布的场景下成功添加分片。在存在 数据不平衡 或大键(BigKeys)的环境中,需要额外的容量规划,因为数据迁移模式可能会使特定分片的负载集中。
当减少分片数量时,每个剩余实例应满足:
该公式考虑了来自退役分片的数据重新分配。与扩展操作不同,缩减过程对资源要求 严格,以适应潜在的数据集中情况,即使数据分布不平衡。
提交分片配置更改后,系统将实例状态切换为 数据均衡
,并自动管理槽迁移过程。在此状态下,所有实例修改(除了删除)均受到限制。
在分片重新分配期间,Redis 槽迁移会影响客户端请求处理,具体如下:
当客户端请求访问正在迁移的槽中的键时:
MOVED
重定向错误。支持 Redis 集群的客户端可以自动处理这些重定向错误,通过重新发起请求到适当的分片。
性能提醒:在高流量期间进行分片扩展可能会使有效的客户端请求量翻倍,导致网络拥堵。因此,尽可能在活动减少的时间段安排扩展操作。
完成分片扩展操作所需的时间取决于多个因素:
通常,分片扩展操作需要 20 分钟到几个小时才能完成。更大的数据集和更复杂的迁移模式会延长此持续时间。