Redis 5.0 集群升级到 6.0 版本怎么不停机迁移?

文章导读
Redis 5.0 集群升级到 6.0 支持滚动升级(Rolling Restart),无需停机。适用场景为生产环境集群架构,风险边界在于客户端兼容性和 ACL 配置变更。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Redis 5.0 集群升级到 6.0 支持滚动升级(Rolling Restart),无需停机。适用场景为生产环境集群架构,风险边界在于客户端兼容性和 ACL 配置变更。

先说结论:Redis Cluster 协议在 5.0 到 6.0 版本间保持兼容,可通过逐节点重启二进制文件实现不停机迁移。

  • 适合:生产环境 Redis Cluster 架构,业务不允许长时间停机。
  • 先准备:全量备份 RDB/AOF 文件,确认客户端驱动支持 Redis 6.0 协议。
  • 验收:升级完成后检查集群状态为 ok,所有节点版本号显示 6.0。

命令速用版

以下命令用于检查集群状态和版本信息,升级过程中需反复执行验证。

redis-cli `--cluster` check 127.0.0.1:6379
redis-cli -h 127.0.0.1 -p 6379 info server | grep redis_version
redis-cli -h 127.0.0.1 -p 6379 cluster info

为什么会这样

Redis 集群协议在 5.0 到 6.0 之间保持向后兼容,允许混合版本节点共存。

Redis 6.0 主要新增 ACL 权限控制、TLS 加密和多线程 I/O,底层集群总线协议(Cluster Bus Protocol)未发生破坏性变更。官方文档明确说明支持滚动升级,即每次停止一个节点,替换二进制文件,启动后该节点会自动同步数据并重新加入集群,期间其他节点继续提供服务。

分步处理

按节点逐个操作,确保每次只有一个节点处于离线状态。

步骤 1:环境备份
对每个节点执行快照,防止升级失败导致数据丢失。

bgsave
# 确认 dump.rdb 生成时间
ls -lt /var/lib/redis/

步骤 2:停止旧节点
登录待升级节点,平滑关闭进程,确保数据落盘。

redis-cli -h 127.0.0.1 -p 6379 shutdown save

步骤 3:替换二进制文件
将 Redis 5.0 二进制文件替换为 6.0 版本,保持配置文件路径不变。

# 示例:备份旧 binary 并复制链接
mv /usr/bin/redis-server /usr/bin/redis-server.bak
cp redis-6.0/src/redis-server /usr/bin/redis-server

步骤 4:启动新节点
使用原配置文件启动,观察日志确认无报错。

redis-server /etc/redis/redis.conf
# 查看日志尾端
tail -f /var/log/redis/redis.log

步骤 5:等待同步完成
检查集群状态,确保该节点状态变为 connected 且数据同步完毕。

Redis 5.0 集群升级到 6.0 版本怎么不停机迁移?
redis-cli `--cluster` check 127.0.0.1:6379

步骤 6:重复操作
对集群中剩余节点重复步骤 2 至步骤 5,直到所有节点升级完成。

怎么验证是否生效

通过集群检查命令和版本信息确认升级结果。

检查点 1:集群健康状态
执行 cluster check,输出应包含 cluster_state:ok,且无 fail 节点。

redis-cli -h 127.0.0.1 -p 6379 cluster info

检查点 2:节点版本一致性
遍历所有节点,确认 redis_version 字段均为 6.0.x。

redis-cli -h 127.0.0.1 -p 6379 info server | grep redis_version

检查点 3:业务读写验证
在应用侧执行常规读写操作,确认无超时或连接拒绝错误。

常见坑

升级过程中需注意配置兼容性和客户端行为。

  • ACL 权限变更:Redis 6.0 默认启用 ACL,若配置文件未显式设置 requirepass 或 user default,可能导致旧客户端鉴权失败。建议在配置文件中保留 requirepass 兼容旧客户端。
  • TLS 配置冲突:若原 5.0 版本未启用 TLS,升级后不要随意开启 tls-port,否则客户端无法连接。
  • 客户端驱动版本:部分老旧 Redis 客户端驱动可能无法解析 6.0 新增的响应格式,建议提前在测试环境验证客户端兼容性。
  • 内存碎片率:升级后重启进程可能暂时降低内存碎片率,但需观察长期运行状态,避免误判为性能提升。

常见问题

升级过程中会发生数据丢失吗?

正常滚动升级不会丢失数据。每次关闭节点前执行 shutdown save 可确保数据持久化,新节点启动后会通过集群同步机制获取最新数据。

客户端需要更新版本吗?

大多数主流客户端无需更新。Redis 6.0 协议向下兼容,但若客户端硬编码了特定版本判断逻辑,可能需要调整。

升级失败如何回滚?

若新节点启动失败,可立即恢复原二进制文件并重启。若数据已发生写入,回滚可能导致数据不一致,建议优先修复新环境而非直接回滚。

参考来源

  • Redis 官方文档,Redis Cluster specification,https://redis.io/docs/latest/develop/interact/programmability/cluster-spec/
  • GitHub Redis 仓库,Redis 6.0 Release Notes,https://github.com/redis/redis/blob/6.0/00-RELEASENOTES