一、应用场景说明

1、区域内迁移:

故障处理与容灾:在一个AWS区域内进行ElastiCache的迁移,可以用于故障处理和容灾方案。如果某个区域发生故障,可以快速将ElastiCache实例迁移至另一可用区,确保业务的持续性。

性能优化:在区域内迁移ElastiCache实例可以根据业务需求选取更合适的区域,以减少延迟并提高性能。

2、跨区域迁移:

全球业务扩展:对于全球性的业务应用,在不同地理区域均部署ElastiCache实例,并进行跨区域迁移,有助于提高用户体验,减少访问延迟。

容灾备份:跨区域迁移可以用作灾备和备份方案,确保即使某个AWS区域发生故障,也能够保持业务的持续性。

3、跨账号迁移:

安全隔离:跨账号迁移ElastiCache实例可用于安全隔离业务数据和资源,确保不同团队或合作伙伴之间的数据相互独立。

资源共享:不同账号下的应用可能需要共享资源,跨账号迁移可以帮助实现资源的共享和合作,同时保持数据安全。
在实际应用中,根据业务需求和特定场景,选择合适的迁移方式是非常重要的。AWS ElastiCache提供了灵活的迁移选项,可以根据具体情况选择区域内迁移、跨区域迁移或跨账号迁移,以满足不同应用场景的需求。4、自建redis数据库迁移到elasticache:

高可用性和可靠性:Amazon ElastiCache 提供了自动故障恢复和自动备份功能,可以帮助确保 Redis 实例的高可用性和数据持久性。

扩展性:Amazon ElastiCache 支持简单的缩容和扩容操作,可以根据需求快速调整 Redis 实例的规模,以满足不断增长的应用负载。

安全性:Amazon ElastiCache 提供了密钥管理、VPC 集成、网络隔离等安全功能,可以帮助加强数据安全性。

性能优化:Amazon ElastiCache 可以提供与 AWS 基础设施紧密集成的低延迟、高吞吐量,从而进一步优化应用程序的性能。

监控和警报:Amazon Elastiache 提供了丰富的监控指标和警报功能,可以帮助及时发现和解决问题,确保 Redis 实例的稳定运行。

专业支持:利用 Amazon 的支持服务,可以获得专业的技术支持和咨询,帮助解决 Redis 数据库相关的问题。

二、环境准备:

源数据库:slq-redis-t1

 

测试数据生成脚本:

生成10000条测试数据

#!/bin/bash
# 连接到Redis服务器
REDIS_HOST="slq-redis-t1.j1zoel.ng.0001.use1.cache.amazonaws.com"
REDIS_PORT="6379"
# 生成10000条测试数据并写入Redis
write_test_data() {
    for ((i=1; i<=10000; i++))
    do
        key="key$i"
        value="value$i"
        $REDIS_CLI -h $REDIS_HOST -p $REDIS_PORT SET $key $value
    done
    echo "已生成并成功写入10000条测试数据到Redis"
}
# 调用函数生成测试数据
write_test_data


三、在区域内迁移 ElastiCache Redis 集群

1、创建 ElastiCache for Redis 集群的 ElastiCache 备份

a.了解备份约束条件

b.备份自行设计的集群所产生的性能影响

c、创建备份

2、通过还原备份来创建新的 Redis 集群

注意:此方法可用于将 ElastiCache for Redis 集群迁移到区域内的其他可用区。或者,您可以使用此方法为现有集群开启传输中加密或静态加密。


四、将 ElastiCache Redis 集群迁移到其他区域

1、创建集群备份(同上)

2、在当前区域创建一个s3存储桶并授予 ElastiCache 对 S3 存储桶的访问权限。

Amazon S3 存储桶的名称必须符合 DNS 标准。否则,ElastiCache 无法访问您的备份文件。DNS 合规性规则包括:

  • 名称的长度必须为至少 3 个字符,且不能超过 63 个字符。

  • 名称必须是由句点(.)分隔的一个或多个标签组成的系列,其中每个标签:

    • 以小写字母或数字开头。

    • 以小写字母或数字结尾。

    • 仅包含小写字母、数字和短划线。

  • 名称不能采用 IP 地址格式(例如 192.0.2.0)。

(以下存储桶slq-tag1、slq-t1名称不符合要求,请勿模仿)

如下:

3、将 ElastiCache 备份导出到 S3 存储桶。

验证:

4、在目标区域(ap-southeast-1)创建 S3 存储桶:slq-t1。

5、将备份文件复制到目标区域存储桶中

验证:

6、在目标区域中授予elasticache对该备份文件的读取权限

注意:

{
	"Version": "2012-10-17",
	"Id": "Policy15397346",
	"Statement": [
		{
			"Sid": "Stmt15399483",
			"Effect": "Allow",
			"Principal": {
				"Service": "us-east-1.elasticache-snapshot.amazonaws.com"
			},
			"Action": [
				"s3:GetObject",
				"s3:ListBucket",
				"s3:GetBucketAcl"
			],
			"Resource": [
				"arn:aws:s3:::slq-t1",
				"arn:aws:s3:::slq-t1/*"
			]
		}
	]
}

7、通过s3的备份文件来进行集群播种创建elasticache集群

五、将 ElastiCache Redis 集群迁移到其他账户

1~3、同上

4、在您的目标账户中创建 S3 存储桶。该存储桶与 Redis 集群必须位于同一个区域。(略)

5、将备份文件复制到目标区域存储桶中

参考:

https://repost.aws/zh-Hans/knowledge-center/copy-s3-objects-account

6、使用 AWS CLI 将 .rdb 备份文件从源区域的 S3 存储桶复制到目标区域的 S3 存储桶

aws s3 cp s3://SourceAccountBucketName/BackupName.rdb  s3://DestinationAccountBucketName/BackupName.rdb --acl bucket-owner-full-control  --source-region SourceRegionName --region DestinationRegionName

7、在目标账户中,打开 Amazon S3 控制台并授予 ElastiCache 对 .rdb 文件的读取权限。

8、通过使用 .rdb 文件进行集群播种来创建 ElastiCache for Redis 集群。

六、本地自建redis数据库迁移到elasticache

1、ec2本地创建redis数据库

sudo yum update
sudo amazon-linux-extras install epel
sudo yum install -y redis
sudo systemctl start redis
sudo systemctl enable redis
sudo vi /etc/redis.conf         #可以根据需求修改必要的配置,也可以不改
redis-cli                       #本地可以直接通过redis-cli来进行访问

2、创建测试数据

#!/bin/bash
# 连接到Redis服务器
#REDIS_HOST="slq-redis-t1.j1zoel.ng.0001.use1.cache.amazonaws.com"
REDIS_HOST="localhost"
REDIS_PORT="6379"
# 生成10000条测试数据并写入Redis
write_test_data() {
    for ((i=1; i<=10000; i++))
    do
        key="bosi$i"
        value="aws$i"
        redis-cli -h $REDIS_HOST -p $REDIS_PORT SET $key $value
    done
    echo "已生成并成功写入10000条测试数据到Redis"
}
# 调用函数生成测试数据
write_test_data

3、创建redis备份并获取备份文件

4、将dump.rdb备份文件上传到s3存储桶

aws s3 cp /var/lib/redis/dump.rdb  s3://slq.redis.mv.test/

5、授予 Amazon ElastiCache 对 S3 桶的访问权限

6、授予 ElastiCache 对备份文件的读取访问权限

{
	"Version": "2012-10-17",
	"Id": "Policy15397346",
	"Statement": [
		{
			"Sid": "Stmt15399483",
			"Effect": "Allow",
			"Principal": {
				"Service": "us-east-1.elasticache-snapshot.amazonaws.com"
			},
			"Action": [
				"s3:GetObject",
				"s3:ListBucket",
				"s3:GetBucketAcl"
			],
			"Resource": [
				"arn:aws:s3:::slq.redis.mv.test",
				"arn:aws:s3:::slq.redis.mv.test/*"
			]
		}
	]
}

7、使用 .rdb 文件数据为 ElastiCache 集群设定种子

8、连接测试&&数据验证