首页 > 数据库 >【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(scan模式迁移)

【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(scan模式迁移)

时间:2023-01-10 13:00:10浏览次数:39  
标签:实战 scan redis Redis 6379 shake 迁移

在线数据迁移方式

对于大多数场景下的Redis的数据迁移,还是比较推荐大家参考我之前的前两篇文章。

  • 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(在线同步数据)

  • 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移 Redis 数据实战指南(离线同步数据)

scan模式在线数据迁移的场景和原因

但是还有一种常见是前两篇文章无法实现的,就是当云厂商出于种种考虑禁用了Redis的 psync 命令时,前述方案不可用。 对于这种情况可以使用redis-shake的scan模式来进行数据迁移。

scan模式的简单原理

原理是调用scan命令来获取 Redis 中的 key,然后使用 dump 命令获取 key 的内容,最终使用 restore 命令恢复 key 至目的端。

scan模式的局限性

  • 如果某个 key 在迁移过程中一直存在,scan 模式能保证他一定被迁移
  • 如果某个 key 在迁移过程中不是一直存在,scan 模式不保证其一定被迁移
  • 如果某个 key 在迁移过程中被修改,scan 模式不保证修改能同步到对端
  • 可见 scan 模式会有许多缺点,所以推荐 sync 模式,其次 restore 模式。

redis-shake 的 scan 模式来迁移数据案例

使用redis-shake的scan在线迁移操作,主要通过scan.toml文件进行配置和执行迁移操作,如下图所示。

实例信息

单机实例1

  • 地址:ip1
  • 端口:6379
  • 密码:123456

单机实例2

  • 地址:ip2
  • 端口:6379
  • 无密码

集群实例1

  • 地址:
    • 192.168.0.1:6379
    • 192.168.0.2:6379
    • 192.168.0.3:6379
    • 192.168.0.4:6379
  • 密码:123456

集群实例2

  • 地址:
    • 192.168.1.1:6379
    • 192.168.1.2:6379
    • 192.168.1.3:6379
    • 192.168.1.4:6379
  • 密码:123456

源Redis单机实例(1)到目标Redis单机实例(2)

修改 scan.toml,改为如下配置:

type = "scan"
[source]
address = "ip1:6379"
password = "123456"

[target]
type = "standalone"
address = "ip2:6379"
password =
启动 redis-shake:
./redis-shake scan.toml

源Redis单机实例(1)到目标Redis集群实例(2)

修改 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:
./redis-shake scan.toml

源Redis集群实例(1)到目标Redis集群实例(2)

方案1-手动起多个redis-shake,集群1有四个节点:
  • 192.168.0.1:6379
  • 192.168.0.2:6379
  • 192.168.0.3:6379
  • 192.168.0.4:6379

把4个节点当成 4 个单机实例,参照前文部署 4 个 redis-shake 进行数据同步

方案2-借助 cluster_helper.py 启动

脚本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
  • 参数 1 是 redis-shake 可执行程序的路径
  • 参数 2 是配置文件路径

Redis哨兵模式

sentinel 节点,将哨兵拓扑当成普通的主从节点即可,参照单机到单机:A->B配置文件:

  • source 的 address 写源端的 master 或 slave 节点地址,推荐 slave 节点。
  • target 的 address 些目的端的 master 节点地址。

标签:实战,scan,redis,Redis,6379,shake,迁移
From: https://www.cnblogs.com/liboware/p/17039846.html

相关文章

  • 我的新书《Flink大数据分析实战》出版啦
    本书基于Flink1.13.X最新版本编写,作为Flink的入门书,主要使用函数式编程语言Scala进行讲解,知识面比较广,涵盖了当前整个Flink生态系统主流的大数据开发技术。内容全面,以实操案......
  • Redis基本讲解
    前言1.什么是Redis?它主要用来什么的?Redis,英文全称是RemoteDictionaryServer(远程字典服务),是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、K......
  • Redis-单机数据库-数据库键空间
    Redis是一个键值对(key-valuepair)数据库服务器,服务器中的每个数据库都由一个 redis.h/redisDb 结构表示,其中, redisDb 结构的dict 字典保存了数据库中的所有键值对,......
  • Redis的String类型,原来这么占内存
    Redis的String类型,原来这么占内存存一个Long类型这么占内存,Redis的内存开销都花在哪儿了?1、场景介绍假设现在我们要开发一个图片存储系统,要求这个系统能够根据图片......
  • SimpleAdmin手摸手教学之:Redis缓存
    一、说明系统中有很多数据是不会经常修改的,但是读取的频率确很高,所以这时候就需要使用缓存将这些数据缓存起来。本系统采用Redis分布式缓存,将一些基本信息表缓存在内存中,......
  • 迁移学习(IIMT)——《Improve Unsupervised Domain Adaptation with Mixup Training》
    论文信息论文标题:ImproveUnsupervisedDomainAdaptationwithMixupTraining论文作者:ShenYan,HuanSong,NanxiangLi,LincanZou,LiuRen论文来源:arxiv2020论文......
  • Redis-数据结构与对象-对象
    对象Redis并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这个系统包含字符串对象、列表对象、哈希对象、集合对象和有序集合对......
  • Knowage迁移教程
    1.将老机器的webapp目录备份2.老机器的数据库备份3.新机器安装MYSQL4.新机器安装knowage包5.新机器执行汉化6.将老机器的webapp替换到新机器7.将数据库覆盖式的导入到新机器......
  • Redis 数据结构-简单动态字符串
    Redis数据结构-简单动态字符串 无边落木萧萧下,不尽长江滚滚来。 1、简介Redis之所以快主要得益于它的数据结构、操作内存数据库、单线程和多路I/O......
  • PGSQL数据DATA目录迁移到别的机器
    首先还是找一个全新的centos7的电脑去​​https://www.enterprisedb.com/download-postgresql-binaries​​下周linux的压缩包然后二进制安装步骤:groupaddpostgresuserad......