文档首页 > > 数据迁移指南> 迁移操作> 使用Redis-port迁移

使用Redis-port迁移

分享
更新时间: 2019/07/25 GMT+08:00

迁移介绍

Redis-port是一款开源的数据批量传输工具,主要用于Redis节点间的数据库同步,该工具具备以下功能:

  • dump

    生成缓存快照,将缓存数据导出为rdb文件。

  • decode

    解析rdb文件,查看数据分布情况。

  • restore

    将rdb文件恢复(导入)到实例中。

  • sync

    将Redis实例中的数据同步到另一个Redis实例中。

适宜场景

通过Redis-port导入整库,需要能够获取到RDB文件,适宜以下场景:

  • “数据中心自建Redis服务”迁移到“DCS缓存实例”
  • “华为云自建Redis服务”迁移到“DCS缓存实例”

本文主要介绍基于Redis-port v2.0-beta版本(linux)如何从用户自建Redis迁移到华为云DCS中。

步骤1:安装Redis-port

下载和解压工具,可直接使用,无需编译。

在执行导出和导入操作的服务器上都需要安装Redis-port。

wget https://github.com/CodisLabs/redis-port/releases/download/v2.0-beta/redis-port-v2.0-beta-go1.10.1-linux.tar.gz

tar -xvf redis-port-v2.0-beta-go1.10.1-linux.tar.gz

步骤2:导出数据

redis-dump -n 3 -m {password}@{source-redis-host}:{port} -o {outputfile.rdb}

注意,参数-n表示多个CPU并行处理导出任务。

说明:
  1. 如果安装了其他版本,命令格式可能稍有差异,具体可查看相关的帮助。
  2. Redis-port工具的导入导出命令中,密码参数不支持某些特殊字符(如:@#),如果遇到连接信息(密码、Redis地址和端口)解析失败,请先修改密码,临时去掉密码中的特殊字符。
  3. 导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入,具体参考源Redis迁移到集群实例中有哪些限制和注意事项?
  4. Redis-port工具低版本(redis-port-v2.0-beta-go1.9.5及更早版本)对有序集合(sorted set)数据迁移的支持不够好,导入后将变成无序集合(set)数据。
  5. DCS的Redis 4.0/5.0版本实例,不支持SYNC,不能使用此命令导出为RDB文件,主备实例如需本地备份,请从控制台的备份恢复功能模块中下载RDB文件。

参数说明:

root@heru-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-dump --help
Usage:
        redis-dump [--ncpu=N] (--master=MASTER|MASTER) [--output=OUTPUT] [--aof=FILE]
        redis-dump  --version
 
Options:
        -n N, --ncpu=N                    Set runtime.GOMAXPROCS to N.
        -m MASTER, --master=MASTER        The master redis instance ([auth@]host:port).
        -o OUTPUT, --output=OUTPUT        Set output file. [default: /dev/stdout].
        -a FILE, --aof=FILE               Also dump the replication backlog.
 
Examples:
        $ redis-dump    127.0.0.1:6379 -o dump.rdb
        $ redis-dump    127.0.0.1:6379 -o dump.rdb -a
        $ redis-dump -m passwd@192.168.0.1:6380 -o dump.rdb -a dump.aof

实测演示:

root@heru-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-dump -n 3 -m Heru+123@192.168.0.196:6379 -o save196.rdb
2018/03/26 09:10:28 dump.go:68: [INFO] dump: master = "Heru+123@192.168.0.196:6379", output = "save196.rdb", aoflog = ""
2018/03/26 09:10:29 dump.go:111: [INFO] dump: runid = "a62dda896a855aef4a5429fd36fc4268882bc715", offset = 204541
2018/03/26 09:10:29 dump.go:112: [INFO] dump: rdb file = 46721058 (44.56mb)
2018/03/26 09:10:29 dump.go:151: [INFO] dump: (w,a) = (rdb,aof)
2018/03/26 09:10:29 dump.go:181: [INFO] dump: rdb = 46721058 - [100.00%]   (w,a)=(46721058,0)  ~  (44.56mb,0)
2018/03/26 09:10:29 dump.go:185: [INFO] dump: done
root@heru-nodelete:~/port/redis-port-v2.0-alpha-go1.9.2-linux#

步骤3:数据传输到云上ECS

  1. 为节省传输时间,请先压缩RDB文件再传输。
  2. 将压缩文件(如以SFTP方式)上传到华为云ECS。
说明:

ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同VPC和相同子网,且安全组规则不限制访问端口。安全组设置请参考如何选择和配置安全组

步骤4:导入数据

redis-restore -n {N} -i {outputfile.rdb} -t {password}@{dcs_instance_address}:{port} [--unixtime-in-milliseconds="yyyy-MM-dd hh:mm:ss"] [--db={DB_number}]

注意参数db,表示可以单独导入文件中的指定DB编号里的缓存数据。-n表示允许多个CPU并行处理数据导入。

参数说明:

root@heru-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore  --help
Usage:
        redis-restore [--ncpu=N] [--input=INPUT|INPUT] --target=TARGET [--aof=FILE] [--db=DB] [--unixtime-in-milliseconds=EXPR]
        redis-restore  --version
 
Options:
        -n N, --ncpu=N                    Set runtime.GOMAXPROCS to N.
        -i INPUT, --input=INPUT           Set input rdb encoded file.
        -t TARGET, --target=TARGET        The target redis instance ([auth@]host:port).
        -a FILE, --aof=FILE               Also restore the replication backlog.
        --db=DB                           Accept db = DB, default is *.
        --unixtime-in-milliseconds=EXPR   Update expire time when restoring objects from RDB.
 
Examples:
        $ redis-restore    dump.rdb -t 127.0.0.1:6379
        $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --aof dump.aof --db=1
        $ redis-restore             -t 127.0.0.1:6379 --aof dump.aof
        $ redis-restore             -t 127.0.0.1:6379 --db=0
        $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="@209059200000"       // ttlms += (now - '1976-08-17')
        $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="+1000"               // ttlms += 1s
        $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="-1000"               // ttlms -= 1s
        $ redis-restore -i dump.rdb -t 127.0.0.1:6379 --unixtime-in-milliseconds="1976-08-17 00:00:00" // ttlms += (now - '1976-08-17')

实测演示:

root@heru-nodelete:~/port/redis-port-v2.0-beta-go1.10.1-linux# ./redis-restore -i save196.rdb -t Heru+123@192.168.0.171:6379
2018/03/26 09:15:33 restore.go:70: [INFO] restore: input = "save196.rdb", aoflog = "" target = "Heru+123@192.168.0.171:6379"
2018/03/26 09:15:33 restore.go:126: [INFO] restore: (r,f,s/a,f,s) = (rdb,rdb.forward,rdb.skip/aof,rdb.forward,rdb.skip)
2018/03/26 09:15:34 restore.go:155: [INFO] restore: size = 46721058 - [ 49.94%,  0.00%]   (r,f,s/a,f,s)=(23330816,0,599496/0,0,0)     ~  (22.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [ 99.31%,  0.00%]   (r,f,s/a,f,s)=(46399488,12558,1179884/0,0,0)    ~  (44.25mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:155: [INFO] restore: size = 46721058 - [100.00%,  0.00%]   (r,f,s/a,f,s)=(46721058,20000,1179884/0,0,0)    ~  (44.56mb,-,-/0,-,-)
2018/03/26 09:15:35 restore.go:159: [INFO] restore: done
root@heru-nodelete:~/port/redis-port-v2.0-alpha-go1.9.2-linux# 

步骤5:迁移后验证

数据导入成功后,请连接DCS缓存实例,通过info命令,确认数据是否已按要求成功导入。

如果导入不成功,需要分析原因,修正导入语句,然后使用flushall或者flushdb命令清理实例中的缓存数据,并重新导入。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区