使用 Neptune 流跨区域复制进行灾难恢复 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用 Neptune 流跨区域复制进行灾难恢复

Neptune 提供了两种实施跨区域故障转移功能的方法:

  • 跨区域快照复制和还原

  • 使用 Neptune 流在两个不同区域的两个集群之间复制数据。

在不同区域中恢复 Neptune 群集时,跨区域快照复制和还原的操作开销最低。但是,在区域之间复制快照可能需要相当长的数据传输时间,因为快照是 Neptune 群集的完整备份。因此,跨区域快照复制和还原可用于只需要恢复点目标 (RPO) 小时和恢复时间目标 (RTO) 小时的情况。

恢复点目标 (RPO) 是根据备份之间的时间来衡量的。它定义了从上次进行备份到恢复数据库之间可能丢失的数据量。

恢复时间目标 (RTO) 是根据执行恢复操作所需的时间来衡量的。现在是数据库集群在发生故障后故障切换到已恢复的数据库所需的时间。

Neptune 流提供了一种使备份 Neptune 集群始终与主生产集群保持同步的方法。如果发生故障,则数据库将故障转移到备份群集。这将 RPO 和 RTO 缩短到几分钟,因为数据不断复制到备份群集,备份群集可随时作为故障转移目标立即使用。

以这种方式使用 Neptune 流的缺点是,维护复制组件所需的操作开销以及使第二个 Neptune 数据库集群始终在线的成本都可能很大。

设置海王星到 Neptune 复制

您的主生产数据库集群驻留在给定源区域的 VPC 中。为了进行灾难恢复,您需要在不同的恢复区域中复制或模拟三个主要内容:

  • 存储在群集中的数据。

  • 主群集的配置。这将包括它是否使用 IAM 身份验证、是否加密、数据库集群参数、实例参数、实例大小等)。

  • 它使用的网络拓扑,包括目标 VPC、其安全组等。

您可以使用像下面这样的 Neptune 管理 API 来收集该信息:

通过收集的信息,您可以使用以下过程在其他区域设置备份群集,如果发生故障,生产群集可以故障转移到该地区。

1:启用 Neptune 直播

您可以使用ModifyDBClusterParameterGroup要设置neptune_streams参数为 1。然后,重新启动数据库集群中的所有实例,以便更改生效。

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

2: 在您希望设置备份集群的区域创建新的 VPC

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

您可以使用目标区域中的现有 VPC,只要它满足以下条件即可:

  • 它没有与主集群所在的 VPC 的 CIDR 块重叠的 CIDR 块。

  • 它尚未与与您的主集群所在的 VPC 具有相同 CIDR 块的另一个 VPC 对等。

如果目标区域中没有合适的 VPC 可用,请使用 Amazon EC2 创建一个CreateVpcAPI。

3: 创建主集群的快照,然后将其还原到目标备份区域。

现在,您可以在作为生产集群副本的目标备份区域中的适当 VPC 中创建一个新的 Neptune 集群:

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

  1. 在目标备份区域中,重新创建生产数据库集群使用的参数和参数组。您可以使用此操作CreateDBClusterParameterGroupCreateDBParameterGroupModifyDBClusterParameterGroupModifyDBParameterGroup.

    请注意,CopyDBClusterParameterGroupCopyDBParameterGroupAPI 当前不支持跨区域复制。

  2. 使用CreateDBClusterSnapshot以在生产区域的 VPC 中创建生产集群的快照。

  3. 使用CopyDBClusterSnapshot将快照复制到目标备份区域中的 VPC。

  4. 使用RestoreDBClusterFromSnapshot使用复制的快照在目标备份区域的 VPC 中创建新的数据库集群。使用从主生产集群中复制的配置设置和参数。

  5. 现在,新 Neptune 集群已存在,但不包含任何实例。使用CreateDBInstance以创建一个与生产集群的写入器实例具有相同实例类型和大小的新主/写入器实例。此时无需创建额外的只读副本,除非在故障转移之前,您的备份实例将用于在目标区域中为读取 I/O 提供服务。

4:在主集群的 VPC 和新备份集群的 VPC 之间建立 VPC 对等互连

通过设置 VPC 对等互连,您可以使主集群的 VPC 与备份集群的 VPC 进行通信,就像它们是单个专用网络一样。为此,请执行以下步骤:

  1. 从生产集群的 VPC 中,调用CreateVpcPeeringConnection用于建立对等连接的 API。

  2. 从目标备份集群的 VPC 中,调用AcceptVpcPeeringConnection接受对等连接的 API。

  3. 在生产集群的 VPC 中,使用CreateRouteAPI 用于向 VPC 的路由表添加路由,该路由表将所有流量重定向到目标 VPC 的 CIDR 块,以便它使用 VPC 对等连接前缀列表。

  4. 同样,在目标备份集群的 VPC 中,使用CreateRouteAPI 用于向 VPC 的路由表中添加路由,该路由表将流量路由到主群集的 VPC。

5:设置 Neptune 流复制基础架构

既然两个群集都已部署并且两个区域之间的网络通信已经建立,请使用海王星到海王星Amazon CloudFormation模板使用支持数据复制的额外基础设施部署 Neptune 流消费者 Lambda 函数。在主生产集群的 VPC 中执行此操作。

你需要为此提供的参数Amazon CloudFormation堆栈是:

  • NeptuneStreamEndpoint— 主集群的流终端节点,URL 格式。例如:https://(cluster name):8182/pg/stream

  • QueryEngine— 必须是gremlinsparql,或者openCypher.

  • RouteTableIds— 允许您为 DynamoDB VPC 终端节点和监控 VPC 终端节点添加路由。

    另外两个参数,即CreateMonitoringEndpointCreateDynamoDBEndpoint,如果主群集的 VPC 中尚不存在它们,也必须将其设置为 true。如果它们已经存在,请确保它们设置为 false 或Amazon CloudFormation创建将失败。

  • SecurityGroupIds— 指定 Lambda 使用者用来与主集群的 Neptune 流终端节点进行通信的安全组。

    在目标备份群集中,附加一个允许来自此安全组的流量的安全组。

  • SubnetIds— 主群集 VPC 中可供 Lambda 使用者与主群集进行通信的子网 ID 列表。

  • TargetNeptuneClusterEndpoint— 目标备份群集的群集终端节点(仅限主机名)。

  • TargetAWSRegion— 目标备份群集的Amazon地区,例如us-east-1)。只有在Amazon目标备份群集的区域与 Neptune 源群集的区域不同,例如跨区域复制的情况。如果源区域和目标区域相同,则此参数是可选的。

    请注意,如果TargetAWSRegion价值不是有效AmazonNeptune 支持的地区,该过程失败。

  • VPC— 主群集的 VPC 的 ID。

所有其他参数都可以保留默认值。

曾经Amazon CloudFormation模板已部署,Neptune 将开始将主群集的任何更改复制到备份群集。您可以在 CloudWatch Lambda 消费者函数生成的日志。

其它考虑因素

  • 如果您需要在主群集和备份群集之间使用 IAM 身份验证,也可以在调用Amazon CloudFormation。

  • 如果在主群集上启用了静态加密,请考虑在将快照复制到目标区域并关联目标区域中的新 KMS 密钥时如何管理关联的 KMS 密钥。

  • 最佳做法是在应用程序中使用的 Neptune 终端节点之前使用 DNS CNAME。然后,如果您需要手动故障切换到目标备份群集,则可以更改这些 CNAME 以指向目标群集和/或实例终端节点。