redis 数据迁移

redis 数据迁移

常见redis迁移工具

本次迁移主要是用到了redis-shake,本文以redis-shake来重点介绍迁移redis哨兵模式

Redis-shake

redis-shake是阿里云自研的开源工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)、同步(sync/rump)。在sync模式下,redis-shake使用SYNC或PSYNC命令将数据从源端Redis同步到目的端Redis,支持全量数据同步和增量数据同步,增量同步在全量同步完成后自动开始。

功能介绍:

  • 备份dump:将源redis的全量数据通过RDB文件备份起来。
  • 解析decode:对RDB文件进行读取,并以json格式解析存储。
  • 恢复restore:将RDB文件恢复到目的redis数据库。
  • 同步sync: 支持源redis和目的redis的数据同步,支持全量和增量数据的迁移。支持单节点、主从版、集群版之间的互相同步。需要注意的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点。
  • 同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。

redis-shark安装

软件下载地址 。软件解压缩后就可使用。

1
2
3
4
5
6
7
8
9
10
11
#安装redis-shake
wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.2-20200506/redis-shake-v2.0.2.tar.gz
tar -zxvf redis-shake-v2.0.2.tar.gz
mv redis-shake-v2.0.2 /usr/local/redis-shake

#环境变量
echo 'export PATH=$PATH:/usr/local/redis-shake'>>/etc/profile
source /etc/profile

#查看版本
./redis-shake.linux -version

redis-shake模式介绍

  • dump模式 : 将云数据库Redis版实例中的数据备份到RDB文件中。
  • decode模式: decode实现对RDB文件进行读取,并以json格式解析存储。
  • restore模式: restore模式可将RDB文件恢复到目的redis数据库。
  • sync模式: sync模式将某Redis数据迁移至其它Redis集群。
  • rump模式: rump模式采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。

redis-shake –conf={配置文件地址} –type={模式:sync/dump等} 模式需要与配置文件中的source target对应。模式为sync, restore, dump, decode, rump其中之一,全量+增量同步请选择sync。mac下请使用redis-shake.darwin,windows请用redis-shake.windows

redis-shake配置

如何进行配置 https://github.com/alibaba/RedisShake/wiki/
redis-shake迁移 https://help.aliyun.com/document_detail/111066.html

sync模式参数

https://help.aliyun.com/document_detail/111066.html

在sync模式下,redis-shake使用SYNC或PSYNC命令将数据从源端Redis同步到目的端Redis,支持全量数据同步和增量数据同步,增量同步在全量同步完成后自动开始。

sync模式参数说明

参数说明示例
source.type支持standalone,sentinel,cluster和proxycluster
source.address源Redis的连接地址与服务端口。xxx.xxx.1.10:6379
source.password_raw源Redis的连接密码。SourcePass233
target.address目的Redis的连接地址与服务端口。xx.redis.rds.aliyuncs.com:6379
target.password_raw目的Redis的连接密码。TargetPass233
rewrite如果目的Redis有相同的key,是否覆盖,可选值:true(覆盖);false(不覆盖)。默认为true,为false且存在数据冲突则会出现异常提示。
target.db待迁移的数据在目的Redis中的逻辑数据库名。当该值设置为-1时,源Redis和目的Redis中的名称相同-1
parallelRDB文件同步中使用的并发线程数,用于提高同步性能。最小值为1,推荐值为64。

执行迁移

本次使用redis-shake迁移RDB文件内的数据,redis是哨兵模式。使用redis-shake的restore模式将自建Redis的备份文件内的数据迁移到一个自建Redis上。在新的环境搭建一套一样的redis哨兵模式。

创建配置文件

1
2
3
4
5
6
7
cat > redis-shake.conf<<EOF
source.rdb.input = /opt/redis/data/6379.rdb
target.address = 172.33.66.17:6379
target.password_raw = 123456
target.db = -1
rewrite = true
EOF

redis-shake restore模式参数说明

参数说明示例
source.rdb.input备份文件(RDB文件)的路径。/opt/redis/data/6379.rdb
target.address目的Redis的连接地址与端口号。172.33.66.17:6379
target.password_raw目的Redis的连接密码。123456
target.db设置待迁移的数据在目的Redis中的逻辑数据库名,默认值为-1。
例如,要将所有数据迁移到目的Redis中的DB10,则需将此参数的值设置为10。当该值设置为-1时,逻辑数据库名在源Redis和目的Redis中的名称相同,即源Redis中的DB0将被迁移至目的Redis中的DB0,DB1将被迁移至DB1,以此类推。-1
rewrite如果目的Redis有与RDB文件中相同的key,是否覆盖,可选值:true(覆盖),false(不覆盖)true
parallelRDB文件同步中使用的并发线程数,用于提高同步性能。64

使用如下命令进行迁移

1
redis-shake.linux -type=restore -conf=redis-shake.conf

img

说明: 日志中出现restore: rdb done表示数据恢复完成,此时按Ctrl+C退出执行即可。

参考:
https://help.aliyun.com/document_detail/116378.html?
https://mp.weixin.qq.com/s/ae7Lmi-h4AzwO18I-PcfWg

验证

登录新的redis 服务器,查看keys 是否一致。在登录redis从查看数据是否同步

坚持原创技术分享,您的支持将鼓励我继续创作!
0%