本页介绍了 Memorystore for Valkey 如何对实例执行维护。它还提供了客户端应用应了解的信息和配置建议,以便充分利用 Memorystore for Valkey 的零停机维护设计。这些建议适用于高可用性实例和不使用副本的实例。不过,我们强烈建议您为所有生产用例配置高可用性。
Memorystore for Valkey 会定期更新实例,以确保服务可靠、高性能、安全且是最新版本。这些更新称为维护。维护由该服务全代管式,旨在确保零停机影响。
维护通常分为以下类别:
- Memorystore 功能。为了发布某些功能,Memorystore 需要进行维护更新。
- 操作系统补丁。我们会持续监控操作系统中新发现的安全漏洞。发现漏洞后,我们会修补操作系统,以防范新风险。
- 数据库补丁。维护可能包括 Valkey 更新,以便在 OSS Valkey 提供的安全性、性能和可靠性特性之外,进一步提升实例的安全性、性能和可靠性。
配置客户端应用
如需配置客户端应用,以便在维护期间尽可能实现最佳性能和可用性,请按以下步骤操作:
- 根据客户端最佳实践中的指南使用和配置第三方客户端,确保任何安排的维护不会影响客户端应用。我们建议的客户端配置可以通过定期的嵌入式拓扑刷新和后台连接轮替来避免连接重置。
- 使用一系列更新操作(例如缩减或扩容、副本数量更改)测试客户端应用,同时在主节点和副本节点上运行代表性工作负载,并监控对客户端的影响。这些更新会测试客户端上的内嵌拓扑刷新逻辑、完整同步影响、新节点发现和现有节点移除功能。测试有助于确保第三方客户端配置正确,以免对您的应用产生任何负面影响。
计划性维护
Memorystore for Valkey 利用渐进部署和先创建后销毁生命周期策略,以避免 Memorystore 定期维护对 Valkey 实例造成任何停机影响。通过将 OSS Valkey 集群协议的请求重定向功能与以下 Memorystore 机制结合使用,即可实现零停机维护:
- 协调故障切换,不会丢失任何数据
- 优雅地移除节点,以便客户端能够及时跟上节点拓扑更新,而不会对可用性造成任何影响
- 实例的 PSC 端点不会受到维护影响。如需详细了解 PSC 端点,请参阅实例端点。
以下部分介绍的服务行为仅适用于定期维护。如需了解硬件故障等非预期事件的影响,请参阅非预期故障切换期间的客户端行为。
默认维护窗口
默认情况下,Memorystore 会根据实例的时区在以下窗口中更新实例:
工作日时段(星期一至星期五):晚上 10 点至早上 6 点
周末时段:星期五晚上 10 点至星期一早上 6 点
逐步部署策略
针对 Valkey 部署的 Memorystore 会以逐步扩大的范围执行,并且速度足以尽早检测到故障,从而减少影响并建立稳定性信心。在服务级别,系统会在 Memorystore 实例集群中集成烘烤时间(在系统将更新视为成功并继续操作之前,应用和监控更新所需的时间)。此外,系统会在区域内各个可用区(多个故障域)的实例中集成烘烤时间,以缩小影响范围(如果有)。
对于配置为高可用性的实例,任何给定时间最多只会更新一个故障域/可用区,以确保实例分片(包括主实例和副本)在整个更新过程中都具有高可用性。此外,在任何给定时间,只有少数 Valkey 节点会更新。更新使用“先创建后销毁”生命周期机制,以最大限度地提高实例稳定性。在更新包含多个分片的实例时,此策略可带来最大优势。在任何给定时间只将更新应用于用户键空间的一小部分,可最大限度地提高数据可用性。
“先创建、后销毁”生命周期策略
Valkey 实例包含多个分片。每个分片都有一个主节点和零个或多个副本节点。Memorystore 使用以下过程更新分片中的任何现有主 Valkey 节点或副本 Valkey 节点:
- Memorystore for Valkey 会先向分片中添加一个安装了最新软件更新的全新副本。Memorystore 会创建一个全新的节点,而不是更新现有节点,以确保在发生意外的引导失败时保留预配的容量。
- 如果要更新的分片中的节点是主节点,则系统会先将其转换为副本,然后再使用协调的故障切换将其移除。
- 接下来,Memorystore 会移除使用旧版软件的副本。
- 系统会对实例中的每个节点重复此过程。
与就地更新的典型滚动部署相比,先创建后销毁策略有助于保留实例的预配容量,但会导致客户端应用出现服务中断(有时会导致数据丢失)。对于没有副本的分片,Memorystore for Valkey 仍会先预配新的副本,协调故障切换,最后替换分片的现有主节点。
第 1 步:添加 Valkey 副本
“先创建后销毁”机制的第一步是使用完整同步 OSS Valkey 机制添加安装了最新软件的副本节点,以便将数据从主节点复制到副本节点。为此,系统会分叉子进程,并利用无磁盘复制来引导副本。
您可以通过预配更多分片来减少节点内的键空间大小,从而充分利用实例的水平扩缩架构。每个节点的数据集较小有助于减少完整同步操作对分叉延迟时间的影响。它还可以加快在节点之间复制数据的速度。
第 2 步:协调主副本故障切换
如果需要更新的 Valkey 节点是主节点,Memorystore 会先执行协调故障切换到新添加的副本节点,然后继续执行节点移除操作。在协调故障切换期间,客户端和 Valkey 节点会协同工作,并使用以下策略来避免应用出现停机:
- 主节点会暂时屏蔽传入的客户端请求,以便确保现有副本与主副本完全同步。
- 副本完成选举流程,接管主副本角色。
- 先前的主节点(现在是副本)会解除现有请求的屏蔽,并使用 OSS Valkey 集群协议将其重定向到新选的主节点。发送到旧副本节点的所有新请求都会继续重定向到新的主节点。
- 您的 Valkey 兼容客户端会刷新其内存中拓扑。它会学习新主端点的地址,而不再需要重定向。
协调的故障转移通常需要数十毫秒。不过,待刷写到副本的传输中的数据以及实例总大小可能会增加故障切换延迟时间。实例大小可能会影响主节点之间的收敛,进而影响选举新主节点的决策。
第 3 步:移除 Valkey 副本
“先创建后销毁”机制的最后一步是移除旧版软件上的副本节点。由于客户端会缓存端点信息和实例拓扑,因此突然移除节点会对客户端应用产生影响。Memorystore for Valkey 设计了一种 Valkey 副本的正常移除方式,以便客户端应用在发生硬节点关闭之前刷新其拓扑。我们对拓扑进行了自定义,以便客户了解新副本,但也提前忘记要移除的副本。
运行旧版软件的副本节点会保留一段时间(通常为几分钟),在此期间,它会开始将传入的读取请求重定向到其分片的主节点。这样,第三方客户端就可以刷新节点拓扑并了解新的副本端点。如果客户端在耗尽流量时段后尝试访问已移除的节点,则该尝试会失败,这反过来会触发连接客户端上的节点拓扑结构刷新,以便客户端了解副本更改。重新刷新节点拓扑后,系统不会看到要移除的副本节点。