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

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

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

Neptune 提供了两种实现跨区域失效转移功能的方法:

  • 跨区域快照复制和还原

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

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

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

恢复时间目标 (RTO) 是通过执行恢复操作所花费的时间来衡量的。这是数据库集群在故障发生后失效转移到已恢复的数据库所花费的时间。

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

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

设置 Neptune 到 Neptune 的复制

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

  • 存储在集群中的数据。

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

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

你可以使用如下所示的 Neptune 管理来收集APIs这些信息:

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

1:启用 Neptune 流

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

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

2:VPC在要设置备份集群的区域中创建一个新集群

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

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

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

  • 它尚未与与您的主集群VPC所在CIDR区块相同的其他VPC集群进行对等。

如果目标地区没有合适VPC的产品,请使用 Amazon 创建一个EC2CreateVpcAPI。

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

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

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

    请注意,CopyDBClusterParameterGroup和目前CopyDBParameterGroupAPIs不支持跨区域复制。

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

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

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

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

4:在主集群VPC和新备份集群之间建立VPC对等关系 VPC

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

  1. 在您的生产集群中VPC,调用CreateVpcPeeringConnectionAPI以建立对等连接。

  2. 在您的目标备份集群中VPC,调用AcceptVpcPeeringConnectionAPI以接受对等连接。

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

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

5:设置 Neptune 流复制基础设施

既然两个集群都已部署完毕,两个区域之间的网络通信也已建立,请使用海王星到海王星 AWS CloudFormation 模板用于部署 Neptune 流使用者 Lambda 函数以及支持数据复制的其他基础架构。在您的主生产集群中执行此操作VPC。

您需要为此提供的参数 AWS CloudFormation 堆栈是:

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

  • QueryEngine – 这必须是 gremlinsparqlopenCypher

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

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

  • SecurityGroupIds – 指定 Lambda 使用者用于与主集群的 Neptune 流端点通信的安全组。

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

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

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

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

    请注意,如果该TargetAWSRegion值无效 AWS Neptune 支持的区域,则该过程失败。

  • VPC— 主集群的 ID VPC。

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

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

其他考虑因素

  • 如果您需要在主集群和备份集群之间使用IAM身份验证,也可以在调用时进行设置 AWS CloudFormation 模板。

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

  • 最佳做法是在应用程序DNSCNAMEs中使用的 Neptune 端点前面使用。然后,如果您需要手动故障转移到目标备份集群,则CNAMEs可以将其更改为指向目标集群和/或实例终端节点。