Redis-cli是Redis自带的一个命令行工具,安装Redis后即可直接使用Redis-cli工具。Redis-cli提供了RDB文件导出功能,如果Redis服务不支持获取AOF文件,可以尝试通过Redis-cli获取RDB文件。然后再通过其他工具(如RedisShake)导入到DCS的缓存实例中。如果是需要通过OBS桶将源端备份数据迁移到DCS缓存实例,请参见使用备份文件离线迁移自建Redis。
约束与限制
建议选择业务量较少的时间段进行迁移。
源端为Redis原生集群的数据时,需要针对集群的每个节点分别导出数据,然后逐一导入数据。
前提条件
如果您还没有目标Redis,请先创建目标Redis,具体操作请参考创建实例。
如果您已有目标Redis,则不需要重复创建,为了对比迁移前后数据及预留足够的内存空间,建议在数据迁移之前清空目标实例数据,清空操作请参考清空实例数据。如果没有清空实例数据,数据迁移后,目标Redis与源Redis实例重复的数据迁移后会被覆盖,源Redis没有、目标Redis有的数据会保留。
已创建弹性云主机ECS。
自建的源Redis实例必须放通SYNC命令,否则无法使用Redis-cli导出RDB文件。
导出RDB文件
1. 导出前准备
对于主备或集群实例,数据写入RDB文件有一定的时延,时延策略配置在redis.conf文件中。因此,建议先了解待迁移redis实例的RDB策略配置,然后暂停业务系统并往Redis实例写入满足数量条件的测试key,确保RDB文件为最新生成。
例如,redis.conf中对RDB的默认策略配置如下:
save 900 1 //900秒内有数据变更则写入RDB文件
save 300 10 //300秒内有10条以上数据变更则写入RDB文件
save 60 10000 //60秒内有10000条以上数据变更则写入RDB文件因此,可以参考以上数据写入RDB策略,在停止业务系统向Redis实例写入数据后,主动写入测试数据若干,触发策略并写入RDB文件,确保业务数据均已同步导RDB文件中。
测试数据可以在导入后删除。
说明
如果有某个数据库没有被业务系统使用,可以将测试数据写入该数据库,待导入DCS后,使用flushdb命令清空该库。
单机实例如果不做持久化配置,则RDB文件需要临时生成,导出耗时较主备实例相比稍多一些。
2. 登录弹性云主机。
3. 安装Redis-cli客户端。该操作以客户端安装在Linux系统上为例进行说明。
a. 执行如下命令下载Redis。您也可以安装其他Redis版本。具体操作,请参见Redis官网。
wget http://download.redis.io/releases/redis-5.0.8.tar.gz
b. 执行如下命令,解压Redis客户端源码包。
tar -xzf redis-5.0.8.tar.gz
c. 进入Redis目录并编译Redis客户端源码。
cd redis-5.0.8
cd src
make
4. 使用如下命令导出RDB文件:
redis-cli -h {source_redis_address} -p {port} -a {password} --rdb {output.rdb}
{source_redis_address}为源Redis的连接地址,{port}为源Redis的端口,{password}为源Redis的连接密码,{output.rdb}为RDB文件名。
执行命令后回显"Transfer finished with success.",表示文件导出成功。
上传RDB文件至ECS
为节省传输时间,建议先压缩RDB文件,再将压缩文件(如以SFTP方式)上传到ECS。
ECS需保证有足够的磁盘空间,供数据文件解压缩,同时要与缓存实例网络互通,通常要求相同VPC和相同子网,且安全组规则不限制访问端口。
导入数据
可借助Redis-Shake工具完成数据导入。
VPC内导入RDB文件,平均100w数据(每条数据20字节),大概4~10秒完成。
迁移后验证
数据迁移前如果目标Redis中数据为空,迁移完成后,可以通过以下方式确认数据的完整性:
1. 连接源Redis和目标Redis。连接Redis的方法请参考使用redis-cli连接Redis实例。
2. 输入info keyspace,查看keys参数和expires参数的值。
3. 对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,则表示数据完整,迁移正常。
如果导入不成功,请检查操作步骤,如果是导入命令不正确,建议使用flushall或者flushdb命令清理目标实例中的缓存数据,修改导入命令后重新导入。