使用自定义域的 AWS Route53 DNS 故障转移设置无法检测主要运行状况检查何时不正常

问题描述 投票:0回答:1

我已阅读有关 Route53 的 AWS 文档,特别是与定义如何使用自定义域设置 DNS 故障转移相关的部分。我遵循的步骤如下:

  1. 创建 API REST: 我创建一个简单的 API REST,配置为区域性的,有两个端点,其中一个端点的路径为 /status,返回先前读取的名为 STATUS 的环境变量,其值为 FAILSUCCESS ;另一个具有路径 /print 的端点仅打印正在执行代码的区域。我已在 us-east-2 和 us-west-2 上部署了此 API REST。
  2. 为自定义域请求证书: 由于我使用 Route53 在 AWS 中购买了一个域(例如 mydomain.com),所以我在 us-east-2 上为自定义域 test.mydomain.com 请求了一个证书,并且成功了使用建议的方法(DNS 验证)对其进行验证。我也使用相同的自定义域对 us-west-2 区域重复了此步骤。
  3. 创建自定义域:我使用 AWS 控制台在两个区域上创建自定义域。因此,我在 us-east-2 区域的 API 网关上输入,并创建了自定义域 test.mydomain.com,将该域与之前请求的证书链接起来,并且还创建了到已部署的 API REST 的域映射。我也在 us-west-2 中重复了此步骤,但使用在此区域中创建的资源,即:在此区域中请求的证书以及在 us-west-2 中部署的 API REST。
  4. 在 Route53 上创建两个运行状况检查: 这些检查名为 EAST 和 WEST,它们使用相应区域中部署的 API REST 的状态端点。因此,检查 EAST 连接到部署在 us-east-2 区域中的 API REST,并消耗端点状态。

EAST健康检查的特点是:

ID de507044-d8f7-4650-a54a-cb189972361b
URL https://XXX500mdd4.execute-api.us-east-2.amazonaws.com:443/prod/status
Specify endpoint by Domain name
Protocol HTTPS
Domain name adb500mdd4.execute-api.us-east-2.amazonaws.com
Port 443
Path /prod/status
Request interval 10 seconds
Failure threshold 2
Search string SUCCESS
Latency graphs No
Enable SNI Yes
Invert health check status No
Disable health check No
Health checker regions Using recommended health check regions:

WEST健康检查特点是:

ID a8e3ce0b-d12c-4408-86fb-2fb13a7bea9d
URL https://sinbpssYYY.execute-api.us-west-2.amazonaws.com:443/prod/status
Specify endpoint by Domain name
Protocol HTTPS
Domain name sinbpssct2.execute-api.us-west-2.amazonaws.com
Port 443
Path /prod/status
Request interval 10 seconds
Failure threshold 2
Search string SUCCESS
Latency graphs No
Enable SNI Yes
Invert health check status No
Disable health check No
Health checker regions Using recommended health check regions
  1. 配置 DNS 故障转移设置: 为此,我创建了以下两条 A 记录,并将它们指定为 API 网关的别名:

这是指向 us-east-2 区域中部署的 API REST 的主节点:

Record name: test.mydomain.com
Record type: A
Value: d-vaqdythXXX.execute-api.us-east-2.amazonaws.com.
Alias: Yes
TTL (seconds): -
Routing policy: Failover
Health check ID: de507044-d8f7-4650-a54a-cb189972361b

虽然这是次要的,但它又指向 us-west-2 区域中部署的 API REST

Record name: test.mydomain.com
Record type: A
Value: d-YYY6zowl4f.execute-api.us-west-2.amazonaws.com.
Alias: Yes
TTL (seconds): -
Routing policy: Failover
Health check ID: a8e3ce0b-d12c-4408-86fb-2fb13a7bea9d

为了测试,我使用了curl:

curl --location --request POST 'https://emission.edx.services/mreg/print'
{"message":"Built from us-east-2 region"}

由于最初两项健康检查都是健康的,并且 EAST API 被定义为主要检查,因此预计结果为:“从 us-east-2 区域构建”}。但是,如果我重新部署 EAST API REST,以状态端点返回 FAIL 的方式更改环境变量,导致 EAST 运行状况检查不健康,我会期望 DNS 故障转移例程在辅助服务器中执行 API(即部署在 us-west-2 中的那个)但是结果消息保持不变:

{"message":"Built from us-east-2 region"}

也就是说,故障转移设置无法检测主服务器何时关闭并使用辅助服务器。 15 分钟后我再次执行卷曲,得到了相同的结果。

编辑#1:

我部署的 API REST 包含 2 个端点:

  1. 路径为“/status”的 GET 端点简单地返回名为 STATUS 的环境变量的值,以及 http 状态代码 200。
  2. 带有路径 /print 的 POST 端点,它简单地返回一条字符串消息,描述端点正在执行的区域。这样,在 us-eas-2 中,该端点将返回“Built from us-east-2 Region”

每个健康检查请求在其相应的 GET 端点并搜索字符串 SUCCESS。如果找到这个值,那么检查是健康的,否则是不健康的。

例如,我部署了 API REST,并将 east 和 west 检查为“健康”,使用curl 查询端点“/print”,正如预期的那样,它向我提供了正在从 us-east-2 区域访问的消息。好吧,出于测试目的,我编辑了 EAST 运行状况检查并反转运行状况检查,因此现在由于它返回 SUCCESS 并且我已反转其结果,因此运行状况检查处于不健康状态。这样,我希望当我使用域 url 执行curl 命令时,它会返回它正在从 us-west-2 执行。然而,它一直在至少 30 分钟内回复我相同的“Built from us-east-2 Region”消息。

这真的很奇怪,我将近 4 小时没有检查网址,现在我运行curl,它回答“从 us-west-2 区域构建”!!!似乎几个小时后故障转移设置就起作用了?买了为什么要花这么长时间才能工作?

有人知道这可能是造成这种奇怪行为的原因吗?

amazon-web-services aws-api-gateway amazon-route53
1个回答
0
投票

是因为预计会有 18% 的失败吗

© www.soinside.com 2019 - 2024. All rights reserved.