

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# MemoryDB 多区域
<a name="multi-region"></a>

MemoryDB 多区域是一个完全托管的、主动-主动的多区域数据库，使您能够构建具有高达 99.999% 可用性、微秒级读取和个位数毫秒写入延迟的多区域应用程序。您可以从区域降级中提高可用性和弹性，同时受益于多区域应用程序的低延迟本地读取和写入。

使用 MemoryDB 多区域，您可以构建高可用的多区域应用程序，以提高弹性。它提供主动-主动复制，因此您可以从最接近客户的区域本地提供读取和写入，具有微秒级读取和个位数毫秒写入延迟。MemoryDB 多区域在区域之间异步复制数据，数据通常在一秒内传播。它会自动解决更新冲突并纠正数据分歧问题，使您能够专注于您的应用程序。

目前，以下区域支持 MemoryDB 多 AWS 区域：美国东部（弗吉尼亚北部和俄亥俄州）、美国西部（俄勒冈、加利福尼亚北部）、欧洲（爱尔兰、法兰克福和伦敦）和亚太地区（东京、悉尼、孟买、首尔和新加坡）。

只需点击几下即可轻松开始使用 MemoryDB 多区域， AWS 管理控制台 或者使用最新的 AWS SDK，或者。 AWS CLI

**Topics**
+ [先决条件和限制](multi-region.prereq.md)
+ [工作原理](multi-region.how.md)
+ [一致性和冲突解决](#multi-region.conflict)
+ [通过控制台使用 MemoryDB 多区域](multi-Region.console.md)
+ [通过 CLI 使用 MemoryDB 多区域](multi-Region.cli.md)
+ [监控 MemoryDB 多区域](multi-Region.monitoring.md)
+ [MemoryDB 多区域扩缩](multi-Region.Scaling.md)
+ [支持与不支持的命令](multi-Region.SupportedCommands.md)

# 先决条件和限制
<a name="multi-region.prereq"></a>

在开始使用 MemoryDB 多区域之前，请注意以下事项：
+ **MemoryDB 多区域在您选择的区域之间复制数据**：通过创建多区域集群，您理解并同意数据将在您选择的区域之间移动。

  从多区域组中移除一个区域也会删除该区域中的区域集群。
+ **区域可用性**-以下区域支持 MemoryDB 多 AWS 区域：美国东部（弗吉尼亚北部和俄亥俄州）、美国西部（俄勒冈、加利福尼亚北部）、欧洲（爱尔兰、法兰克福和伦敦）和亚太地区（东京、悉尼、孟买、首尔和新加坡）。
+ **行为与设置**：所有多区域的区域集群将具有相同数量的分片、实例类型、Valkey 引擎版本、TLS 和参数组设置。您可以为每个区域集群选择不同的 IAM 身份验证 ACLs、快照窗口、标签、客户托管密钥 (CMKs) 和维护窗口。

  借助 MemoryDB 多区域，不同区域中的集群可以拥有不同数量的副本。
+ **支持的节点类型**：MemoryDB 多区域支持 XL 及更大尺寸的 R7g 节点。

  MemoryDB 多区域支持 Valkey 引擎版本 7.3 及以上。
+ **支持的数据类型**：MemoryDB 多区域目前支持大多数 Redis OSS 或 Valkey 数据类型，我们将在未来添加对更多数据类型的支持。支持的数据类型包括字符串、哈希、集合和有序集合，但并非所有操作这些数据类型的命令都受支持。
+ **区域总数**-使用 MemoryDB 多区域，您最多可以在五个区域之间自动复制 MemoryDB 集群数据。 AWS 
+ **支持的选项**-MemoryDB 多区域支持 horizontal/vertical 扩展、IAM 集成 ACLs、自动和按需快照、自动软件修补和监控。
+ **备份与恢复**：您可以创建快照来备份多区域区域集群的数据。您可以手动创建快照，或者使用 MemoryDB 的自动快照调度程序，在您为每个区域集群单独指定的时间每天拍摄新快照。
+ **迁移**-您可以选择恢复任何 MemoryDB 或 Redis OSS/Valkey RDB 格式的备份。要从备份迁移数据，请创建一个新的 MemoryDB 多区域区域集群，并指定 Amazon S3 中的快照位置。如果是 MemoryDB 快照，您也可以指定其名称。MemoryDB 多区域将使用该快照中的数据创建区域集群。由于 MemoryDB 多区域支持字符串、哈希、集合、有序集合数据类型，您只能迁移这些受支持数据类型的快照数据。如果备份文件包含不受支持的 Redis OSS 数据类型，MemoryDB 多区域默认将使迁移操作失败。
+ **资源预留**：MemoryDB 多区域旨在保障区域可用性。每个节点上会永久保留部分资源，以确保本地读写请求的处理能够独立于对等区域的工作负载。这些资源也用于在对等区域发生事件（包括区域隔离事件及其恢复过程）期间保障本地可用性。与单区域 MemoryDB 相比，这会导致不同的性能特征。MemoryDB 多区域支持水平扩缩和垂直扩缩，以增加可用资源。
+ **不**是 RPO/RTO SLAs-MemoryDB 多区域不提供规定的服务等级协议。 RPO/RTO 它将继续接受与其他 AWS 区域隔离的 AWS 区域中的写入，这可能会无限期地增加交叉复制延迟。我们希望客户使用 “MultiRegionClusterReplicationLag” 指标检测隔离，并根据他们想要的 RPO 将其应用程序流量重定向到另一个区域。
+ **无单一端点或自动失效转移：**发生区域性中断时，您必须手动将客户流量重定向到其他区域中的应用堆栈。您必须确保已为其正确配置对 MemoryDB 集群的多区域访问。
+ **不支持 TTL ** - MemoryDB 多区域不支持 TTL（生存时间）。
+ **不支持数据分层或向量搜索 ** - MemoryDB 多区域不支持向量搜索和数据分层功能。
+ MemoryDB 多区域不支持 read-modify-write命令（APPEND、RENAMENX 等）。
+ MemoryDB 多区域不保证 Redis OSS 事务的原子性和一致性。
+ **授权模型**：可以从任何受支持的区域调用 MemoryDB 多区域 API 操作。通过在 IAM 策略中指定多区域集群的 ARN，可以限制权限范围。多区域集群 ARN 的格式为 `arn:aws:memorydb::<account-id>:multiregioncluster/multi-region-cluster-name`。ARN 中不包含区域信息。
+ **吞吐量限制**-MemoryDB Multi-Region 在一个区域中每个节点最多可支持 1.3 个 GB/s 读取吞吐量，每个分片最多可支持 50 个 MB/s 全局聚合写入吞吐量。
+ **AWS p** olicy-该 AWS ReadOnlyAccess 策略提供对 AWS 服务和资源的只读访问权限，但不会自动检索有关一个或多个多区域集群的详细信息。要检索一个或多个多区域集群的详细信息，请使用 [AmazonMemoryDBReadOnlyAccess](security-iam-awsmanpol.md#iam.identitybasedpolicies.predefinedpolicies-readonly) 策略或创建[ IAM 客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html)。
+ **删除区域集群**-删除区域集群时，任何关联的客户托管密钥 (CMKs) 都必须保持有效，直到区域集群完成删除。这确保了剩余的区域集群能够收敛到一致状态。

# 工作原理
<a name="multi-region.how"></a>

MemoryDB 多区域的工作原理如下。
+ **概念**

  多区域集群是由一个或多个区域集群组成的集合，全部归一个 AWS 账户所有。

  区域集群是指作为多区域集群一部分的 AWS区域中的单个集群。每个区域集群存储相同的数据集。任何给定的多区域集群每个 AWS 区域只能有一个区域集群。

  当您创建多区域集群时，它包含多个区域集群（每个区域一个），MemoryDB 将其视为一个单元。当应用程序向任何区域集群写入数据时，MemoryDB 会自动异步地将该数据复制到多区域集群内的所有其他区域集群。您可以将区域集群添加到多区域集群中，使其可以在更多区域中使用。您将能够在最多五个区域之间自动复制 MemoryDB 集群数据。
+ **可用性和耐久性**

  在极不可能发生的区域隔离或区域降级事件中，您可以更新全局 DNS，将应用程序的流量重定向到其他健康的区域，而无需进行任何数据库重新配置，从而简化维护应用程序高可用性的过程。MemoryDB 在多可用区事务日志中持久存储来自所有区域的所有写入，以确保区域内数据无丢失。MemoryDB 多区域会跟踪所有已在区域内确认但尚未复制到所有成员集群的写入。如果某个区域被隔离或降级，它仍将继续接受本地写入。当被隔离的区域重新连接到多区域集群时，已确认但尚未复制到其他区域的写入将被复制到多区域集群中的所有区域。MemoryDB 多区域还会使用 CRDT 机制，自动将这些待处理的写入与中断期间在其他区域可能发生的任何更新进行协调。
+ **连接到 MemoryDB 多区域集群**

  要向您的区域集群写入数据和从中读取数据，请使用支持的 Redis OSS/Valkey 客户端（包括 Valkey GLIDE）连接到该集群。每个区域集群都有一个您的 Redis OSS/Valkey 客户端可以连接的终端节点。您可以使用 AWS 控制台、CLI 或 API 检索您的区域集群终端节点。然后，您可以在应用程序中使用（或配置）此终端节点来获取来自区域集群 read/write 的数据。

## 一致性和冲突解决
<a name="multi-region.conflict"></a>

对某个区域集群中的键进行的任何更新，通常会在一秒内异步传播到多区域集群中的其他区域集群。如果某个区域被隔离或降级，MemoryDB 多区域会跟踪所有已执行但尚未传播到所有成员集群的写入。当该区域恢复在线时，MemoryDB 多区域会恢复将该区域中任何待处理的写入传播到其他区域的成员集群。它也会恢复将其他成员集群的写入传播到现已恢复在线的区域。无论该区域被隔离多长时间，所有以前成功的写入都将最终得到传播。

如果您的应用程序大约同时在不同区域更新相同的键，则可能产生冲突。MemoryDB 多区域使用无冲突复制数据类型（CRDT）来协调冲突的并发写入。CRDT 是一种可以独立、并发更新而无需协调的数据结构。这意味着写入-写入冲突会在每个副本上独立合并，并最终实现一致性。

具体来说，MemoryDB 使用两级“最后写入者胜出（LWW）”来解决冲突。对于字符串数据类型，LWW 在键级别解决冲突。对于其他数据类型，LWW 在子键级别解决冲突。冲突解决完全由系统托管，并在后台进行，不会对应用程序的可用性产生任何影响。以下是哈希数据类型的一个示例：

区域 A 在时间戳 T1 执行“HSET K F1 V1”；区域 B 在时间戳 T2 执行“HSET K F2 V2”；复制后，区域 A 和 B 都将拥有包含两个字段的键 K。当不同区域并发更新同一集合中的不同子键时，由于 MemoryDB 对哈希数据类型在子键级别解决冲突，这两次更新不会相互冲突。因此，最终数据将包含这两次更新的效果。


| 时间 | 区域 A | 区域 B | 
| --- | --- | --- | 
|  T1  |   HSET K F1 V1  |    | 
|  T2  |    |   HSET K F2 V2  | 
|  T3  |  同步  |  同步  | 
|  T4  |   K: \$1F1:V1, F2:V2\$1  |  K: \$1F1:V1, F2:V2\$1  | 

### CRDT 及示例
<a name="clusters.multi-Region.CRDT"></a>

 MemoryDB 多区域实现了无冲突复制数据类型（CRDT）来解决来自多个区域的并发写入冲突。CRDT 允许不同区域在最终接收到相同操作集后，无论顺序如何，都能独立达成最终一致性。

 当单个键在多个区域中同时被更新时，需要解决写入-写入冲突以实现数据一致性。MemoryDB 多区域使用“最后写入者胜出（LWW）”策略来确定获胜操作，最终只能观察到“后发生”的操作效果。如果操作 op1 的效果在操作 op2 执行时，已在原始执行 op1 的区域中得到应用，则我们说操作 op1“发生在”操作 op2“之前”。

 对于集合（哈希、集合和 SortedSet）MemoryDB 多区域解决元素级别的冲突。这允许 MemoryDB Multi-Region 使用 LWW 来解决每个元素上的 write/write 冲突。例如，从多个区域同时向同一集合添加不同元素，将导致该集合包含所有元素。

**并发执行：最后写入者胜出**

在 MemoryDB 多区域中，当存在键的并发创建时，在任何区域上执行的最后一个操作将决定该键的结果。例如：

![\[并发执行：最后写入者胜出。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/concurrent-ex-last-writer-wins.png)


键 x 在区域 B 上创建，值为“b”，但此后同一键在区域 A 上创建，值为“a”。由于区域 A 的操作是最后执行的操作，该键最终将收敛为值“a”。

**数据类型冲突的并发执行：最后写入者胜出**

在前面的示例中，该键在两个区域中都是以相同类型创建的。如果该键是以不同数据类型创建的，也会观察到类似的行为：

![\[数据类型冲突的并发执行：最后写入者胜出。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/concurrent-ex-conflict-data-types-last-writer-wins.png)


键 x 在区域 B 上创建为字符串类型，值为“b”。但在此之后，且在该操作复制到区域 A 之前，同一键在区域 A 上被创建为哈希类型。由于区域 A 的操作是最后执行的操作，该键最终将收敛为在区域 A 上创建的哈希。

**并发创建-删除：最后写入者胜出**

在同时删除和 “创建”（意思是 of 值） replacement/addition 的场景中，最后执行的操作将获胜。最终结果将由删除操作的顺序决定。如果删除操作先发生：

![\[并发创建-删除：如果删除操作先发生，则最后写入者胜出。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/concurrent-create-delete-last-writer-wins-before.jpg)


区域 B 删除了 Set 类型的键 x。之后，区域 A 向该键添加了新成员。由于区域 A 的操作是最后执行的操作，该键最终将收敛为包含在区域 A 添加的唯一元素的 Set。

如果删除操作后发生：

![\[并发创建-删除：如果删除操作后发生，则最后写入者胜出。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/concurrent-create-delete-last-writer-wins-after.jpg)


区域 A 向 Set 类型的键 x 添加了新成员。之后，该键在区域 B 被删除。由于区域 B 的操作是最后执行的操作，最终该键将被删除。

**计数器、并发操作：采用完整值复制与最后写入者胜出**

通过执行全值复制和应用，MemoryDB Multi-Region 中的计数器的行为与非计数器类型类似。 last-writer-strategy并发操作不会合并，而是最后一个操作将胜出。例如：

![\[如果最后写入者胜出，则采用完整值复制。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/concurrent-full-rep-last-writer-wins.jpg)


在此场景中，键 x 的初始值为 1。然后区域 B 将计数器 x 增加 2，之后不久区域 A 将计数器增加 1。由于区域 A 的操作是最后执行的操作，并且增加 1 是最后执行的操作，键 x 最终将收敛为值 2。

**非确定性命令作为确定性命令复制**

为保证不同区域间值的一致性，在 MemoryDB 多区域中，非确定性命令作为确定性命令复制。非确定性命令是指那些依赖于外部因素的命令，例如 SETNX。SETNX 依赖于键是否存在，而该键可能存在于远程区域，但不存在于接收命令的本地区域。因此，原本非确定性的命令会作为完整值复制进行复制。对于字符串类型，它将作为 SET 命令复制。

![\[非确定性命令作为确定性命令复制。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/nondeterministic_commands.png)


总之，所有对字符串类型的操作都作为 SET 或 DEL 复制；所有对哈希类型的操作都作为 HSET 或 HDEL 复制；所有对集合类型的操作都作为 SADD 或 SREM 复制；所有对有序集合的操作都作为 ZADD 或 ZREM 复制。

# 通过控制台使用 MemoryDB 多区域
<a name="multi-Region.console"></a>

以下是通过控制台使用 MemoryDB 多区域的方法。

**Topics**
+ [在 MemoryDB 多区域中创建新集群](#multi-Region.console.create)
+ [将快照还原到多区域集群内的新集群或现有集群](#multi-Region.console.restore)
+ [修改 MemoryDB 多区域中的集群](#multi-Region.console.modify)
+ [删除 MemoryDB 多区域中的集群](#multi-Region.console.delete)

## 在 MemoryDB 多区域中创建新集群
<a name="multi-Region.console.create"></a>

1. 从集群列表或仪表板导航至创建集群部分。  
![\[创建集群，控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/create-multi-region1.png)

1.  在**集群类型**字段中，选择**多区域集群**。

1.  在**集群创建方法**字段中，选择**简易创建**。

1.  填写**名称**和**描述**，验证默认值并选择**创建**。

**创建并配置集群**

1. 从集群列表或仪表板导航至创建集群部分。  
![\[创建并配置集群，控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/create-multi-region2-configure.png)

1.  在**集群类型**字段中，选择**多区域集群**。

1.  在**集群创建方法**字段中，选择**创建新集群**。

1.  填写**名称**和**描述**，验证值并选择**创建**。

## 将快照还原到多区域集群内的新集群或现有集群
<a name="multi-Region.console.restore"></a>

1. 从集群列表或仪表板导航至创建集群部分。  
![\[还原集群，控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/restore-multi-region-from-snapshot1.png)

1. 在**集群类型**字段中，选择**多区域集群**。

1.  在**集群创建方法**字段中，选择**从快照还原**。

1.  选择源快照，然后填写必填字段。查看您的选择，然后选择**还原**。  
![\[选择要还原到多区域集群的源快照的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/restore-multi-region-from-snapshot2-confirm.png)

1. 要查看您的多区域集群，请导航至集群部分：  
![\[用于修改多区域集群的集群部分控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/restore-multi-region-from-snapshot3-confirm.png)

1. 现在选择目标多区域集群名称。  
![\[选择要修改的多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/restore-multi-region-from-snapshot4-confirm.png)

1. 现在选择目标区域集群名称。  
![\[选择要修改的区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/restore-multi-region-from-snapshot5-confirm.png)

## 修改 MemoryDB 多区域中的集群
<a name="multi-Region.console.modify"></a>

1. 导航至集群部分。您应能看到所有当前集群。  
![\[这是我的映像。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/modify-multi-region1.png)

   然后根据您要修改的集群类型，从以下步骤中选择。

1. 要修改多区域集群中的单个集群，请先选择其所属的多区域集群。然后在操作中选择编辑按钮（右上角）。接着选择目标单个集群。您也可以从**详细信息**页面修改此集群。

**修改区域集群**

1. 要修改多区域集群，请选择目标多区域集群名称。  
![\[选择要修改的目标多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/modify-multi-region2.png)

   然后选择该集群，并在操作中（右上角）或从详细信息页面选择**编辑**按钮。

1. 要添加区域群集，请选择所选的目标多区域群集，然后转到**操作**下拉列表并选择**添加 AWS 区域**。您也可以前往 AWS 区域的详细信息页面，选择目标多区域集群，然后从那里进行添加。  
![\[选择要向其添加区域集群的目标多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/modify-multi-region3-add-regional-cluster.png)

1. 要添加区域，请选择目标区域。然后填写所需信息并选择**添加 AWS 区域**。  
![\[选择要向其添加区域的目标多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/modify-multi-region4-add-region.png)

1. 要向空的多区域集群添加新的区域集群，您将看到与创建多区域集群时相同的选项。唯一的区别是多区域集群信息已经存在。  
![\[选择要向其添加新区域集群的空多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/modify-multi-region5-add-regional-cluster-to-empty.png)

## 删除 MemoryDB 多区域中的集群
<a name="multi-Region.console.delete"></a>

1. 要删除某个区域中的单个集群，请选择目标区域集群。然后转到操作菜单下拉列表，选择单个集群，并选择**删除。**  
![\[选择要删除的单个集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/delete-multi-region1-select.png)

   系统将显示一个确认窗口，包括在删除前创建快照的选项。如果您仍要删除，请在文本字段中输入“delete”，然后选择**删除**。  
![\[删除确认窗口的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/delete-multi-region2-snapshot.png)

1. 要删除多区域集群的所有关联区域集群，请选择包含一个或多个集群的目标多区域集群。选中目标多区域集群后，转到操作菜单下拉列表并选择**删除**。  
![\[选择删除多区域集群所有关联集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/delete-multi-region3-associated-clusters.png)

1. 要删除整个多区域集群，请选择目标空多区域集群。然后转到操作菜单下拉列表并选择**删除**。  
![\[删除整个多区域集群的控制台视图。\]](http://docs.aws.amazon.com/zh_cn/memorydb/latest/devguide/images/delete-multi-region4-entire-mrc.png)

# 通过 CLI 使用 MemoryDB 多区域
<a name="multi-Region.cli"></a>

以下是通过 CLI 使用 MemoryDB 多区域的方法

**注意**  
MemoryDB 多区域仅支持节点类型 db.r7g.xlarge 及以上。

## 创建带有内存DBMulti 区域的集群
<a name="multi-Region.cli.create"></a>

**创建多区域集群**

```
aws memorydb create-multi-region-cluster \
	--multi-region-cluster-name-suffix my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--engine valkey \
	--region us-east-1
```

**在美国东部（弗吉尼亚州北部）区域创建区域集群**

```
aws memorydb create-cluster \
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--acl-name open-access \
	--region us-east-1 \
```

**在欧洲地区（爱尔兰）区域创建区域集群**

```
aws memorydb create-cluster \
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.xlarge \
	--acl-name open-access \
	--region eu-west-1 \
```

**从任何区域描述多区域集群**

```
aws memorydb describe-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region eu-west-1
```

## 更新多区域集群
<a name="multi-Region.cli.update"></a>

**修改节点类型**

```
aws memorydb update-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--node-type db.r7g.4xlarge \
	--region us-east-1
```

**修改分片数量**

```
aws memorydb update-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--shard-configuration \
	ShardCount=3 \
	--update-strategy COORDINATED \
	--region us-east-1
```

## 扩展 MemoryDB 集群
<a name="multi-Region.cli.scaling"></a>

首先，使用 `list-allowed-node-type-updates` 命令列出可以纵向扩展或横向扩展的节点：

```
aws memorydb list-allowed-node-type-updates \
	--cluster-name my-cluster-name
```

这将提供可以扩容或缩容的节点列表。然后要更新它们，您可以使用 `update-cluster` 命令：

```
aws memorydb update-cluster  \
	--cluster-name my-cluster \
	--node-type db.r6g.2xlarge
```

有关多区域扩缩的更多信息，请参阅 [MemoryDB 多区域扩缩](multi-Region.Scaling.md)。

## 正在删除 MemoryDB 多区域中的集群
<a name="multi-Region.cli.update"></a>

**删除区域集群**

```
aws memorydb delete-cluster \	
	--cluster-name my-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region us-east-1
```

**删除多区域集群**

```
aws memorydb delete-multi-region-cluster \
	--multi-region-cluster-name my-multi-region-cluster \
	--region us-east-1
```

# 监控 MemoryDB 多区域
<a name="multi-Region.monitoring"></a>

您可以使用 Amazon CloudWatch 来监控多区域集群的行为和性能。MemoryDB 为多区域集群内的每个区域集群发布 `MultiRegionClusterReplicationLag` 指标。

`MultiRegionClusterReplicationLag` 显示从更新被写入远程多区域区域集群的多可用区事务日志，到该更新被写入本地多区域区域集群的主节点之间所经过的时间。该指标以毫秒为单位表示，在分片级别为每个源区域和目标区域对发出。

在正常操作期间，`MultiRegionClusterReplicationLag` 应相当恒定。`MultiRegionClusterReplicationLag` 数值升高可能表明来自某个区域集群的更新未能及时传播到其他区域集群。随着时间的推移，这可能导致其他区域集群*落后*，因为它们无法持续接收更新。

`MultiRegionClusterReplicationLag`如果某个 AWS 区域变得孤立或降级，并且您在该区域中有一个区域集群，则可能会增加。在这种情况下，您可以暂时将应用程序的读取和写入活动重定向到另一个运行状况良好的 AWS 区域。

# MemoryDB 多区域扩缩
<a name="multi-Region.Scaling"></a>

随着集群需求的变化，您可能决定通过更改节点类型或 MemoryDB 集群中的分片数量来提升性能或降低成本。扩展 MemoryDB 多区域集群会同时扩缩其中的所有区域集群。MemoryDB 多区域集群支持在线重分片。MemoryDB 多区域集群不支持离线重分片。

您决定重新调节集群的情况包括以下几种：
+ **记忆压力**

  如果您的区域集群中的节点存在内存压力，您可能会决定进行横向扩展或纵向扩展，以获得更多资源来更好地存储数据和处理请求。

  您可以通过监控以下指标来确定您的节点是否承受内存压力： FreeableMemory、 SwapUsage、 BytesUsedForMemory DB 和 MultiRegionClusterReplicationLag 
+ **CPU 或网络瓶颈**

  如果 latency/throughput 问题困扰着您的集群，则可能需要向外扩展或向上扩展以解决问题。

  您可以通过监控以下指标来监控延迟和吞吐量水平：`CPUUtilization`、`NetworkBytesIn`、` NetworkBytesOut`、`CurrConnections`、` NewConnections`、` and MultiRegionClusterReplicationLag`。
+ **您的集群规模过大**

  当前集群的需求使得横向缩减或纵向缩减不会损害性能并能降低成本。

您可以使用以下指标监控集群的使用情况，以确定是否可以安全地缩减或缩小规模： FreeableMemory SwapUsage BytesUsedForMemory、 CPUUtilization、 NetworkBytesIn、 NetworkBytesOut、 CurrConnections、 NewConnections 和 MultiRegionClusterReplicationLag 

MemoryDB 多区域集群有两种扩展方式：水平扩缩和垂直扩缩。
+ 水平扩缩您通过添加或删除分片来更改 MemoryDB 多区域集群中的分片数量。在线重新分片过程允许在区域集群继续为传入请求提供服务的 in/out 同时进行扩展。
+ 纵向扩展通过更改节点类型来调整 MemoryDB 多区域集群的规模。在线垂直扩展允许在区域集群继续为传入请求提供服务的 up/down 同时进行扩展。

扩展默认使用“协调式”更新策略。这意味着要么所有区域集群成功扩展，要么所有区域集群均不扩展。

横向扩展操作也支持“非协调式”更新策略。这意味着某些区域集群可能成功横向扩展，而某些区域集群的横向扩展尝试可能失败。如果某个区域集群横向扩展成功，则所有其他区域集群会继续重试横向扩展，直到所有其他横向扩展也都成功。

如果所有区域集群均未能成功横向扩展，则多区域集群的“非协调式”横向扩展将失败。

**注意**  
当区域集群在不同时间进行横向扩展时，“非协调式”横向扩展可能导致区域集群之间长时间存在容量不平衡。这可能会导致 MultiRegionClusterReplicationLag 指标增加，而区域集群数据可能会长期存在差异。

MemoryDB 多区域集群的区域集群可以配置不同数量的副本节点，但区域集群中的所有分片必须具有相同数量的副本节点。

如果您要通过缩小或缩小规模 MemoryDB 多区域集群的大小和内存容量，请确保新配置有足够的内存和可用 IPs 空间来存放您的数据、足够的引擎开销，并且区域集群的 MultiRegionClusterReplicationLag 指标在几秒或一分钟范围内。

您可以使用、和 MemoryDB API 水平和垂直扩展 MemoryDB 多区域集群。 AWS 管理控制台 AWS CLI

# 支持与不支持的命令
<a name="multi-Region.SupportedCommands"></a>

**支持的命令**

**注意**  
SET 命令当前不支持 EX、PX、EXAT、PXAT 和 KEEPTTL 选项。
RESTORE 命令不支持将 TTL 设置为非零值。同样不支持 ABSTTL、IDLETIME 和 FREQ 选项。


| 数据类型 |  命令 | 
| --- | --- | 
|  字符串  |  SET\$1、DECR、DECRBY、GET、GETRANGE、SUBSTR、GETDEL、GETSET、INCR、INCRBY、INCRBYFLOAT、MGET、MSET、MSETNX、SETNX、STRLEN、LCS  | 
|  哈希  |  HINCRBY、HINCRBYFLOAT、HDEL、HSET、HMSET、HGET、HEXISTS、HLEN、HKEYS、HVALS、HGETALL、HMGET、HSTRLEN、HSETNX、HRANDFIELD、HSCAN  | 
|  设置  |  SADD、SREM、SISMEMBER、SMISMEMBER、SCARD、SMEMBERS、SRANDMEMBER、SSCAN、SUNION、SINTERCARD、SINTER、SDIFF、SPOP  | 
|  有序集合  |  ZADD、ZINCRBY、ZSCORE、ZMSCORE、ZCARD、ZRANK、ZREVRANK、ZRANGE、ZRANGEBYSCORE、ZRANGEBYLEX、ZREVRANGE、ZREVRANGEBYLEX、ZREVRANGEBYSCORE、ZREMRANGEBYLEX、ZREMRANGEBYSCORE、ZREMRANGEBYRANK、ZUNION、ZINTER、ZINTERCARD、ZDIFF、ZLEXCOUNT、ZCOUNT、ZREM、ZMPOP、ZPOPMIN、ZPOPMAX、ZSCAN、ZRANDMEMBER  | 
|  通用  |  SCAN、DEL、UNLINK、DUMP、RESTORE\$1\$1、EXISTS、KEYS、RANDOMKEY、TYPE  | 

**不支持的命令**

不支持的命令的通用类别包括：不支持的数据类型（位图、Hyperloglog、列表、地理空间和流）、TTL 相关命令、阻塞命令以及函数相关命令。完整列表如下：


| 数据类型 |  命令 | 
| --- | --- | 
| 字符串 | APPEND、GETEX、SETEX、SETRANGE | 
| Bitmap | BITCOUNT、BITFIELD、BITFIELD\$1RO、BITOP、BITPOS、GETBIT、SETBIT | 
| Hyperloglog | PFADD、PFCOUNT、PFDEBUG、PFMERGE、PFSELFTEST | 
| 列表 | BLMOVE、BLMPOP、BLPOP、BRPOP、BRPOPLPUSH、LINDEX、LINSERT、LLEN、LMOVE、LMPOP、LPOP、LPOS、PUSH、LPUSHX、LRANGE、LREM、LSET、LTRIM、RPOP、RPOPLPUSH、RPUSH、RPUSHX | 
| 设置 | SMOVE、SUNIONSTORE、SDIFFSTORE、SINTERSTORE | 
| 有序集合 | BZMPOP、BZPOPMAX、BZPOPMIN、ZDIFFSTORE、ZINTERSTORE、ZRANGESTORE、ZUNIONSTORE | 
| 地理空间 | GEOADD、GEODIST、GEOHASH、GEOPOS、GEORADIUS、GEORADIUS\$1RO、GEORADIUSBYMEMBER、GEORADIUSBYMEMBER\$1RO、GEOSEARCH、GEOSEARCHSTORE | 
| 流 | XACK、XADD、XAUTOCLAIM、XCLAIM、XDEL、XLEN、XPENDING、XRANGE、XREAD、XREADGROUP、XREVRANGE、XSETID、XTRIM、XGROUP、XINFO | 
| 通用 | COPY、FLUSHDB、FLUSHALL、MOVE、RENAME、RENAMENX、SORT、SORT\$1RO、SWAPDB、OBJECT、FUNCTION、FCALL、FCALL\$1RO、EXPIRE、EXPIREAT、EXPIRETIME、PERSIST、PEXPIRE、PEXPIREAT、PEXPIRETIME、PSETEX、PTTL、TTL | 