高可用性和副本

本页介绍了 Memorystore for Valkey 的集群架构如何支持和提供高可用性 (HA)。本页面还介绍了有助于提升实例性能和稳定性的推荐配置。

高可用性

Memorystore for Valkey 基于高可用性架构构建而成,可让您的客户端直接访问托管式 Memorystore for Valkey 虚拟机。您的客户端通过连接到各个分片网络来实现此目的 如连接到 Memorystore for Valkey 实例中所述。

直接连接到分片具有以下优势:

  • 直接连接可以避免任何单点故障,因为每个分片都会独立发生故障。例如,如果来自多个客户端的流量使某个槽(键空间块)过载,则分片故障会限制对负责处理该槽的分片造成的影响。

  • 直接连接可避免中间跃点,从而最大限度地缩短客户端与 Valkey 虚拟机之间的往返时间(客户端延迟时间)。

我们建议您创建高可用性多可用区实例,而不是单可用区实例,因为它们的可靠性更高。但是,如果您选择预配没有副本的实例,我们建议您选择单可用区实例。如需了解详情,请参阅如果您的实例不使用副本,请选择单可用区实例

如需为实例启用高可用性,您必须为每个分片至少预配 1 个副本节点。您可以在创建实例时执行此操作,也可以将副本数扩容到每个分片至少 1 个副本。副本会在计划内维护和意外分片故障期间提供自动故障切换

您应根据客户端最佳实践中的指南配置客户端。通过使用推荐的最佳实践,您的客户端可以自动、妥善地处理实例的角色(自动故障切换)和槽分配更改(节点替换、使用方扩容/缩容),无需停机。

副本

高可用性 Memorystore for Valkey 实例属于区域级资源。这意味着分片的主虚拟机和副本虚拟机会分布在多个可用区,以防可用区级服务中断。Memorystore for Valkey 支持每个节点有 0、1 或 2 个副本的实例。

您可以使用副本通过伸缩读取来提高读取吞吐量。 为此,您必须使用 READONLY 命令建立连接,以允许客户端从副本读取数据。

每个节点没有副本的实例形状

没有副本的 Memorystore for Valkey 实例,其节点均匀分布在三个可用区中。

每个节点有 1 个副本的实例形状

一个 Memorystore for Valkey 实例,每个节点有一个副本,且节点在三个可用区中均匀分配。

每个节点有 2 个副本的实例形状

一个 Memorystore for Valkey 实例,每个节点有两个副本,且节点在三个可用区中均匀分配。

自动故障切换

由于主节点的维护或意外故障,可能会发生分片内自动故障切换。在故障切换期间,一个副本会提升为主实例。您可以明确配置副本。该服务还可以在内部维护期间临时预配额外的副本,以避免任何停机。

自动故障切换功能可防止在维护更新期间丢失数据。如需详细了解维护期间的自动故障切换行为,请参阅维护期间的自动故障切换行为

故障切换和节点修复时长

对于计划外事件(例如,主节点进程崩溃或硬件故障),自动故障切换可能需要数十秒的时间。在此期间,系统会检测到故障,并选择一个副本作为新的主实例。

节点修复可能需要花费几分钟的时间,才能让服务 替换发生故障的节点。所有主节点和副本节点都是如此。对于可用性不高(未预配副本)的实例,修复故障主要节点也需要数分钟的时间。

计划外故障切换期间的客户端行为

根据故障的性质,客户端连接可能会被重置。自动恢复后,应使用指数退避算法重新尝试连接,以免主节点和副本节点过载。

使用副本处理读取吞吐量的客户端应做好准备,以应对容量暂时下降的情况,直到故障节点被自动替换。

丢失的写入数据

在因意外故障导致的故障切换期间,已确认的写入可能会 因为 Valkey 复制协议的异步性质。

客户端应用可以利用 Valkey WAIT 命令来提高实际数据安全。