设置路由控制组件 - Amazon 应用程序恢复控制器 (ARC)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

设置路由控制组件

第一步是创建集群。ARC 集群由五个终端节点组成,五个不同的终端节点各占一个 Amazon Web Services 区域。ARC 基础设施支持这些端点协同工作,从而保证故障转移操作的高可用性和顺序一致性。

1. 创建集群

1a. 创建集群。network-type是可选的,可以是IPV4DUALSTACK。默认值为 IPV4

aws route53-recovery-control-config create-cluster --cluster-name test --network-type DUALSTACK
"Cluster": { "ClusterArn": "arn:aws:route53-recovery-control::123456789123:cluster/12341234-1234-1234-1234-123412341234", "Name": "test", "Status": "PENDING", "Owner": "123456789123", "NetworkType": "DUALSTACK" }

首次创建 ARC 资源时,在创建集群PENDING时,其状态为。您可以通过调用 describe-cluster 查看其进度。

1b. 描述集群。

aws route53-recovery-control-config --region us-west-2 \ describe-cluster --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh
"Cluster": { "ClusterArn": "arn:aws:route53-recovery-control::123456789123:cluster/12341234-1234-1234-1234-123412341234", "Name": "test", "Status": "DEPLOYED", "Owner": "123456789123", "NetworkType": "DUALSTACK" }

当状态为 DEPLOYED 时,ARC 已成功创建集群,其中包含一组供您与之交互的终端节点。您可以通过调用 list-clusters 列出所有集群。

1c. 列出您的集群。

aws route53-recovery-control-config --region us-west-2 list-clusters
"Cluster": { "ClusterArn": "arn:aws:route53-recovery-control::123456789123:cluster/12341234-1234-1234-1234-123412341234", "Name": "test", "Status": "DEPLOYED", "Owner": "123456789123", "NetworkType": "DUALSTACK" }

1d。更新集群的网络类型。选项有 IPV4DUALSTACK

aws route53-recovery-control-config update-cluster \ --cluster-arn arn:aws:route53-recovery-control::123456789123:cluster/12341234-1234-1234-1234-123412341234 \ --network-type DUALSTACK
"Cluster": { "ClusterArn": "arn:aws:route53-recovery-control::123456789123:cluster/12341234-1234-1234-1234-123412341234", "Name": "test", "Status": "PENDING", "Owner": "123456789123", "NetworkType": "DUALSTACK" }

2. 创建控制面板

控制面板是用于组织 ARC 路由控件的逻辑分组。当您创建集群时,ARC 会自动为您调用提供一个控制面板DefaultControlPanel。您可以立即使用该控制面板。

一个控制面板只能存在于一个集群中。如果要将控制面板移到另一个集群,则必须将其删除,然后在第二个集群中创建它。您可以通过调用 list-control-panels 查看账户中的所有控制面板。要仅查看特定集群中的控制面板,请添加 --cluster-arn 字段。

2a. 列出控制面板。

aws route53-recovery-control-config --region us-west-2 \ list-control-panels --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/eba23304-1a51-4674-ae32-b4cf06070bdd
{ "ControlPanels": [ { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/1234567dddddd1234567dddddd1234567", "ClusterArn": "arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh", "DefaultControlPanel": true, "Name": "DefaultControlPanel", "RoutingControlCount": 0, "Status": "DEPLOYED" } ] }

也可以选择通过调用 create-control-panel 创建自己的控制面板。

2b. 创建控制面板。

aws route53-recovery-control-config --region us-west-2 create-control-panel \ --control-panel-name NewControlPanel2 \ --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh
{ "ControlPanel": { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "ClusterArn": "arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh", "DefaultControlPanel": false, "Name": "NewControlPanel2", "RoutingControlCount": 0, "Status": "PENDING" } }

首次创建 ARC 资源时,其状态为创建PENDING时。您可以通过调用 describe-control-panel 查看进度。

2c. 描述控制面板。

aws route53-recovery-control-config --region us-west-2 describe-control-panel \ --control-panel-arn arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456
{ "ControlPanel": { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "ClusterArn": "arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh", "DefaultControlPanel": true, "Name": "DefaultControlPanel", "RoutingControlCount": 0, "Status": "DEPLOYED" } }

3. 创建路由控制

现在您已设置集群并查看控制面板,接着可以开始创建路由控制。创建路由控制时,您必须至少指定路由控制所在集群的 Amazon 资源名称 (ARN)。您也可以为路由控制指定控制面板的 ARN。您还需要指定控制面板所在的集群。

如果您未指定控制面板,路由控制将添加到自动创建的控制面板 DefaultControlPanel

通过调用 create-routing-control 创建路由控制。

3a. 创建路由控制。

aws route53-recovery-control-config --region us-west-2 create-routing-control \ --routing-control-name NewRc1 \ --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh
{ "RoutingControl": { "ControlPanelArn": " arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "Name": "NewRc1", "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567", "Status": "PENDING" } }

路由控件遵循与其他 ARC 资源相同的创建模式,因此您可以通过调用 describe 操作来跟踪它们的进度。

3b. 描述路由控制。

aws route53-recovery-control-config --region us-west-2 describe-routing-control \ --routing-control-arn arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567
{ "RoutingControl": { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "Name": "NewRc1", "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567", "Status": "DEPLOYED" } }

您可以通过调用 list-routing-controls 列出控制面板中的路由控制。控制面板 ARN 为必填项。

3c. 列出路由控制。

aws route53-recovery-control-config --region us-west-2 list-routing-controls \ --control-panel-arn arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456
{ "RoutingControls": [ { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "Name": "Rc1", "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567", "Status": "DEPLOYED" }, { "ControlPanelArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456", "Name": "Rc2", "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/hijklmnop987654321", "Status": "DEPLOYED" } ] }

在使用路由控制状态的以下示例中,我们假设您有本节中列出的两个路由控制(Rc1 和 Rc2)。在本例中,每个路由控制代表部署了应用程序的一个可用区。

4. 创建安全规则

同时使用多个路由控制时,您可能会决定在启用和禁用它们时采取一些保障措施,以避免意想不到的后果,例如关闭两个路由控制和停止所有流量。要创建这些安全措施,您需要创建路由控制安全规则。

安全规则有两种类型:断言规则和门控规则。如需了解有关安全规则的详情,请参阅为路径控制创建安全规则

以下调用提供了创建断言规则的示例,该规则可确保在任何给定时间至少将两个路由控制之一设置为 On。要创建规则,请运行使用 assertion-rule 参数的 create-safety-rule

有关断言规则 API 操作的详细信息,请参阅 AssertionRuleAmazon 应用程序恢复控制器的路由控制 API 参考指南。

4a. 创建断言规则。

aws route53-recovery-control-config --region us-west-2 create-safety-rule \ --assertion-rule '{"Name": "TestAssertionRule", "ControlPanelArn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx", "WaitPeriodMs": 5000, "AssertedControls": ["arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/def123def123def" "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/ghi456ghi456ghi"], "RuleConfig": {"Threshold": 1, "Type": "ATLEAST", "Inverted": false}}'
{ "Rule": { "ASSERTION": { "Arn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/safetyrule/333333444444", "AssertedControls": [ "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/def123def123def" "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/ghi456ghi456ghi"], "ControlPanelArn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx", "Name": "TestAssertionRule", "RuleConfig": { "Inverted": false, "Threshold": 1, "Type": "ATLEAST" }, "Status": "PENDING", "WaitPeriodMs": 5000 } } }

以下调用提供了创建门控规则的示例,该规则为控制面板中的一组目标路由控制提供了整体的“开启/关闭”或“门控”开关。这样便可以禁止更新目标路由控制,例如,自动化机制无法进行未授权更新。在本例中,门控开关是通过 GatingControls 参数指定的路由控制,受到控制或“门控”的两个路由控制通过 TargetControls 参数指定。

注意

在创建门控规则之前,必须创建门控路由控制(不包括 DNS 故障转移记录)和目标路由控制(需配置有 DNS 故障转移记录)。

要创建规则,请运行使用 gating-rule 参数的 create-safety-rule

有关断言规则 API 操作的详细信息,请参阅 GatingRuleAmazon 应用程序恢复控制器的路由控制 API 参考指南。

4b. 创建门控规则。

aws route53-recovery-control-config --region us-west-2 create-safety-rule \ --gating-rule '{"Name": "TestGatingRule", "ControlPanelArn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx", "WaitPeriodMs": 5000, "GatingControls": ["arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/def123def123def"] "TargetControls": ["arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/ghi456ghi456ghi", "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/lmn789lmn789lmn"], "RuleConfig": {"Threshold": 0, "Type": "OR", "Inverted": false}}'
{ "Rule": { "GATING": { "Arn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/safetyrule/444444444444", "GatingControls": [ "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/def123def123def" ], "TargetControls": [ "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/ghi456ghi456ghi" "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx/routingcontrol/lmn789lmn789lmn" ], "ControlPanelArn": "arn:aws:route53-recovery-control::888888888888:controlpanel/zzz123yyy456xxx789zzz123yyy456xxx", "Name": "TestGatingRule", "RuleConfig": { "Inverted": false, "Threshold": 0, "Type": "OR" }, "Status": "PENDING", "WaitPeriodMs": 5000 } } }

与其他路由控制资源一样,您可以在安全规则传播到数据平面后对其进行描述、列出或删除。

设置一个或多个安全规则后,您可以继续与集群交互,以设置或检索路由控制的状态。如果某项 set-routing-control-state 操作违反了您创建的规则,您将收到类似下方的异常:

Cannot modify control state for [0123456bbbbbbb0123456bbbbbb01234560123 abcdefg1234567] due to failed rule evaluation 0123456bbbbbbb0123456bbbbbb0123456333333444444

第一个标识符是控制面板 ARN 与路由控制 ARN 的连接体。第二个标识符是控制面板 ARN 与安全规则 ARN 的连接体。

5. 创建运行状况检查

要使用路由控制对流量进行故障转移,您可以在 Amazon Route 53 中创建运行状况检查,然后将运行状况检查与您的 DNS 记录关联起来。为了故障转移流量,ARC 路由控制会将运行状况检查设置为失败,这样 Route 53 就会重新路由流量。(运行状况检查对应用程序的运行状况无效;它只是用作重新路由流量的方法。)

举个例子,假设您有两个单元(区域或可用区)。您可以将一个单元配置为应用程序的主单元,将另一个配置为辅助单元,以便进行故障切换。

要为失效转移设置运行状况检查,您可以执行以下操作,例如:

  1. 使用 ARC CLI 为每个信元创建路由控制。

  2. 使用 Route 53 CLI 在 Route 53 中为每个路由控制创建 ARC 运行状况检查。

  3. 使用 Route 53 CLI 在 Route 53 中创建两个失效转移 DNS 记录,并将运行状况检查与每个记录关联起来。

5a. 为每个单元格创建路由控制。

aws route53-recovery-control-config --region us-west-2 create-routing-control \ --routing-control-name RoutingControlCell1 \ --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh
aws route53-recovery-control-config --region us-west-2 create-routing-control \ --routing-control-name RoutingControlCell2 \ --cluster-arn arn:aws:route53-recovery-control::111122223333:cluster/5678abcd-abcd-5678-abcd-5678abcdefgh

5b. 为每个路由控制创建运行状况检查。

注意

您可以使用 Amazon Route 53 CLI 创建 ARC 运行状况检查。

aws route53 create-health-check --caller-reference RoutingControlCell1 \ --health-check-config \ Type=RECOVERY_CONTROL,RoutingControlArn=arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567
{ "Location": "https://route53.amazonaws.com/2015-01-01/healthcheck/11111aaaa-bbbb-cccc-dddd-ffffff22222", "HealthCheck": { "Id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "CallerReference": "RoutingControlCell1", "HealthCheckConfig": { "Type": "RECOVERY_CONTROL", "Inverted": false, "Disabled": false, "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567" }, "HealthCheckVersion": 1 } }
aws route53 create-health-check --caller-reference RoutingControlCell2 \ --health-check-config \ Type=RECOVERY_CONTROL,RoutingControlArn=arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567
{ "Location": "https://route53.amazonaws.com/2015-01-01/healthcheck/11111aaaa-bbbb-cccc-dddd-ffffff22222", "HealthCheck": { "Id": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "CallerReference": "RoutingControlCell2", "HealthCheckConfig": { "Type": "RECOVERY_CONTROL", "Inverted": false, "Disabled": false, "RoutingControlArn": "arn:aws:route53-recovery-control::111122223333:controlpanel/0123456bbbbbbb0123456bbbbbb0123456/routingcontrol/abcdefg1234567" }, "HealthCheckVersion": 1 } }

5c. 创建两个失效转移 DNS 记录,并将运行状况检查与每个记录关联起来。

使用 Route 53 CLI 在 Route 53 中创建失效转移 DNS 记录。要创建记录,请按照《Amazon Route 53 Amazon CLI 命令参考》中该change-resource-record-sets命令的说明进行操作。在记录中,指定每个单元格的 DNS 值以及 Route 53 为运行状况检查创建的相应 HealthCheckID 值(请参阅 6b)。

对于主单元格:

{ "Name": "myapp.yourdomain.com", "Type": "CNAME", "SetIdentifier": "primary", "Failover": "PRIMARY", "TTL": 0, "ResourceRecords": [ { "Value": "cell1.yourdomain.com" } ], "HealthCheckId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }

对于辅助单元格:

{ "Name": "myapp.yourdomain.com", "Type": "CNAME", "SetIdentifier": "secondary", "Failover": "SECONDARY", "TTL": 0, "ResourceRecords": [ { "Value": "cell2.yourdomain.com" } ], "HealthCheckId": "yyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" }

现在,要从主单元格失效转移到辅助单元格,可以按照步骤 4b 中的 CLI 示例将 RoutingControlCell1 的状态更新为 OFF,将 RoutingControlCell2 的状态更新为 ON