迁移介绍
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并行处理导出任务。
说明:
如果安装了其他版本,命令格式可能稍有差异,具体可查看相关的帮助。
Redis-port工具的导入导出命令中,密码参数不支持某些特殊字符(如:@#),如果遇到连接信息(密码、Redis地址和端口)解析失败,请先修改密码,临时去掉密码中的特殊字符。
导出Redis源生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入,具体参考源Redis迁移到集群实例中有哪些限制和注意事项?。
Redis-port工具低版本(redis-port-v2.0-beta-go1.9.5及更早版本)对有序集合(sorted set)数据迁移的支持不够好,导入后将变成无序集合(set)数据。
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
为节省传输时间,请先压缩RDB文件再传输。
将压缩文件(如以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命令清理实例中的缓存数据,并重新导入。
------------------------------
原文地址:https://support.huaweicloud.com/migration-dcs/dcs-migration-0312012.html
来源:oschina
链接:https://my.oschina.net/u/4294880/blog/4277157