Redis集群怎么快速迁移数据_使用redis-shake工具实现跨集群数据同步

阿强大大_2460

阿强大大_2460

2026-04-06

308人浏览

原创

redis-shake 是阿里开源的 redis 数据迁移同步工具,支持 dump/sync/rump 三种模式,可跨集群、版本及部署形态同步,能正确处理 slot 映射、ask/moved 重定向、acl/ssl 等,而原生 redis-cli --rdb 无法替代。

redis集群怎么快速迁移数据_使用redis-shake工具实现跨集群数据同步

redis-shake 是什么,能不能直接替代 dump/rdb 同步

redis-shake 不是 Redis 官方工具,但它是阿里开源的、专为 Redis 数据迁移和同步设计的高可用工具,支持 dump(离线)、sync(实时增量)、rump(从 RDB 恢复)三种模式。它能跨集群、跨版本(如 4.x → 7.x)、跨部署形态(单机 ↔ 集群 ↔ 哨兵)工作,而原生 redis-cli --rdb 或 SAVE/BGSAVE 只能导出全量 RDB,无法处理集群 slot 映射、ASK/MOVED 重定向、密码鉴权等细节。

常见错误现象:redis-cli --rdb 直接连集群任意节点导出 RDB,结果恢复后 key 全部落在一个分片,查询报 MOVED 错误;或因密码/ACL 权限缺失导致连接被拒。

  • redis-shake 会自动识别集群拓扑,按 slot 分片拉取数据,写入目标集群时也严格遵循 slot 分布
  • 支持 auth、user(Redis 6+ ACL)、SSL、Proxy(如 Twemproxy)等真实生产环境配置
  • 不依赖源集群开启 rdb save,对业务影响小;增量同步还能持续 catch up 直到切换窗口

怎么配置 redis-shake 做集群到集群的 sync 同步

核心是两个配置块:source 和 target,必须显式声明为 cluster 类型,并提供完整节点列表(非仅一个入口)。

典型易错点:只填一个源节点地址,redis-shake 会当作单机处理,跳过集群发现逻辑,导致 key 写错 slot;或目标集群密码写在 URL 里(如 redis://:pwd@host:port),但集群模式下部分节点可能返回 NOAUTH —— 正确做法是统一用 auth_password 字段。

  • 源配置中 cluster = true,nodes 列出全部 master 节点(至少一个,推荐全列),例如:["10.0.1.1:7000", "10.0.1.2:7001"]
  • 目标配置同样设 cluster = true,nodes 填目标集群所有 master 地址;若目标启用了 ACL,需配 auth_user = "default" + auth_password = "xxx"
  • 关键开关:write_mode = "sync"(不是 dump),filter.key = "*" 可按需过滤,concurrent 建议设为 8–16,过高反而触发目标集群 OOM command not allowed

同步过程中 key 消失或报 MOVED/ASK 怎么排查

这基本指向 slot 映射失败:源集群的 key 计算出的 slot,在目标集群没有对应 master 节点负责,或节点状态异常(如 failover 中、slot 迁移未完成)。

先确认目标集群健康:redis-cli -c -h target-host -p 6379 cluster nodes 看是否所有 master 的 connected 为 connected,且 slots 范围无重叠或空缺;再检查 redis-shake 日志里是否有 slot xxx not found in target cluster。

  • 源集群做了 slot 迁移但未 finish?redis-shake 会卡住,需等迁移完成再启动
  • 目标集群刚创建,用 redis-cli --cluster create 时没加 --replicas 1 导致只有 master 无 replica?不影响 sync,但影响高可用
  • 目标集群开启了 cluster-require-full-coverage no?务必设为 yes,否则部分 slot 无主时 redis-shake 写入会失败

如何验证同步结果一致且不丢数据

不能只比 key 数量 —— 集群模式下 KEYS * 不可用,且不同节点 key 数天然不等。真正有效的验证是抽样校验 + 增量断点比对。

推荐组合操作:redis-shake 自带 diff 模式(需提前用 dump 模式导出源/目标快照),但更轻量的是用 redis-cli --cluster check 对两边分别跑一致性检查,再人工抽 3–5 个 slot,用 redis-cli -c -h src -p p1 cluster getkeysinslot {slot} 100 拿 key 列表,逐个 GET 比对 value 和 TTL。

  • 重点看带 {} 标签的 key(如 user:{1001}:profile),它们强制落在同一 slot,最容易暴露哈希偏移问题
  • 同步期间新写入的数据,要确认 redis-shake 日志末尾有类似 synced until offset: 123456789,且目标集群 INFO replication 中 master_repl_offset 与之接近(差值
  • 如果业务允许停写,最后 stop write → 等 redis-shake lag 归零 → 执行一次 flushall 清掉残留旧 key → 切流量

最常被忽略的是目标集群的 maxmemory 设置:即使总内存够,单个 shard 内存超限会导致写入静默失败,redis-shake 日志只会报 write error: OOM command not allowed,得挨个查每个 master 的 INFO memory。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
require的用法
require的用法

require的用法有引入模块、导入类或方法、执行特定任务。想了解更多require的相关内容,可以阅读本专题下面的文章。

2023.11.27

1955

6

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

929

5

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.25

2600

5

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.07

357

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4289

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3795

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6892

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

736

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习