我可以在不停机的情况下升级 Elasticache Redis 引擎版本吗?

Can I upgrade Elasticache Redis Engine Version without downtime?

我在 AWS 文档中找不到任何关于修改 Redis 引擎版本是否会导致停机的信息。除了在维护 window.

中执行之外,它没有解释升级是如何发生的

通过 AWS 控制台升级生产 Elasticache Redis 实例是否安全,不会丢失数据或停机?

注意:我们使用的客户端库与所有版本的 Redis 兼容,因此应用程序应该不会注意到升级。

Changing a cache engine version is a disruptive process which clears all cache data in the cluster. **

我现在不知道您的特定应用程序的要求。但是如果您不能丢失数据并且需要进行主要版本升级,建议迁移到新集群而不是升级当前设置。

** http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/VersionManagement.html

如上文 Will 所述,AWS 答案已更改。从理论上讲,您可以在不停机的情况下完成。参见:

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/VersionManagement.html

关键点在于停机时间和对现有使用的影响:

The Amazon ElastiCache for Redis engine upgrade process is designed to make a best effort to retain your existing data and requires successful Redis replication.

...

For single Redis clusters and clusters with Multi-AZ disabled, we recommend that sufficient memory be made available to Redis as described in Ensuring That You Have Enough Memory to Create a Redis Snapshot. In these cases, the primary is unavailable to service requests during the upgrade process.

...

For Redis clusters with Multi-AZ enabled, we also recommend that you schedule engine upgrades during periods of low incoming write traffic. When upgrading to Redis 5.0.5 or above, the primary cluster continues to be available to service requests during the upgrade process. When upgrading to Redis 5.0.4 or below, you may notice a brief interruption of a few seconds associated with the DNS update.

这里没有任何保证,因此如果失败,您将不得不自行决定丢失数据的风险

我不确定答案是否仍然相关,因为这个问题是将近 7 年前提出的,但有一些事情。

更改节点类型或引擎版本是一个修改操作,您的数据在 Elasticache 集群上保持不变。我相信有一个文档提到了(如果我找到它,我会在这里 link 它)发生 Elasticache 修改的过程。 本质上,Elasticache 在后端启动一个新节点,其中包含您所做的修改并将您的数据复制到该节点。假设您所做的修改是将引擎版本从 5.x 更改为 6.x -

  1. Elasticache 将在后端使用引擎 6.x 启动新的 Redis 节点。
  2. 当节点启动时,Elasticache 将从 5.x 节点读取密钥并将数据复制到 6.x
  3. 复制完成后,Elasticache 将更改集群端点的 DNS 记录。

因此,根据您应用程序的 DNS 缓存 TTL 配置,会有一些停机时间。例如,您的应用程序保留 DNS 缓存 300 秒,刷新 application/client-machine 上的 DNS 缓存可能需要 300 秒,在此期间应用程序可能会显示一些错误。

从 elasticache 方面来看,我认为他们没有为此提供任何官方 SLA。但是这个文档[1]提到这个 DNS 传播只需要“几秒钟”(取决于引擎版本)。

不过,您始终可以拍摄集群的快照作为备份。如果出现问题,您可以使用快照启动具有相同数据的新集群。

此外,还有一件事 - AWS 永远不会自行升级您的引擎版本。您的 Elasitcache 集群的维护 window 用于安全补丁和引擎上的小优化。它们不影响引擎版本。

干杯!

[1] https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/AutoFailover.html