

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

# 将 Amazon Neptune 与全球数据库结合使用
<a name="neptune-global-database"></a><a name="gdb"></a><a name="globaldb"></a><a name="global_database"></a>

Amazon Neptune 全球数据库跨越多个数据库 AWS 区域，可实现低延迟的全局读取，并在极少数中断影响整个数据库的情况下提供快速恢复。 AWS 区域

一个 Neptune 全球数据库由一个区域中的一个主数据库集群和不同区域中最多有五个辅助数据库集群组成。

只能在主区域进行写入。辅助区域仅支持读取。每个辅助区域最多可以有 16 个读取器实例。

## Amazon Neptune 中的全球数据库
<a name="neptune-gdb-overview"></a>

使用 Neptune 全球数据库，您可以在跨多个 AWS 区域的单个数据库上运行您的全球分布式应用程序。

Neptune 全球数据库由主 AWS 区域 中一个用于写入数据的数据库集群和辅助 AWS 区域中最多五个只读数据库集群组成。当您对主数据库集群执行写入操作时，Neptune 会将写入的数据复制到使用专用基础设施的所有辅助数据库集群，延迟通常不到一秒钟。

下图显示了一个跨越两个 AWS 区域的全局数据库示例：

![\[Neptune 全球数据库具有一个主数据库集群和一个或多个辅助数据库集群。\]](http://docs.aws.amazon.com/zh_cn/neptune/latest/userguide/images/neptune-gdb-example.png)


您可以通过添加一个或多个只读副本实例来独立扩展每个辅助集群，以处理只读工作负载。

要执行写入操作，必须连接到主数据库集群的数据库集群端点。只有主集群才能执行写入操作。然后，如上图所示，复制由[集群存储卷](feature-overview-storage.md)而不是数据库引擎执行。

Neptune 全球数据库专为遍布全球的应用程序而设计。只读辅助数据库集群支持更靠近应用程序用户的读取操作。

Neptune 全球数据库支持两种不同的失效转移方法：
+ 要从主区域的中断中恢复，请使用[手动计划外 detach-and-promote](neptune-gdb-disaster-recovery.md#neptune-gdb-detach-and-promote)流程，即分离一个辅助群集，将其转换为独立群集，然后将其提升为新的主群集。
+ 对于计划内操作程序（例如维护），请使用[托管式计划内失效转移](neptune-gdb-disaster-recovery.md#neptune-gdb-managed-failover)，将主集群重新定位到其辅助区域之一，而不会造成数据丢失。

## 在 Amazon Neptune 中使用全球数据库的优势
<a name="neptune-gdb-advantages"></a>

使用全球数据库，您可以获得以下优势：
+ **全球读取，本地延迟** – 如果您在世界各地设有办事处，全球数据库允许您辅助区域的办公室在本地延迟的情况下访问自己所在区域的数据。
+ **可扩展辅助 Neptune 数据库集群** — 您可以通过添加只读副本数据库实例来扩展辅助集群。因为辅助集群是只读的，所以每个集群最多可以支持 16 个只读副本，而不是通常的 15 个限制。
+ **快速复制到辅助数据库集群** — 从主数据库集群到辅助数据库集群的复制速度很快，延迟通常不到一秒，对主数据库集群的性能影响很小。由于复制是在存储级别执行的，因此数据库实例资源完全可用于应用程序读取和写入工作负载。
+ **从区域范围内的中断中恢复** — 与传统复制解决方案相比，辅助数据库集群使您能够更快地将主集群移动到一个新的区域，RTO 更低且数据丢失更少（RPO 更低）。

## Amazon Neptune 中全球数据库的限制
<a name="neptune-gdb-limitations"></a>

以下限制目前适用于 全局数据库：
+ Neptune 全球数据库仅在以下 AWS 区域可用：
  + 美国东部（弗吉尼亚州北部）：`us-east-1`
  + 美国东部（俄亥俄州）：`us-east-2`
  + 美国西部（北加利福尼亚）：`us-west-1`
  + 美国西部（俄勒冈州）：`us-west-2`
  + 加拿大西部（卡尔加里）：`ca-west-1`
  + 欧洲（西班牙）：`eu-south-2`
  + 欧洲地区（爱尔兰）：`eu-west-1`
  + 欧洲地区（伦敦）：`eu-west-2`
  + 欧洲地区（法兰克福）：`eu-central-1`
  + 亚太地区（东京）：`ap-northeast-1`
  + 亚太地区（大阪）：`ap-northeast-3`
  + 亚太地区（新加坡）：`ap-southeast-1`
  + 亚太地区（雅加达）：`ap-southeast-3`
  + 亚太地区（墨尔本）：`ap-southeast-4`
  + 亚太地区（马来西亚）：`ap-southeast-5`
  + 以色列（特拉维夫）：`il-central-1`
+  Neptune 全球数据库不支持 `db.t3.medium` 或 `db.t4g.medium` 实例类型。
+ Neptune 全球数据库不支持自动扩缩辅助数据库集群。
+ 在对该全球数据库执行主要版本升级时，无法将自定义参数组应用于全球数据库集群。相反，在全球集群的每个区域中创建自定义参数组，然后在升级后手动将它们应用于区域集群。
+ 您无法单独停止或启动全球数据库中的数据库集群。
+ 在某些情况下，辅助数据库集群中的只读副本实例可能会重新启动，包括在维护时段内进行的计划内升级。如果主集群的写入器实例重新启动或失效转移，则辅助区域中的所有实例也将重新启动。随后辅助集群将不可用，直到其所有实例与主数据库集群的写入器实例恢复同步。

# 设置 Amazon Neptune 全球数据库
<a name="neptune-gdb-setup"></a>

您可以通过以下方式之一创建 Neptune 全球数据库：
+ [使用所有新的数据库集群和实例创建全球数据库](#neptune-gdb-creating-cli)。
+ [使用现有 Neptune 数据库集群作为主集群创建全球数据库](#neptune-gdb-add-existing)。

**Topics**
+ [

## Amazon Neptune 中全球数据库的配置要求
](#neptune-gdb-setup-config)
+ [

## 使用在 AWS CLI Amazon Neptune 中创建全球数据库
](#neptune-gdb-creating-cli)
+ [

## 将现有数据库集群转换为全球数据库
](#neptune-gdb-add-existing)
+ [

## 在 Amazon Neptune 中向主区域添加辅助全球数据库区域
](#neptune-gdb-attaching)
+ [

## 连接到 Neptune 全球数据库
](#neptune-gdb-connect)

## Amazon Neptune 中全球数据库的配置要求
<a name="neptune-gdb-setup-config"></a>

Neptune 全球数据库至少跨越两个。 AWS 区域主 AWS 区域 包含具有一个写入器实例的 Neptune 数据库集群。一到五个辅助 AWS 区域 中的每一个区域都包含一个只读 Neptune 数据库集群，该集群完全由只读副本实例组成。至少需要一所 AWS 区域 中学。

组成全球数据库的 Neptune 数据库集群具有以下特定要求：
+ **数据库实例类要求** — 全球数据库需要针对内存密集型工作负载进行优化的 `r5` 或 `r6g` 数据库实例类，例如 `db.r5.large` 实例类型。
+ **AWS 区域 要求** — 全局数据库需要一个主 Neptune 数据库集群合而为一 AWS 区域，并且至少需要一个位于不同区域的辅助 Neptune 数据库集群。您最多可以创建五个辅助只读 Neptune 数据库集群，每个集群必须在不同的区域中。换句话说，Neptune 全球数据库中没有两个 Neptune 数据库集群可位于同一个 AWS 区域中。
+ **引擎版本要求** — 全球数据库中的所有数据库集群使用的 Neptune 引擎版本应相同，并且必须大于或等于 `1.2.0.0`。如果您在创建新的全球数据库、集群或实例时未指定引擎版本，则将使用最新的引擎版本。

**重要**  
尽管可以为全球数据库中的每个数据库集群单独配置数据库集群参数组，但最好在集群之间保持设置的一致性，以避免在必须将辅助集群提升为主集群时出现意外行为变化。例如，对于所有数据库集群中的对象索引、流等使用相同设置。

## 使用在 AWS CLI Amazon Neptune 中创建全球数据库
<a name="neptune-gdb-creating-cli"></a>

**注意**  
本节中的示例遵循使用反斜杠 (`\`) 作为行扩展符的 UNIX 惯例。对于 Windows，请用尖号 (`^`) 代替反斜杠。

**要使用创建全局数据库 AWS CLI**

1. 首先使用`[create-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/create-global-cluster.html)` AWS CLI 命令（封装 [CreateGlobalCluster](api-global-dbs.md#CreateGlobalCluster) API）创建一个空的全局数据库。指定要作为主区域的 AWS 区域 的名称，将 Neptune 设置为数据库引擎，也可选择指定要使用的引擎版本（必须为 1.2.0.0 或更高版本）：

   ```
   aws neptune create-global-cluster
     --region (primary region, such as us-east-1) \
     --global-cluster-identifier (ID for the global database) \
     --engine neptune \
     --engine-version (engine version; this is optional)
   ```

1. 全球数据库可能需要几分钟才能可用，因此在转入下一步之前，请使用 `[describe-global-clusters](https://docs.aws.amazon.com/cli/latest/reference/neptune/describe-global-clusters.html)` CLI 命令（用于封装 [DescribeGlobalClusters](api-global-dbs.md#DescribeGlobalClusters) API）检查全球数据库是否可用：

   ```
   aws neptune describe-global-clusters \
     --region (primary region) \
     --global-cluster-identifier (global database ID)
   ```

1. 在 Neptune 全球数据库变为可用后，您可以创建一个新的 Neptune 数据库集群作为其主集群：

   ```
   aws neptune create-db-cluster \
     --region (primary region) \
     --db-cluster-identifier (ID for the primary DB cluster) \
     --engine neptune \
     --engine-version (engine version; must be >= 1.2.0.0) \
     --global-cluster-identifier (global database ID)
   ```

1. 使用`[describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/neptune/describe-db-clusters.html)` AWS CLI 命令确认新的数据库集群已准备就绪，可以添加其主数据库实例：

   ```
   aws neptune describe-db-clusters \
     --region (primary region) \
     --db-cluster-identifier (primary DB cluster ID)
   ```

   当响应显示 `"Status": "available"` 时，继续执行下一步。

1. 使用`[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/neptune/create-db-instance.html)` AWS CLI 命令为主集群创建主数据库实例。您必须使用内存优化型 `r5` 或 `r6g` 实例类型之一，例如 `db.r5.large`。

   ```
   aws neptune create-db-instance \
     --region (primary region) \
     --db-cluster-identifier (primary cluster ID) \
     --db-instance-class (instance class) \
     --db-instance-identifier (ID for the DB instance) \
     --engine neptune \
     --engine-version (optional: engine version)
   ```

**注意**  
如果您计划使用 Neptune 批量加载程序向新的主数据库集群添加数据，请在添加辅助区域*之前*执行此操作。这比在全球数据库完全设置完毕后执行批量加载更快、更具成本效益。

现在，向新的全球数据库添加一个或多个辅助区域，如[使用添加次要区域 AWS CLI](#neptune-gdb-attach-cli)中所述。

## 将现有数据库集群转换为全球数据库
<a name="neptune-gdb-add-existing"></a>

要将现有数据库集群转换为全局数据库，请使用`[create-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/create-global-cluster.html)` AWS CLI 命令创建一个与现有数据库集群所在位置 AWS 区域 相同的新全局数据库，并将其`--source-db-cluster-identifier`参数设置为位于此处的现有集群的 Amazon 资源名称 (ARN)：

```
aws neptune create-global-cluster \
  --region (region where the existing cluster is located) \
  --global-cluster-identifier (provide an ID for the new global database) \
  --source-db-cluster-identifier (the ARN of the existing DB cluster) \
  --engine neptune \
  --engine-version (engine version; this is optional)
```

现在，向新的全球数据库添加一个或多个辅助区域，如[使用添加次要区域 AWS CLI](#neptune-gdb-attach-cli)中所述。

### 使用从快照还原的数据库集群作为主集群
<a name="neptune-gdb-use-snapshot"></a>

您可以将从快照还原的数据库集群转换成 Neptune 全球数据库。完成还原后，将它创建的数据库集群转换为新的全球数据库的主集群，如上所述。

## 在 Amazon Neptune 中向主区域添加辅助全球数据库区域
<a name="neptune-gdb-attaching"></a>

Neptune 全局数据库需要至少一个辅助 Neptune 数据库集群位于与主数据库集群 AWS 区域 不同的集群中。您最多可以将五个辅助数据库集群附加到主数据库集群。

您添加的每个辅助数据库集群都会将主集群上可拥有的最大只读副本实例数减少一个。例如，如果有 4 个辅助集群，则主集群上可以拥有的最大只读副本实例数为 `15 - 4 = 11`。这意味着，如果主数据库集群和一个辅助集群中已经有 14 个读取器实例，则无法添加另一个辅助集群。

### 在 AWS CLI Neptune 中使用向全局数据库添加辅助区域
<a name="neptune-gdb-attach-cli"></a>

**要将辅助数据库添加 AWS 区域 到 Neptune 全局数据库，请使用 AWS CLI**

1. 使用`[create-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/create-db-cluster.html)` AWS CLI 命令在与主集群不同的区域创建新的数据库集群，并设置其`--global-cluster-identifier`参数以指定全局数据库的 ID：

   ```
   aws neptune create-db-cluster \
     --region (the secondary region) \
     --db-cluster-identifier (ID for the new secondary DB cluster) \
     --global-cluster-identifier (global database ID)
     --engine neptune \
     --engine-version (optional: engine version)
   ```

1. 使用`[describe-db-clusters](https://docs.aws.amazon.com/cli/latest/reference/neptune/describe-db-clusters.html)` AWS CLI 命令确认新的数据库集群已准备就绪，可以添加其主数据库实例：

   ```
   aws neptune describe-db-clusters \
     --region (primary region) \
     --db-cluster-identifier (primary DB cluster ID)
   ```

   当响应显示 `"Status": "available"` 时，继续执行下一步。

1. 使用`[create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/neptune/create-db-instance.html)` AWS CLI 命令为主集群创建主数据库实例，使用`r5`或实例类中的`r6g`实例类型：

   ```
   aws neptune create-db-instance \
     --region (secondary region) \
     --db-cluster-identifier (secondary cluster ID) \
     --db-instance-class (instance class) \
     --db-instance-identifier (ID for the DB instance) \
     --engine neptune \
     --engine-version (optional: engine version)
   ```

**注意**  
如果您不打算在辅助区域中处理大量读取请求，而主要关心的是将数据可靠地备份到辅助区域，则可以创建一个没有数据库实例的辅助数据库集群。这样可以节省资金，因为这样您只需为辅助集群的存储付费，而 Neptune 会将此存储与主数据库集群中的存储保持同步。

## 连接到 Neptune 全球数据库
<a name="neptune-gdb-connect"></a>

连接到 Neptune 全球数据库的方式取决于您是需要写入数据库还是从数据库读取：
+ 对于只读请求或查询，请连接到 AWS 区域中 Neptune 集群的读取器端点。
+ 要运行突变查询，请连接到主数据库集群的集群终端节点，该集群可能与您的应用程序 AWS 区域 不同。

# 管理 Amazon Neptune 全球数据库
<a name="neptune-gdb-managing"></a>

除了托管式计划内失效转移以外，您可对构成 Neptune 全球数据库的各个集群执行大多数的管理操作。托管式计划内失效转移过程仅适用于 Neptune 全球数据库，而不适用于单个 Neptune 数据库集群。要了解更多信息，请参阅[执行 Neptune 全球数据库的托管式计划内失效转移](neptune-gdb-disaster-recovery.md#neptune-gdb-managed-failover)。

要从主区域的计划外停机中恢复 Neptune 全球数据库，请参阅[Detach-and-promote 计划外停机时使用 Neptune 全球数据库](neptune-gdb-disaster-recovery.md#neptune-gdb-detach-and-promote)。

尽管您可以为全球数据库中的每个 Neptune 集群独立配置数据库集群参数组，但最好在所有集群之间保持设置一致，以避免在辅助集群提升为主集群时出现意外的行为变化。例如，对于所有数据库集群中的对象索引、流等使用相同设置。

# 从 Neptune 全球数据库中移除数据库集群
<a name="neptune-gdb-detaching"></a>

出于多种原因，您可能要从全球数据库中移除数据库集群。例如：
+ 如果主集群已降级或处于隔离状态，则可以将其从全球数据库中移除，这样它就会变成一个可用于创建新的全球数据库的独立预调配集群（请参阅[Detach-and-promote 计划外停机时使用 Neptune 全球数据库](neptune-gdb-disaster-recovery.md#neptune-gdb-detach-and-promote)）。
+ 如果您要删除全球数据库，首先必须从全球数据库移除（分离）所有关联集群，仅保留主集群（请参阅[删除 Neptune 全球数据库](neptune-gdb-deleting.md)）。

您可以使用 [remove-from-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/remove-from-global-cluster.html)CLI 命令（包装 [RemoveFromGlobalCluster](api-global-dbs.md#RemoveFromGlobalCluster) API）将 Neptune 数据库集群与全局数据库分离：

```
aws neptune remove-from-global-cluster \
  --region (region of the cluster to remove) \
  --global-cluster-identifier (global database ID) \
  --db-cluster-identifier (ARN of the cluster to remove)
```

然后，分离的数据库集群就会变成独立的数据库集群。

# 删除 Neptune 全球数据库
<a name="neptune-gdb-deleting"></a>

您不能通过单个步骤删除全球数据库及其关联集群。相反，您必须逐一删除其组件：

1. 如[移除集群](neptune-gdb-detaching.md)中所述，从全球数据库中分离所有辅助数据库集群。如果您愿意，您现在可以单独删除它们。

1. 从全球数据库分离主数据库集群。

1. 从主集群中删除所有只读副本数据库实例。

1. 从主集群删除主（写入器）数据库实例。如果您在控制台上执行此操作，它也会删除数据库集群。

1. 删除全球数据库本身。要使用执行此操作 AWS CLI，请使用 [delete-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/delete-global-cluster.html)CLI 命令（封装 [DeleteGlobalCluster](api-global-dbs.md#DeleteGlobalCluster) API），如下所示：

   ```
   aws neptune delete-global-cluster \
     --region (region of the DB cluster to delete) \
     --global-cluster-identifier (global database ID)
   ```

# 修改 Neptune 全球数据库
<a name="neptune-gdb-modifying"></a>

可以为全球数据库中的每个 Neptune 数据库集群单独配置数据库集群参数组，但最好在集群之间保持设置的一致性，以避免在必须将辅助集群提升为主集群时出现意外行为变化。

您可以使用 [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/neptune/modify-global-cluster.html)CLI 命令（封装 [ModifyGlobalCluster](api-global-dbs.md#ModifyGlobalCluster) API）修改全局数据库本身的设置。例如，您可以更改全球数据库标识符，同时关闭删除保护，如下所示：

```
aws neptune modify-global-cluster \
  --region (region of the DB cluster to modify) \
  --global-cluster-identifier (current global database ID) \
  --new-global-cluster-identifier (new global database ID to assign) \
  --no-deletion-protection
```

# 执行灾难恢复 Amazon Neptune
<a name="neptune-gdb-disaster-recovery"></a>

Neptune 全球数据库提供的失效转移功能比独立 Neptune 数据库集群提供的失效转移功能更全面。使用全球数据库，您可以对灾难进行规划并很快地从灾难中恢复。通常使用对恢复时间目标 (RTO) 和恢复点目标 (RPO) 的评测来评测灾难恢复：
+ **恢复时间目标 (RTO) **— 灾难后系统恢复工作状态的速度。换言之，RTO 用于衡量停机时间。对于 Neptune 全球数据库，RTO 大约为数分钟。
+ **恢复点目标 (RPO)** — 数据丢失的时间段。对于 Neptune 全球数据库，RPO 通常以秒为单位进行测量（请参阅[执行 Neptune 全球数据库的托管式计划内失效转移](#neptune-gdb-managed-failover)）。

对于 Neptune 全球数据库，失效转移方法有两种不同的方法：
+ **Detach-and-promote （手动计划外恢复）**— 要从计划外中断中恢复或进行灾难恢复测试（灾难恢复测试），请在全局数据库中的一个辅助数据库集群 detach-and-promote上执行跨区域操作。此手动过程的 RTO 取决于您执行 [分离并提升](#neptune-gdb-detach-and-promote) 中列出的任务的速度。RPO 通常为数秒，但这取决于发生故障时整个网络的存储复制滞后时间。
+ **托管式计划内失效转移** — 此方法适用于操作维护和其它计划内操作过程，例如将全球数据库的主数据库集群迁移到辅助区域之一。由于此过程会在进行任何其它更改之前将辅助数据库集群与主数据库集群同步，因此 RPO 实际上为 0（也即不会造成数据丢失）。请参阅[执行 Neptune 全球数据库的托管式计划内失效转移](#neptune-gdb-managed-failover)。

## Detach-and-promote 计划外停机时使用 Neptune 全球数据库
<a name="neptune-gdb-detach-and-promote"></a>

在极少数情况下，您的 Neptune 全局数据库在主数据库中出现意外中断 AWS 区域，您的主 Neptune 数据库集群及其写入节点将不可用，并且主集群和辅助集群之间的复制将停止。要最大限度地减少由此产生的停机时间 (RTO) 和数据丢失 (RPO)，请快速执行跨区域 detach-and-promote重建全球数据库。

**提示**  
在使用此过程之前，最好先了解一下该过程，并制定一个计划，以便在出现区域范围问题的第一个迹象时迅速采取行动。  
 CloudWatch 定期使用 Amazon 跟踪辅助集群的延迟时间，以便在需要进行故障转移时可以确定延迟时间最小的辅助区域。
确保测试您的计划，以检查过程是否完整和准确。
使用模拟环境以确保您的员工接受过培训，准备好在必要时快速执行灾难恢复失效转移。

**在主区域发生计划外停机后失效转移到辅助集群**

1. 停止在主数据库集群上发出突变查询和其它写入操作。

1. 在辅助数据库中标识一个数据库集群 AWS 区域 以用作全局数据库的新主数据库集群。如果全球数据库有两个或更多辅助 AWS 区域，请选择滞后时间最小的辅助集群。

1. 从 Neptune 全球数据库中分离您选择的辅助数据库集群。

   从 Neptune 全局数据库中移除辅助数据库集群会立即停止将数据从主数据库群集复制到该辅助数据库群集，并将其提升为具有完整 read/write 功能的独立数据库集群。全球数据库中的任何其它辅助集群仍可用，并且可以接受来自应用程序的读取调用。

   在重新创建 Neptune 全球数据库之前，您还必须分离其它辅助集群，以避免集群间的数据不一致（请参阅[移除集群](neptune-gdb-detaching.md)）。

1. 重新配置应用程序，以使用新的端点将所有写入操作发送到您选择成为新主集群的独立 Neptune 数据库集群。如果您在创建 Neptune 全球数据库时接受了默认名称，则可以在应用程序中从集群的端点字符串中移除 `-ro` 以更改端点。

   例如，辅助集群的端点 `my-global.cluster-ro-aaaaaabbbbbb.us-west-1.neptune.amazonaws.com` 将在该集群从全球数据库分离时变为 `my-global.cluster-aaaaaabbbbbb.us-west-1.neptune.amazonaws.com`。

   在下一步中，当您开始向此 Neptune 数据库集群添加区域时，该 Neptune 数据库集群将成为新的 Neptune 全球数据库的主集群。

1. 向 AWS 区域 数据库集群添加。执行此操作后，从主数据库集群到辅助数据库集群的复制过程将会开始。请参阅[在 Amazon Neptune 中向主区域添加辅助全球数据库区域](neptune-gdb-setup.md#neptune-gdb-attaching)。

1. 根据需要添加更多内容 AWS 区域 ，以重新创建支持您的应用程序所需的拓扑。

确保在进行这些更改之前、期间和之后，将应用程序写入发送到正确的 Neptune 数据库集群。这样做可以避免 Neptune 全球数据库中数据库集群之间的数据不一致（这些问题称为脑裂问题）。

## 执行 Neptune 全球数据库的托管式计划内失效转移
<a name="neptune-gdb-managed-failover"></a>

托管计划内故障转移允许您随时将 Neptune 全局数据库的主群集迁移到 AWS 区域 其他群集。一些组织希望定期轮换其主集群位置。

**注意**  
此处介绍的托管式计划内失效转移适合在运行正常的 Neptune 全球数据库上使用。要从计划外停机中恢复或进行灾难恢复 (DR) 测试，请改为按照[分离并提升](#neptune-gdb-detach-and-promote)过程进行操作。

在托管式计划内失效转移期间，主集群会将失效转移到您选择的辅助区域，同时保留全球数据库的现有复制拓扑。在托管式计划内失效转移过程开始之前，全球数据库会将所有辅助集群与其主集群同步。确保所有集群都同步后，托管的计划内故障转移才会开始。主区域中的数据库集群变为只读的，所选辅助集群将其一个只读实例提升为完全写入器状态，从而允许该集群担任主集群的角色。由于所有辅助集群在过程开始时都与主集群同步，因此新的主集群将继续执行全球数据库的操作，而不会丢失任何数据。数据库仅在短时间内不可用，而主集群和所选的辅助集群将担任其新角色。

要优化应用程序可用性，您可以在非高峰时间段（向主数据库集群写入操作最少的时候）执行失效转移。此外，在开始失效转移之前，请采取以下步骤：
+ 尽可能使应用程序离线，以减少对主集群的写入。
+ 检查全球数据库中所有辅助 Neptune 数据库集群的滞后时间，然后选择总体滞后时间最少的辅助集群成为主集群。使用 Amazon CloudWatch 查看所有辅助`NeptuneGlobalDBProgressLag`指标的指标。此指标会指出辅助数据库集群滞后于主数据库集群的时间（以毫秒为单位）。它的值与 Neptune 完成失效转移所需的时间成正比。换言之，滞后值越大，失效转移停机时间越长，因此请选择滞后值最小的辅助数据库集群。请参阅[Neptun CloudWatch e 指标](cw-metrics.md)了解更多信息。

在托管式计划内失效转移期间，所选的辅助数据库集群将提升为新角色（即主数据库集群），但它不会继承主数据库集群的完全配置。配置不匹配可能会导致性能问题、工作负载不兼容和其他异常行为。要避免此类问题，请在失效转移之前解决全球数据库集群之间的以下几种配置差异：
+ **在新的主数据库集群中配置参数以匹配当前主数据库集群**。
+ **配置监控工具、选项和警报** — 配置将成为新的主数据库集群的数据库集群，该集群与当前主数据库具有相同的日志记录功能、警报等。
+ **配置与其他 AWS 服务的集成** — 如果您的 Neptune 全球数据库 AWS 与 (IAM)、Amazon S3 AWS Lambda或 AWS Identity and Access Management 等服务集成，请确保根据需要配置这些服务以与新的主数据库集群集集成。

当失效转移过程完成并且提升的数据库集群已准备好处理全球数据库的写入操作时，请确保更改您的应用程序以使用新的主数据库的新端点。

### 使用启动 AWS CLI 托管计划内故障转移
<a name="neptune-gdb-managed-failover-cli"></a>

使用 [failover-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/failover-global-cluster.html)CLI 命令（包装 [FailoverGlobalCluster](api-global-dbs.md#FailoverGlobalCluster) API）对您的 Neptune 全局数据库进行故障切换：

```
aws neptune failover-global-cluster \
  --region (the region where the primary cluster is located) \
  --global-cluster-identifier (global database ID) \
  --target-db-cluster-identifier (the ARN of the secondary DB cluster to promote)
```

# 使用 CloudWatch 指标监控 Amazon Neptune 全球数据库
<a name="neptune-gdb-monitoring"></a>

Neptune 支持以下 CloudWatch 指标，您可以使用这些指标来监控 Neptune 全球数据库：
+ **`GlobalDbDataTransferBytes`** – 在 Neptune 全球数据库中，从主要 AWS 区域传输到辅助 AWS 区域的重做日志数据的字节数。
+ **`GlobalDbReplicatedWriteIO`** – 这是在全球数据库中从主要 AWS 区域复制到辅助 AWS 区域中的集群卷的写入 I/O 操作数。

  Neptune 全球数据库中每个数据库集群的账单计算使用 `VolumeWriteIOPS` 指标来考虑在该集群中执行的写入。对于主数据库集群，账单计算使用 `NeptuneGlobalDbReplicatedWriteIO` 考虑向辅助数据库集群的跨区域复制。
+ **`GlobalDbProgressLag`** – 对于用户事务和系统事务，辅助集群落后于主集群的毫秒数。


| 指标 | 维度 | 发布位置 | 单位 | 
| --- | --- | --- | --- | 
| `GlobalDbDataTransferBytes` | SourceRegion、DBClusterIdentifier | 辅助 | 字节 | 
| `GlobalDbReplicatedWriteIO` | SourceRegion、DBClusterIdentifier | 辅助 | 计数 | 
| `GlobalDbProgressLag` | DBClusterIdentifier、SecondaryRegion：在主数据库集群中；DBClusterIdentifier、SourceRegion：在辅助数据库集群中 | 主、辅助 | 毫秒 | 