亚马逊AWS官方博客

现已推出:Amazon ElastiCache Global Datastore for Redis

内存中的数据存储广泛用于应用程序可扩展性,而开发人员早就认识到,它们在存储频繁访问的数据方面的优势同时体现在易失性和持久性上。诸如 Redis 等的系统有助于将数据库和后端与传入流量解耦,减少了大部分本来要传输给它们的流量,从而降低了用户的应用程序延迟。

显然,管理这些服务器是一项关键任务,无论如何都必须非常小心地保持它们的正常运行。在上一个作业中,我的团队不得不在托管套件中移动一组物理缓存服务器:它们都连着外部电池,要逐个将它们与外部电源断开、拆下来,然后使用办公室手推车 (!) 推到另一个套件,在那里再次进行安装! 完成这一切工作时没有出现任何服务中断,在完成这一系列操作后我们都松了一口气……如果在高流量平台上丢失缓存数据,事情会变得很糟糕。快速。幸运的是,云基础设施更加灵活! 为了帮助最大程度地减少事件发生时的服务中断,我们在适用于 MemcachedRedis 的托管内存中数据存储服务 Amazon ElastiCache 中添加了许多高可用性功能:集群模式,具有自动故障转移功能的多可用区等。

由于 Redis 通常用于为全球用户提供低延迟流量,因此客户告诉我们,他们希望能够在各 AWS 区域之间复制 Amazon ElastiCache 集群。我们听取了他们的意见,着手努力实现这一目标。现在,我们非常高兴地宣布,该复制功能现在可用于 Redis 集群。

介绍 Amazon ElastiCache Global Datastore For Redis

简而言之,Amazon ElastiCache Global Datastore for Redis 允许您将一个区域中的集群复制到多达两个其他区域中的集群。客户这样做通常是为了:

  • 使缓存的数据更接近您的用户,以减少网络延迟,并提高应用程序的响应能力。
  • 如果某个区域部分或完全不可用,则不妨构建灾难恢复功能。

设置全局数据存储非常容易。首先,选择一个集群作为接收来自应用程序的写入的主集群:它可以是新集群,也可以是现有集群,只要它运行 Redis 5.0.6 或更高版本即可。然后,将其他区域中的两个辅助集群相加,它们将接收来自主集群的更新。

此设置适用于除单节点集群以外的所有 Redis 配置:当然,您可以将单节点集群转换为复制组集群,然后将其用作主集群。

最后还有重要的一点,就是仍然可以像往常一样对作为全局数据存储一部分的集群进行修改和调整大小(添加或删除节点、更改节点类型、添加或删除分区、添加或删除副本节点)。

我们来做一个快速演示。

跨区域复制 Redis 集群

我来向您展示如何从头开始构建一个包含三个集群的全局数据存储:主集群将位于 us-east-1 区域,两个辅助集群将分别位于 us-west-1 和 us-west-2 区域。为了简单起见,我将对所有集群使用相同的默认配置:三个 cache.r5.large 节点、多可用区、一个分区。

前往 AWS 控制台,单击“全局数据存储”,然后单击“创建”以创建全局数据存储。系统询问我是要创建一个支持数据存储的新集群,还是想使用现有集群。我选择前者,并创建一个名为 global-ds-1-useast1 的集群。

我单击“下一步”,然后填写托管在 us-west-1 区域中的辅助集群的详细信息。我简单将其命名为 global-ds-1-us-west1

然后,我在 us-west-2 区域中添加另一个辅助集群,名为 global-ds-1-uswest2:我转到“全局数据存储”,单击“添加区域”,然后填写集群详细信息。

过了一会儿,这三个集群都启动了,并均已与全局数据存储关联。

使用在托管于 us-east-1 区域中的 Amazon Elastic Compute Cloud (EC2) 实例上运行的 redis-cli 客户端,我可以快速连接到集群终端节点,并检查其是否确实可以正常运行。

[us-east-1-instance] $ redis-cli -h $US_EAST_1_CLUSTER_READWRITE
> ping
PONG
> set paris france
OK
> set berlin germany
OK
> set london uk
OK
> keys *
1) "london"
2) "berlin"
3) "paris"
> get paris
"france"

看起来不错。现在,我们使用托管在 us-west-1 区域中的 EC2 实例,检查我们存储在主集群中的数据是否已复制到 us-west-1 辅助集群中。

[us-west-1-instance] $ redis-cli -h $US_WEST_1_CLUSTER_READONLY
> keys *
1) "london"
2) "berlin"
3) "paris"
> get paris
"france"

很好。现在,让我们在主集群上添加更多数据……

> hset Parsifal composer "Richard Wagner" date 1882 acts 3 language "German"
> hset DonGiovanni composer "W.A.Mozart" date 1787 acts 2 language "Italian"
> hset Tosca composer "Giacomo Puccini" date 1900 acts 3 language "Italian"

……并尽快检查辅助集群。

> keys *
1) "DonGiovanni"
2) "london"
3) "berlin"
4) "Parsifal"
5) "Tosca"
6) "paris"
> hget Parsifal composer
"Richard Wagner"

这个过程很快:当我切换到另一个终端并运行命令时,新数据已经存在了。这并不奇怪,因为跨区域流量的典型网络延迟范围为 60 毫秒至 200 毫秒,具体取决于区域。

现在,如果托管在 us-east-1 中的主集群出了问题,会发生什么情况? 那我们可以轻松地将其中一个辅助集群升级为具有完整的读/写功能。

为了达到更好的效果,我还从全局数据存储中删除了 us-east-1 集群。完成此操作后,全局数据存储将如下所示。

现在,使用 us-west-1 区域中的 EC2 实例,连接到集群的读/写终端节点,我可以添加更多数据……

[us-west-1-instance] $ redis-cli -h $US_WEST_1_CLUSTER_READWRITE
> hset Lohengrin composer "Richard Wagner" date 1850 acts 3 language "German"

……并检查是否已将其复制到 us-west-2 集群。

[us-west-2-instance] $ redis-cli -h $US_WEST_2_CLUSTER_READONLY
> hgetall Lohengrin
1) "composer"
2) "Richard Wagner"
3) "date"
4) "1850"
5) "acts"
6) "3"
7) "language"
8) "German"

全部都在。全局数据存储使得跨区域复制 Amazon ElastiCache 数据变得非常容易!

现已推出!

这个新的全局数据存储功能现已在下列区域推出:美国东部(弗吉尼亚北部)美国东部(俄亥俄)美国西部(加利福尼亚北部)美国西部(俄勒冈)亚太地区(首尔)亚太地区(悉尼)亚太地区(新加坡)亚太地区(东京)欧洲(法兰克福)欧洲(爱尔兰)欧洲(伦敦)。试一试吧,如果您有任何反馈,请在 Amazon ElastiCache 的 AWS 论坛上或通过您常用的 AWS Support 联系方式发送给我们。

Julien