分享AWS的Redis如何正确迁移至阿里云项目实践

数据库 Redis
本案例通过使用Redis-shake的restore(恢复)模式,将本地RDB文件中的数据恢复至云数据库Redis,从而实现数据迁移上云。

一、背景

最近项目上有一个需求,需要把aws的redis迁移至阿里云的redis,本来是想着用阿里云的dts实现在线迁移,但是aws对自己产品的redis高级命令作了限制,不允许用户使用,所以无法实现用dts迁移aws的redis。经过一番曲折之后,用下面的方法成功实现了aws的redis迁移至阿里云的redis。下面分享一下具体实现的过程。分享AWS的redis如何正确迁移至阿里云项目实践

二、实施过程

1、安装配置AWS的CLI

(1)安装AWS CLI

Amazon Linux(本环境) AWS CLI 预安装在 Amazon Linux AMI 上。

检查当前安装的版本,请使用以下命令:

$ aws --version
aws-cli/2.4.5 Python/3.8.8 Linux/4.14.133-113.105.amzn2.x86_64 botocore/1.13

(2)配置AWS CLI

AWS CLI 将此信息存储在文件中指定的配置文件(设置集合)default中 credentials。默认情况下,当您运行未明确指定要使用的配置文件的 AWS CLI 命令时,将使用此配置文件中的信息。

$aws configure
AWS Access Key ID [None]: ***************
AWS Secret Access Key [None]: wJa***************LEKEY
Default region name [None]: cn-northwest-1
Default output format [None]: json

注:regoin name根据自己的实际情况填写,目前国内主要有宁夏(cn-northwest-1)、北京(cn-north-1)两个区。

2、安装迁移工具redis-shake

前提条件

目标Redis实例的版本社区版(4.0或5.0版本)或企业版(5.0版本)

Redis-shake介绍

Redis-shake是阿里云自研的开源Redis数据传输工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)和同步(sync或rump),易于部署,灵活高效。本案例通过使用Redis-shake的restore(恢复)模式,将本地RDB文件中的数据恢复至云数据库Redis,从而实现数据迁移上云。

安装Redis-shake

1、登陆待安装的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文件。

tar xzf redis-shake-v2.0.3.tar.gz

4、修改参数文件。

参数

是否必填

说明

示例

source.rdb.input

备份文件(RDB文件)的相对路径或绝对路径。多个文件请使用英文分号(;)分隔。

/root/tools/RedisShake/demo.rdb

target.address

目标Redis实例的连接地址与端口号,连接地址和端口号之间使用英文冒号(:)分隔。

r-bp1wcw2rlw76acc5k.redis.rds.aliyuncs.com:6379

target.password_raw

目标Redis实例的账号(需具备读写权限)及其密码,账号和密码之间使用英文冒号(:)分隔。

testaccount:Rp829dlwa

key_exists

当源库中的Key与目标库中的Key相同时,采取的数据写入策略,取值:rewrite:覆盖写入至目标库。none:默认值,停止运行Redis-shake程序并提示冲突的Key。ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移。

rewrite

parallel

Redis-shake执行迁移的并发线程数,适当调大该值可提高同步性能。默认值为32,最小值为1。

32

3、开始执行迁移

为了实现迁移的自动化,写了一个一键迁移脚本。

迁移流程简介:

  • 源库redis备份。
  • 把备份文件复制至S3。
  • 从s3下载备份文件至本地。
  • 运行Redis-shake程序,开始执行迁移。
#!/bin/bash
date=$(date +%Y%m%d%H%M%S)
#dump redis file
aws elasticache create-snapshot --cache-cluster-id deviceredis --snapshot-name myredis${date}
sleep 120s
copy_status=`aws elasticache describe-snapshots --cache-cluster-id deviceredis --snapshot-name myredis${date} |grep "available" |wc -l`
until [ $copy_status -eq 1 ]
do
copy_status=`aws elasticache describe-snapshots --cache-cluster-id deviceredis --snapshot-name myredis${date} |grep "available" |wc -l`
sleep 5s
done
#copy redisfile to s3
aws elasticache copy-snapshot --source-snapshot-name myredis${date} --target-snapshot-name myredis${date} --target-bucket redistmp
#download redisfile from s3
get_status=`aws elasticache describe-snapshots --cache-cluster-id deviceredis --snapshot-name myredis${date} |grep "available" |wc -l`
until [ $get_status -eq 1 ]
do
get_status=`aws elasticache describe-snapshots --cache-cluster-id deviceredis --snapshot-name myredis${date} |grep "available" |wc -l`
sleep 5s
done
aws s3api get-object --bucket redistmp --key myredis${date}-0001.rdb ./myredis${date}-0001.rdb
#restore to aliyun redis
sed -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: rdb done表示数据恢复完成,此时使用Ctrl+C组合键停止运行Redis-shake。如下图所示:

分享AWS的redis如何正确迁移至阿里云项目实践

责任编辑:姜华 来源: 今日头条
相关推荐

2015-03-11 10:01:31

2015-03-12 10:26:41

2019-04-10 09:00:23

AWSOracle数据库

2019-06-20 11:11:19

太古可口可乐AWS

2022-09-16 13:26:49

云计算云迁移数据

2020-02-04 14:25:29

云迁移云计算云平台

2020-11-03 10:50:52

云迁移云开发云计算

2016-03-30 11:31:30

AWS云环境

2019-11-27 10:55:36

云迁移云计算云平台

2015-02-13 18:43:34

Windows Azu阿里云迁移

2015-05-19 09:53:41

AWS漏洞管理云漏洞管理

2023-02-07 15:33:16

云迁移数据中心云计算

2013-07-29 09:29:13

PaaS云IaaS云管理

2022-12-12 16:37:31

云迁移云计算IaaS

2021-12-06 16:06:39

云联络中心云迁移云平台

2016-10-26 16:44:44

WatchfinderAWS云计算

2015-10-10 09:50:26

AWS云迁移云迁移工具

2012-11-19 10:35:18

阿里云云计算

2018-06-12 16:04:30

2013-08-01 09:29:43

云计算环境APP云计算
点赞
收藏

51CTO技术栈公众号