本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
利用多可用区最大限度地减少 MemoryDB
在许多情况下,MemoryDB 可能需要替换主节点;其中包括某些类型的计划维护以及出现不太可能出现的主节点或可用区故障的事件。
对节点故障的响应取决于哪个节点发生了故障。但是,在任何情况下,MemoryDB 都可以确保在节点更换或故障转移期间不会丢失任何数据。例如,如果副本出现故障,则会替换出现故障的节点,并从事务日志中同步数据。如果主节点出现故障,将触发到一致副本的故障转移,从而确保在故障转移期间不会丢失任何数据。现在,写入操作将从新的主节点处理。然后替换旧的主节点并从事务日志中同步。
如果主节点在单个节点分片(没有副本)上出现故障,MemoryDB 将停止接受写入操作,直到主节点被替换并从事务日志同步。
节点更换可能会导致群集停机时间,但如果多可用区处于活动状态,则停机时间将最小化。主节点的角色将自动故障转移到其中一个副本。无需创建和预配置新的主节点,因为 MemoryDB 将以透明的方式处理此问题。此故障转移和副本提升可确保您在提升完成后立即继续写入新的主节点。
如果由于维护更新或服务更新而启动了计划节点替换,请注意,在集群处理传入的写请求时,将注意计划节点替换已完成。
MemoryDB 集群上的多可用区提高了容错能力。在集群的主节点出于任何原因变得无法访问或发生故障时,此情况尤其如此。MemoryDB 群集上的多可用区要求每个分片都必须有多个节点,并自动启用。
故障情形及多可用区响应
如果多可用区处于活动状态,发生故障的主节点故障转移到可用副本。该副本将自动与事务日志同步,并成为主节点,这比创建和重新预配置新的主节点快得多。提升过程通常只需几秒钟的时间,然后您可以再次对集群进行写入。
在多可用区处于活动状态时,MemoryDB 将持续监控主节点的状态。如果主节点发生故障,则根据故障的类型执行以下操作之一。
仅主节点出现故障时的故障情形
如果只有主节点发生故障,则副本将自动成为主节点。然后,将在与发生故障的主节点相同的可用区域中创建和预配置替换副本。
仅当主节点出现故障时,MemoryDB 多可用区才执行以下操作:
发生故障的主节点脱机。
最新的副本会自动成为主副本。
一旦故障转移过程完成(通常只需几秒钟的时间),写入操作就会恢复。
启动和预配置替换副本。
在发生故障的主节点所在的可用区中启动替换副本,以便维护节点的分配。
副本与事务日志同步。
有关查找集群的终端节点的信息,请参阅以下主题:
主节点和某些副本发生故障时的故障情况
如果主节点和至少一个副本发生故障,则最新的副本将提升为主集群。在与发生故障的节点相同的可用区域中创建和预配置新的副本。
当主节点和一些副本发生故障时,MemoryDB 多可用区将执行以下操作:
发生故障的主节点和发生故障的副本脱机。
可用的副本将成为主节点。
一旦故障转移完成(通常只需几秒钟的时间),写入操作就会恢复。
创建和预配置替换副本。
将在可用区 (发生故障的节点的位置) 创建替换副本,以便维护节点的分配。
所有节点都与事务日志同步。
有关查找集群的终端节点的信息,请参阅以下主题:
整个集群出现故障时的故障情形
如果整个集群全部发生故障,则在与原始节点相同的可用区中重新创建所有节点并预配置。
在这种情况下不会丢失数据,因为数据保留在事务日志中。
当整个集群发生故障时,MemoryDB 多可用区将执行以下操作:
发生故障的主节点和副本脱机。
创建和预配置替换主节点,将与事务日志同步。
创建和预配置替换副本,并与事务日志同步。
将在可用区 (发生故障的节点的位置) 创建替换,以便维护节点的分配。
有关查找集群的终端节点的信息,请参阅以下主题:
测试自动故障转移
您可以使用 MemoryDB 控制台测试自动故障切换Amazon CLI,以及 MemoryDB API。
在测试时,请注意以下内容:
-
在每个集群的任意 24 小时滚动期间,您最多可以使用此操作五次。
-
如果在不同集群的分片上调用此操作,您可以同时进行调用。
-
在某些情况下,您可能会在同一个 MemoryDB 集群中的不同分片上多次调用此操作。在这种情况下,必须先完成第一个节点替换,然后再进行后续调用。
-
要确定节点替换是否已完成,请使用主分区控制台检查事件,Amazon CLI,或 MemoryDB API。查找以下与
FailoverShard,此处按可能发生的顺序列出:-
集群消息:
FailoverShard API called for shard <shard-id> -
集群消息:
Failover from primary node <primary-node-id> to replica node <node-id> completed -
集群消息:
Recovering nodes <node-id> -
集群消息:
Finished recovery for nodes <node-id>
有关更多信息,请参阅下列内容:
-
DescribeEvents中的内存分区 API 参考
-
此 API 旨在测试应用程序在 MemoryDB 故障转移时的行为。它不是用于启动故障转移以解决集群问题的操作工具。此外,在大型运营活动等特定情况下,Amazon 可能会阻止此 API。
使用 Amazon Web Services Management Console 测试自动故障转移
使用以下过程测试通过控制台进行自动故障转移。
-
登录到Amazon Web Services Management Console然后在以下位置打开 MemoryDB and Redis 控制台https://console.aws.amazon.com/memorydb/
. -
选择要测试的集群左侧的单选按钮。此集群必须至少具有一个副本节点。
-
在 Details 区域中,确认此集群已启用多可用区。如果集群未启用多可用区,则选择其他集群或者修改此集群以启用多可用区。有关更多信息,请参阅修改 MemoryDB 集群。
选择集群的名称。
-
在存储库的分片和节点页面上,对于要测试故障转移的分片,选择分片的名称。
-
对于节点,选择故障转移主.
-
选择 Continue 可对主节点进行故障转移,选择 Cancel 可取消操作,不对主节点进行故障转移。
故障转移过程中,控制台继续将节点状态显示为可用。要跟踪您的故障转移测试进度,请从控制台导航窗格选择 Events。在 Events 选项卡上,观察指示故障转移已开始 (
FailoverShard API called) 和已完成 (Recovery completed) 的事件。
使用 Amazon CLI 测试自动故障转移
您可以在任何启用多可用区的集群上测试自动故障转移。Amazon CLI手术故障转移分片.
参数
-
--cluster-name– 必需。要测试的集群。 -
--shard-name– 必需。要在其上测试自动故障转移的分片的名称。在 24 小时滚动期间您最多可以测试 5 个分片。
以下示例使用Amazon CLI要打电话failover-shard在碎片0001在 MemoryDB 集群中my-cluster.
对于 Linux、macOS 或 Unix:
aws memorydb failover-shard \ --cluster-namemy-cluster\ --shard-name0001
对于 Windows:
aws memorydb failover-shard ^ --cluster-namemy-cluster^ --shard-name0001
要跟踪故障转移的进度,请使用 Amazon CLI describe-events 操作。
它将返回以下 JSON 响应:
{ "Events": [ { "SourceName": "my-cluster", "SourceType": "cluster", "Message": "Failover to replica node my-cluster-0001-002 completed", "Date": "2021-08-22T12:39:37.568000-07:00" }, { "SourceName": "my-cluster", "SourceType": "cluster", "Message": "Starting failover for shard 0001", "Date": "2021-08-22T12:39:10.173000-07:00" } ] }
有关更多信息,请参阅下列内容:
使用 MemoryDB API 测试自动故障转移
以下示例调用:FailoverShard在碎片0003在集群中memorydb00.
例 测试自动故障转移
https://memory-db.us-east-1.amazonaws.com/ ?Action=FailoverShard &ShardName=0003 &ClusterName=memorydb00 &Version=2021-01-01 &SignatureVersion=4 &SignatureMethod=HmacSHA256 &Timestamp=20210801T192317Z &X-Amz-Credential=<credential>
要跟踪故障转移的进度,请使用 MemoryDBDescribeEventsAPI 操作。
有关更多信息,请参阅下列内容: