在本文中旨在介绍 跨 AWS 区域
来迁移 ElastiCache Redis 数据的做法,而使用 ElastiCache Global datastores 的功能,是可以考虑的作法之一,本身也提供其他离线(offline)的方式。
前言: 什么是 ElastiCache Global datastores ?
该服务是 ElastiCache 其中一个功能,主要用的灾难备缓,当使用者写入数据至主要区域的 ElastiCache Redis 集群时,会自动且持续同步数据,到多个次要区域的 Redis 集群中,并且提供主备切换的能力。
由于 ElastiCache Global datastores 可以做到持续同步 Redis 集群数据的能力,所以若您有 跨 AWS 区域
来迁移 ElastiCache Redis 数据的需求时,是可以考虑这个作法。
另一个替代方案: 离线(offline) 搬移数据。
若您的前端业务服务,可以安排维护时段的话,也建议您可以考虑使用 离线(offline)
的方式,来做迁移数据的作业。 首先,透过手动份[1]的方式来产生备份的 RDB 档,然后汇出[2]并複制到您目标端的 S3 桶上,最后在目标端帐户/区域底下,指定使用该备份的 RDB 档,来创建新的 Redis 集群[3]。
!!! 这个方式风险最低,容易预估执行时间的长短,也是推荐的作法,但客户端影响时间较长些。
接下来逐一来说明,如何使用 ElastiCache Global datastores 的功能,来做到 跨 AWS 区域
来迁移 ElastiCache Redis 数据的目的。
1. 建立 Global Store:
- 登入 AWS 管理控制台,前往 ElastiCache 服务。
- 选择 ElastiCache Global datastores 选项,然后创建一个新的 Global datastores。
- 指定 ElastiCache Global datastores 的名称,并选择
来源(source)
Redis cluster 资源。
2. 指定目标区域:
- 选择您要将 Redis 丛集迁移到的目标区域。
- 指定新创建 ElastiCache Redis 丛集的名称。
3. 检查次要区域的 Redis 集群配置、及创建
- 检查 Secondary cluster advanced settings 页面上的其他内容。
- Review and create
!!! 当建立完成后,此时就具备 1主 Redis 集群、多从集群
的架构,对提高服务可用性是有帮助的。
### 在来源端 Redis 集群上,来写入数据 ###
$ redis-cli -h source-cluster.abcde.ng.0001.usw2.cache.amazonaws.com
source-cluster.abcde.ng.0001.usw2.cache.amazonaws.com:6379> set key 111
OK
source-cluster.abcde.ng.0001.usw2.cache.amazonaws.com:6379> get key
"111"
### 在次要的区域(Region)的目的地端 Redis 集群上,是可以正常读取数据 ###
$ redis-cli -h target-cluster.xma32s.ng.0001.use1.cache.amazonaws.com
target-cluster.xma32s.ng.0001.use1.cache.amazonaws.com:6379> get key
"111"
target-cluster.xma32s.ng.0001.use1.cache.amazonaws.com:6379>
4. 将目标的 Redis 集群从 ElastiCache Global datastores 移除。
5. 此时目标的 Redis 集群,也会变成为单独存在的 Redis 集群,并且可以直接使用。
!!! 通过以上步骤,您就可以将 ElastiCache Redis 上数据,从一个区域迁移到另一个区域,并且同时保持资料的一致性。
$ redis-cli -h target-cluster.xma32s.ng.0001.use1.cache.amazonaws.com
target-cluster.xma32s.ng.0001.use1.cache.amazonaws.com:6379> set key2 aaa
OK