首页 > 数据库 > > 【Redis 技术探索】「数据迁移实战」
对于大多数场景下的Redis的数据迁移,还是比较推荐大家参考我之前的前两篇文章。
【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(在线同步数据)
【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(离线同步数据)
但是还有一种常见是前两篇文章无法实现的,就是当云厂商出于种种考虑禁用了Redis的 psync 命令时,前述方案不可用。 对于这种情况可以使用redis-shake的scan模式来进行数据迁移。
原理是调用scan命令来获取 Redis 中的 key,然后使用 dump 命令获取 key 的内容,最终使用 restore 命令恢复 key 至目的端。
使用redis-shake的scan在线迁移操作,主要通过scan.toml文件进行配置和执行迁移操作,如下图所示。
修改 scan.toml,改为如下配置:
type = "scan" [source] address = "ip1:6379" password = "123456" [target] type = "standalone" address = "ip2:6379" password =
./redis-shake scan.toml
修改 scan.toml,改为如下配置:
type = "scan" [source] address = "ip1:6379" password = "r-aaaaa:xxxxx" [target] type = "cluster" address = "192.168.0.1:6379" # 这里写集群中的任意一个节点的地址即可,redis-shake可以根据这个ip地址,拉取集群的其他节点的ip和端口信息。 password = "123456"
./redis-shake scan.toml
把4个节点当成 4 个单机实例,参照前文部署 4 个 redis-shake 进行数据同步。
脚本cluster_helper.py方便启动多个 redis-shake 从集群迁移数据,效果等同于方法1。
源端有多少个分片,cluster_helper.py 就会起多少个 redis-shake 进程,所以如果源端分片数较多的时候,需要评估当前机器是否可以承担这么多进程。
cluster_helper.py 异常退出的时候,可能没有正常退出 redis-shake 进程,需要 ps aux | grep redis-shake 检查。
每个 redis-shake 进程的执行日志记录在 RedisShake/cluster_helper/data/xxxxx 中,反馈问题请提供相关日志。
Python 需要 python3.6 及以上版本,安装 Python 依赖:
cd RedisShake/cluster_helper
pip3 install -r requirements.txt
修改 scan.toml:
type = "scan" [source] address = "192.168.0.1:6379" # 集群 C 中任意一个节点地址 password = "r-ccccc:xxxxx" [target] type = "cluster" address = "192.168.1.1:6380" # 集群 D 中任意一个节点地址 password = "r-ddddd:xxxxx"
cd RedisShake/cluster_helper
python3 cluster_helper.py ../redis-shake ../scan.toml
sentinel 节点,将哨兵拓扑当成普通的主从节点即可,参照单机到单机:A->B配置文件:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000523/viewspace-3125554/ ,如需转载,请注明出处,否则将追究法律责任。