

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

# 设置 Neptune-to-Neptune 复制
<a name="streams-disaster-recovery-setup"></a>

主生产数据库集群位于给定源区域的 VPC 中。为了进行灾难恢复，您需要在不同的恢复区域中复制或模拟三项主要内容：
+ 存储在集群中的数据。
+ 主集群的配置。这将包括它是否使用 IAM 身份验证、是否已加密、其数据库集群参数、其实例参数、实例大小等。
+ 它使用的网络拓扑，包括目标 VPC、其安全组等。

您可以使用如下所示的 Neptune 管理 API 来收集这些信息：
+ [`DescribeDBClusters`](api-clusters.md#DescribeDBClusters)
+ [`DescribeDBInstances`](api-instances.md#DescribeDBInstances)
+ [`DescribeDBClusterParameters`](api-parameters.md#DescribeDBClusterParameters)
+ [`DescribeDBParameters`](api-parameters.md#DescribeDBParameters)
+ [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)

根据您收集的信息，您可以使用以下过程在不同的区域中设置备份集群，如果出现故障，您的生产集群可以失效转移到该备份集群。

## 启用 Neptune 流
<a name="streams-disaster-recovery-setup-enable-streams"></a>

您可以使用 [ModifyDBClusterParameterGroup](api-parameters.md#ModifyDBClusterParameterGroup) 将 `neptune_streams` 参数设置为 1。然后，重启数据库集群中的所有实例，以使更改生效。

启用 Neptune 流后，最好在源数据库集群上至少执行一次添加或更新操作。这会在更改流中填充数据点，以后在将生产集群与备份集群重新同步时可以参考这些数据点。

## 在要设置备份集群的区域中创建新的 VPC
<a name="streams-disaster-recovery-setup-new-vpc"></a>

在与主集群不同的区域中创建新的 Neptune 数据库集群之前，您需要在目标区域建立一个新的 VPC 来托管该集群。主集群和备份集群之间的连接是通过 VPC 对等连接建立的，而 VPC 对等连接使用不同 VPC 中的私有子网间的流量。但是，要在两个 VPC 之间建立 VPC 对等连接，它们的 CIDR 块或 IP 地址空间不得重叠。这意味着，您不能在这两个区域中都只使用默认 VPC，因为默认 VPC 的 CIDR 块始终相同 (`172.31.0.0/16`)。

您可以使用目标区域中的现有 VPC，只要它满足以下条件即可：
+ 它的 CIDR 块不与您的主集群所在 VPC 的 CIDR 块重叠。
+ 它与另一个 VPC（与您的主集群所在的 VPC 具有相同 CIDR 块）尚未建立对等连接。

如果目标区域中没有合适的 VPC 可用，请使用 Amazon EC2 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVpc.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateVpc.html) API 创建一个。

## 创建主集群的快照并将其还原到目标备份区域
<a name="streams-disaster-recovery-setup-snapshot-restore"></a>

现在，您可以在目标备份区域的相应 VPC 中创建一个新的 Neptune 集群，该集群是您的生产集群的副本：

**在备份区域中制作生产集群的副本**

1. 在目标备份区域中，重新创建生产数据库集群使用的参数和参数组。为此，您可以使用 [`CreateDBClusterParameterGroup`](api-parameters.md#CreateDBClusterParameterGroup)、[`CreateDBParameterGroup`](api-parameters.md#CreateDBParameterGroup)、[`ModifyDBClusterParameterGroup`](api-parameters.md#ModifyDBClusterParameterGroup) 和 [`ModifyDBParameterGroup`](api-parameters.md#ModifyDBParameterGroup)。

   请注意，[`CopyDBClusterParameterGroup`](api-parameters.md#CopyDBClusterParameterGroup) 和 [`CopyDBParameterGroup`](api-parameters.md#CopyDBParameterGroup) API 目前不支持跨区域复制。

1. 使用 [`CreateDBClusterSnapshot`](api-snapshots.md#CreateDBClusterSnapshot) 在生产区域的 VPC 中创建生产集群的快照。

1. 使用 [`CopyDBClusterSnapshot`](api-snapshots.md#CopyDBClusterSnapshot) 将快照复制到目标备份区域中的 VPC。

1. 使用 [`RestoreDBClusterFromSnapshot`](api-snapshots.md#RestoreDBClusterFromSnapshot) 通过复制的快照在目标备份区域的 VPC 中创建新的数据库集群。使用您从主生产集群中复制的配置设置和参数。

1. 新的 Neptune 集群现已存在，但不包含任何实例。[`CreateDBInstance`](api-instances.md#CreateDBInstance)用于创建 primary/writer 实例类型和大小与生产集群的写入器实例相同的新实例。此时无需创建其他只读副本，除非您的备份实例将在故障转移之前用于为目标区域 I/O 的读取提供服务。

## 在主集群的 VPC 和新备份集群的 VPC 之间建立 VPC 对等连接
<a name="streams-disaster-recovery-setup-vpc-peering"></a>

通过设置 VPC 对等连接，您可以使主集群的 VPC 与备份集群的 VPC 通信，就像它们是单个私有网络一样。为此，请执行以下步骤：

1. 从生产集群的 VPC 中，调用 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateVpcPeeringConnection.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateVpcPeeringConnection.html) API 以建立对等连接。

1. 从目标备份集群的 VPC 中，调用 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/AcceptVpcPeeringConnection.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/AcceptVpcPeeringConnection.html) API 以接受对等连接。

1. 从生产集群的 VPC 中，使用 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html) API 向 VPC 的路由表添加一条路由，该路由将所有流量重定向到目标 VPC 的 CIDR 块，以便它使用 VPC 对等连接前缀列表。

1. 同样，从目标备份集群的 VPC，使用 [https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/CreateRoute.html) API 向 VPC 的路由表添加一条路由，该路由将流量路由到主集群的 VPC。

## 设置 Neptune 流复制基础设施
<a name="streams-disaster-recovery-setup-streams-replication"></a>

既然两个集群都已部署完毕，两个区域之间的网络通信也已建立，请使用[Neptune-to-Neptune CloudFormation 模板](streams-consumer-setup.md)部署 Neptune Streams 使用者 Lambda 函数以及支持数据复制的其他基础架构。在主生产集群的 VPC 中执行此操作。

您需要为此 CloudFormation 堆栈提供的参数是：
+ **`NeptuneStreamEndpoint`** – 主集群的流端点，采用 URL 格式。例如：`https://{{(cluster name)}}:8182/pg/stream`。
+ **`QueryEngine`** – 这必须是 `gremlin`、`sparql` 或 `openCypher`。
+ **`RouteTableIds`** – 允许您为 DynamoDB VPC 端点和监控 VPC 端点添加路由。

  如果主集群的 VPC 上尚不存在另外两个参数，即 `CreateMonitoringEndpoint` 和 `CreateDynamoDBEndpoint` ，则也必须将它们设置为 true。如果它们已经存在，请确保将其设置为 false，否则 CloudFormation 创建将失败。
+ **`SecurityGroupIds`** – 指定 Lambda 使用者用于与主集群的 Neptune 流端点通信的安全组。

  在目标备份集群中，附加一个允许来自该安全组的流量的安全组。
+ **`SubnetIds`** – 主集群 VPC 中的子网 ID 列表，Lambda 使用者可以使用该子网与主集群进行通信。
+ **`TargetNeptuneClusterEndpoint`** – 目标备份集群的集群端点（仅限主机名）。
+ **`TargetAWSRegion`**— 目标备份集群的 AWS 区域，例如`us-east-1`）。只有当目标备份集群的 AWS 区域与 Neptune 源集群的区域不同时（例如跨区域复制），您才必须提供此参数。如果源区域和目标区域相同，则此参数是可选的。

  请注意，如果该`TargetAWSRegion`值不是 Nep [tune 支持的有效 AWS 区域，](limits.md#limits-regions)则该过程将失败。
+ **`VPC`** – 主集群的 VPC 的 ID。

所有其它参数均可保留默认值。

 CloudFormation 模板部署完成后，Neptune 将开始将所有更改从主集群复制到备份集群。您可以在 Lambda 使用者函数生成的 CloudWatch 日志中监控此复制。