社区编辑申请
注册/登录
分享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-10-10 09:50:26

AWS云迁移云迁移工具

2018-11-27 16:11:01

阿里云Redis数据库

2021-01-26 07:11:26

2017-10-17 14:05:52

2016-03-30 11:31:30

2016-07-08 14:02:29

2015-03-05 10:43:24

阿里云Azure迁移

2017-08-23 10:28:01

AWS云安全服务

2013-09-09 09:36:34

AzureAWS云服务

2015-10-09 13:45:52

AWSSnowball

2016-12-07 13:41:32

AWS混合云云功能

2015-06-19 07:30:35

2020-09-16 12:04:30

AWS数据库

2017-10-18 14:38:32

AWS备份灾难

2020-08-12 16:57:50

数据库亚马逊云科技

2015-07-10 10:00:24

2016-05-11 09:18:21

AWS云数据仓库Redshift

2015-08-10 14:11:48

亚马逊AWS中国Amazon S3

2017-08-01 17:06:34

AWS云计算云超能

2016-02-01 16:56:13

AWS技术峰会AWS Summit2

同话题下的热门内容

面试官:Redis 大 Key 要如何处理?

编辑推荐

几款开源的图形化Redis客户端管理软件推荐Redis内存淘汰策略,看这一篇就够了!Redis 的默认端口为啥是 6379 ?Redis集群的5种使用方式,各自优缺点分析Redis为什么这么快?一文深入了解Redis内存模型!
我收藏的内容
点赞
收藏

51CTO技术栈公众号