tair-opensource / RedisShake

RedisShake is a Redis data processing and migration tool.
https://tair-opensource.github.io/RedisShake/
MIT License
3.69k stars 668 forks source link

数据迁移异常场景处理 #833

Open strongworker opened 2 weeks ago

strongworker commented 2 weeks ago

【说明】 RedisShake版本:v4.1.0

【迁移场景】 源Redis:任意部署架构 目标Redis:Redis Cluster 主备集群架构 操作:源Redis向目标Redis同步

【发生的问题】 目标Redis Cluster主备集群发生主从切换时,RedisShake会报错中断; 报错信息如下: error=[MOVED xxx ip:port]\n\t\t\tRedisShake/internal/writer/redis_standalone_writer.go:116 -> (*redisStandaloneWriter).processReply()\n\t\t\truntime/asm_amd64.s:1598 -> goexit()"

【原因】(仅猜测) RedisShake维护了slot与node的路由关系,当目标Redis发生主从切换时,写入操作可能连接从库操作,导致MOVED问题。

【希望兼容的点】 当发生MOVED问题时,希望RedisShake兼容,刷新路由信息,重试写入操作,而不是中断迁移,感谢!

suxb201 commented 2 weeks ago

不建议长期运行 RedisShake,各种断连机制都不具备,短期运行的话这不是问题。

strongworker commented 2 weeks ago

不建议长期运行 RedisShake,各种断连机制都不具备,短期运行的话这不是问题。

现在的场景是:大数据量迁移,快完成了,出现了这样的场景,要重新执行一遍,耗时太长了。

suxb201 commented 1 week ago

@strongworker 后面会优化下集群的迁移性能,一次迁移应该几十分钟就可以搞定。或者可以提交 PR 优化下这种场景下 Shake 的逻辑。

或许也可以看看 @ikenchina 维护的 https://github.com/mgtv-tech/redis-GunYu 能不能解决问题,我看他们处理了集群拓扑变化的场景。