迁移第一步「版本升级」的落地步骤。采用 Redis 官方推荐的滚动升级:用新版本副本逐个替换旧节点,再计划性切主,全程不停服。
主线以 单实例主从 讲清核心流程;Redis Cluster 的差异见文末补充章节。
参考 Redis 官方《Redis administration · Upgrading without downtime》。
maxmemory 与淘汰策略、AOF / RDB 策略、requirepass / masterauth、连接数与超时、TLS、复制 backlog(按内存规模留足)。BGSAVE 一次;记录拓扑、连接数 / 延迟基线。升级 / 加从期间的主要风险是全量重同步循环与主库压力尖峰。以下配置有助于滚动切主更平稳(具体值按数据规模压测确定,不要照抄数字):
| 配置 | 作用 |
|---|---|
repl-backlog-size |
断链后走部分重同步,避免整段全量重同步 |
client-output-buffer-limit replica … |
高峰写 + 初次同步时,避免复制输出缓冲超限被主库断开、陷入重同步循环 |
repl-diskless-sync / -delay |
慢盘环境下全量同步走网络、不落盘,降低主库磁盘压力 |
repl-timeout |
大数据集 / 慢链路下适度调大,避免误判超时触发重同步 |
maxmemory 预留余量 |
同步 / RDB 期内存占用可达平时约 2 倍,预留内存余量避免 OOM |
安全前提(非调优):主库开启持久化或不设崩溃自动重启;升级副本用 SHUTDOWN(save & quit)优雅重启以便部分重同步;切换提主用 REPLICAOF NO ONE,不要开可写副本作为中间态。
关键动作(示例命令,按环境调整)
REPLICAOF <旧主IP> <端口>(如需鉴权先设 masterauth);等初次同步完成。INFO replication 中 master_link_status:up、offset 与主对齐、延迟稳定。CLIENT PAUSE WRITE <ms> 短暂停写(Redis 6.2+)。INFO replication 的 master_repl_offset。REPLICAOF NO ONE 提主。7.2 能加载 6.x 的 RDB(向前兼容),所以「7.2 从旧 6.x 主」同步没问题。
Cluster 可复用"逐 shard 加从、追平、手动 failover"的思路,但上线前建议单独演练,不要把单实例主从的结果直接外推到 Cluster。
核心流程相同,差异在于命令与切流:
CLUSTER MEET 加入后 CLUSTER REPLICATE <主节点ID>。CLUSTER FAILOVER,逐 shard 进行(一次一个,切完验证 cluster_state:ok、role:master 再切下一个)。CLUSTER FAILOVER 默认会让原主停写、发送 offset、等从追平后再完成,因此不必叠加单实例那种裸 CLIENT PAUSE;默认不要用 FORCE / TAKEOVER。slot 随新主自动保留。| 阶段 | 检查 | 判定 |
|---|---|---|
| 升级前 | 健康 / 版本 / 复制 | 复制正常(Cluster:cluster_state:ok) |
| 加从后 | 复制追平 | master_link_status:up、offset 对齐 |
| 切主后 | 新主角色 | role:master(Cluster:cluster_state:ok) |
| 全程 | 抽样一致性 | 抽样 Key + Value + TTL 一致 |
| 观察期 | 延迟 / 错误 / 连接 / 内存 | 无明显劣化、无 ERROR 日志 |
CLUSTER FAILOVER 回切)。回到 迁移总览 · 下一步 Redis 7.2 → Engula。