Redis作为最常用的内存数据库,在现代化应用中扮演着举足轻重的角色,同时随着云计算的普及云上应用常常使用托管的Redis服务。当需要迁移云上的应用时,Redis云服务的迁移也是非常重要的一环,云服务厂商的Redis服务源数据库并未开放 sync 或 psync 复制权限,无法通过常用的数据库传输服务进行Redis数据迁移。
redis-shake 是一款开源的 Redis 数据迁移工具,可以通过 Redis 数据库中的 RDB 备份文件实现离线数据恢复或将源 Redis 数据库全量离线迁移至目标 Redis 数据库中。本方案采用开源的redis-shake工具,把AWS云上的Elasticache Redis集群中的数据迁移到火山引擎Redis服务中。
- Redis源数据库 :AWS Elasticache Redis 4.0 cache.t3.small 1分片2节点实例。
- Redis目标数据库:火山引擎 Redis 5.0集群版实例, 1GiB * 2分片 * 2节点规格。
- 在火山引擎上创建一台ECS云服务器,参考配置可以使用4C8G 系统盘 40GiB centos 7.6 并绑定公网EIP
- 从Github上下载redis-shake组件,若下载速度比较慢,可以使用如下链接
wget https://nanshan-bucket.tos-cn-beijing.volces.com/Software%2Fredis-shake-v2.0.3.tar.gz
- redis-shake具体配置方式参考官网指导 https://www.volcengine.com/docs/6293/78099
-
在AWS创建要备份Redis RDB备份文件的 S3存储桶,也可以复用现有S3存储桶。
-
设置S3存储桶的访问权限使得Elasticache Redis服务可以将备份文件导出到存储桶中
- 设置存储桶屏蔽公共访问权限
- 存储桶的ACL访问控制列表中新增一个被授权实体 540804c33a284a299d2547575ce1010f2312ef3da9b3a053c8bc45bf233e4353 的并赋予对象和存储桶的读写权限。
- 在Elasticache控制台中备份Redis数据
- Elasticache控制台上将刚刚备份的Redis RDB文件复制到创建的S3存储桶中
详细操作步骤可参考AWS官方文档 https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/backups-exporting.html#backups-exporting-procedures
-
将存储桶中的RDB备份文件导入到部署redis-shake的火山引擎ECS中
- 方式一(建议):将AWS S3存储桶中的Redis RDB文件生成一个预签名url地址,在火山引擎的ECS中用wget 预签名url命令公网下载
-
方式二:将AWS S3存储桶中的Redis RDB文件设置为公共读,在火山引擎的ECS中用wget url命令公网下载备份文件。
-
方式三:对存放RDB文件的存储桶设置一个 AKSK访问密钥,在火山引擎ECS上安装AWS CLI工具,配置AKSK后使用AWS S3 CP命令公网下载备份文件。
-
方式四:将AWS S3存储桶中的RDB文件导入到AWS EC2中,火山ECS使用rsync命令通过VPN下载AWS EC2中的备份文件。
-
方式五:通过火山引擎DMS服务把S3存储桶中的RDB文件导入到火山TOS存储桶中,火山ECS从TOS存储桶中下载备份文件。
-
修改redis-shake.conf配置文件 由于本次是导入,所以只修改了该文件下以下项
source.rdb.input = /opt/rdb_file/newback-0001.rdb //备份文件在ECS盘中的文件路径
target.address = address : port //填写火山引擎redis服务的访问域名和端口
target.password_raw = xxxxx
- 执行redis-shake命令恢复数据
./redis-shake.linux -type=restore -conf=redis-shake.conf
以上为使用redis-share工具迁移AWS Elasticache Redis数据的操作步骤,除了AWS上的Redis服务外其他公有云上的Redis服务也可以参考以上步骤进行跨云迁移。