对于大多数场景下的Redis的数据迁移,还是比较推荐大家参考我之前的前两篇文章.
【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(在线同步数据)
【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(离线同步数据)
但是还有一种常见是前两篇文章无法实现的,就是当云厂商出于种种考虑禁用了Redis的 psync 命令时,前述方案不可用. 对于这种情况可以使用redis-shake的scan模式来进行数据迁移.
原理是调用scan命令来获取 Redis 中的 key,然后使用 dump 命令获取 key 的内容,最终使用 restore 命令恢复 key 至目的端.
如果某个 key 在迁移过程中一直存在,scan 模式能保证他一定被迁移
如果某个 key 在迁移过程中不是一直存在,scan 模式不保证其一定被迁移
如果某个 key 在迁移过程中被修改,scan 模式不保证修改能同步到对端
可见 scan 模式会有许多缺点,所以推荐 sync 模式,其次 restore 模式.
使用redis-shake的scan在线迁移操作,主要通过scan.toml文件进行配置和执行迁移操作,如下图所示.
单机实例1地址:ip1
无密码
修改 scan.toml,改为如下配置:
type = "scan"
[source]
address = "ip1:6379"
password = "123456"
[target]
type = "standalone"
address = "ip2:6379"
password =
./redis-shake scan.toml
type = "scan"
[source]
address = "ip1:6379"
password = "r-aaaaa:xxxxx"
[target]
type = "cluster"
address = "192.16⑧0.1:6379" # 这里写集群中的任意一个节点的地址即可,redis-shake可以根据这个ip地址,拉取集群的其他节点的ip和端口信息.
password = "123456"
./redis-shake scan.toml
脚本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 中,反馈问题请提供相关日志.
cd RedisShake/cluster_helper
pip3 install -r requirements.txt
修改 scan.toml:
type = "scan"
[source]
address = "192.16⑧0.1:6379" # 集群 C 中任意一个节点地址
password = "r-ccccc:xxxxx"
[target]
type = "cluster"
address = "192.16⑧1.1:6380" # 集群 D 中任意一个节点地址
password = "r-ddddd:xxxxx"
cd RedisShake/cluster_helper
python3 cluster_helper.py ../redis-shake ../scan.toml
参数 1 是 redis-shake 可执行程序的路径
B配置文件:
source 的 address 写源端的 master 或 slave 节点地址,推荐 slave 节点.
target 的 address 些目的端的 master 节点地址.
以上就是土嘎嘎小编为大家整理的【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南_scan模式迁移)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!