当前位置: 首页 > 科技观察

分享如何正确地将AWSRedis迁移到阿里云项目实践

时间:2023-03-20 01:29:55 科技观察

一、背景最近有一个项目需要将AWSredis迁移到阿里云redis。本来想用阿里云的dts实现在线迁移,但是aws限制了自家产品的redis高级命令,不允许用户使用,所以用dts迁移awsredis是不可能的。几经周折,使用下面的方法成功将aws的redis迁移到阿里云的redis。下面分享一下具体的实现过程。二、实施过程1、安装配置AWSCLI(1)安装AWSCLIAmazonLinux(本环境)AWSCLI预装在AmazonLinuxAMI上。要检查当前安装的版本,请使用以下命令:$aws--versionaws-cli/2.4.5Python/3.8.8Linux/4.14.133-113.105.amzn2.x86_64botocore/1.13(2)配置AWSCLIAWSCLI集此信息存储在默认凭据文件中指定的配置文件(设置集合)中。默认情况下,当您运行未明确指定要使用的配置文件的AWSCLI命令时,将使用此配置文件中的信息。$awsconfigureAWS访问密钥ID[无]:******************AWS秘密访问密钥[无]:wJa**************LEKEY默认地区名称[无]:cn-northwest-1默认输出格式[无]:json注意:地区名称请根据您的实际情况填写。目前国内主要有宁夏(cn-northwest-1)和北京(cn-north-1)两个区。2.安装迁移工具redis-shake前提条件目标Redis实例的版本为社区版(4.0或5.0)或企业版(5.0)。Redis-shake简介Redis-shake是阿里云开发的开源Redis数据传输工具。支持分析(decode)、还原(restore)、备份(dump)和同步(syncorrump)Redis数据,易于部署,灵活高效。本例通过Redis-shake的恢复(recovery)方式,将本地RDB文件中的数据恢复到云端数据库Redis,从而实现数据上云。安装Redis-shake1,登录到要安装的Redis-shake机器。2、下载redis-shake文件。wget'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2.0.3.tar.gz'3.解压redis-shake文档。tarxzfredis-shake-v2.0.3.tar.gz4。修改参数文件。该参数是否必填说明示例source.rdb.input为备份文件(RDB文件)的相对路径或绝对路径。请使用分号(;)分隔多个文件。/root/tools/RedisShake/demo.rdbtarget.address是目标Redis实例的连接地址和端口号。连接地址和端口号用冒号(:)分隔。r-bp1wcw2rlw76acc5k.redis.rds.aliyuncs.com:6379target.password_raw是目标Redis实例的账号(有读写权限)和密码。帐号和密码以冒号(:)分隔。testaccount:Rp829dlwakey_exists否当源库中的Key与目标库中的Key相同时,采用的数据写入策略,取值:rewrite:覆盖写入到目标库中。none:默认值,停止运行Redis-shake程序并提示键值冲突。ignore:直接跳过当前迁移的Key,保留目标数据库中的数据,继续进行数据迁移。rewriteparallelNoRedis-shake执行迁移的并发线程数。适当增大该值可以提高同步性能。默认值为32,最小值为1。323.开始迁移为了实现迁移的自动化,写了一个一键迁移脚本。迁移过程介绍:源数据库redis备份。将备份文件复制到S3。从s3下载备份文件到本地。运行Redis-shake程序开始迁移。#!/bin/bashdate=$(date+%Y%m%d%H%M%S)#dumpredis文件awselasticachecreate-snapshot--cache-cluster-iddeviceredis--snapshot-namemyredis${date}睡眠120scopy_status=`awselasticachedescribe-snapshots--cache-cluster-iddeviceredis--snapshot-namemyredis${date}|grep"available"|wc-l`until[$copy_status-eq1]docopy_status=`awselasticachedescribe-snapshots--cache-cluster-iddeviceredis--snapshot-namemyredis${date}|grep"available"|wc-l`sleep5sdone#copyredisfile到s3awselasticache复制快照--source-snapshot-namemyredis${date}--target-snapshot-namemyredis${date}--target-bucketredistmp#从s3下载redisfileget_status=`awselasticachedescribe-snapshots--cache-cluster-iddeviceredis--snapshot-namemyredis${date}|grep"可用"|wc-l`until[$get_status-eq1]doget_status=`awselasticachedescribe-snapshots--cache-cluster-iddeviceredis--snapshot-namemyredis${date}|grep“可用”|wc-l`sleep5sdoneawss3apiget-object--bucketredistmp--keymyredis${date}-0001.rdb./myredis${date}-0001.rdb#恢复到aliyunredissed-i"s/\/root\/redis-shake-v2.0.3\/.*rdb$/\/root\/redis-shake-v2.0.3\/myredis${date}-0001.rdb/g"redis-shake.conf./redis-shake.linux-type=restore-conf=redis-shake.conf解释:日志中出现restore:rdbdone,表示数据恢复完成。此时使用Ctrl+C组合键停止运行Redis-shake,如下图: