AWS Route53自定义域名DNS故障转移未检测到主健康检查异常
已查阅AWS Route53相关文档,按以下步骤配置自定义域名DNS故障转移:
- 创建区域型REST API:含
/status(返回STATUS环境变量,值为FAIL/SUCCESS)和/print(返回运行区域)两个端点,部署于us-east-2与us-west-2区域。 - 申请自定义域名证书:在两个区域分别为
test.mydomain.com申请证书并完成DNS验证。 - 创建自定义域名:在两个区域的API Gateway中分别创建
test.mydomain.com,关联对应证书与API。 - 创建Route53健康检查:分别针对两个区域API的
/status端点创建EAST、WEST健康检查,搜索字符串为SUCCESS。 - 配置DNS故障转移记录:创建两条A别名记录,主记录指向us-east-2的API,关联EAST健康检查;副记录指向us-west-2的API,关联WEST健康检查。
测试时出现异常:
初始主健康检查正常,访问test.mydomain.com返回us-east-2区域信息;修改主API的STATUS为FAIL,EAST健康检查变为异常,但故障转移未触发,15分钟后访问仍返回us-east-2信息。后续修改EAST健康检查的状态反转,使其变为异常,30分钟内访问结果仍未切换,直至4小时后才自动切换到us-west-2区域。
请问该延迟切换的异常原因是什么?
结合配置步骤和测试现象,延迟切换的核心原因主要来自以下几个方面:
DNS缓存的长期生效:客户端设备、本地DNS递归服务器都会缓存Route53返回的DNS记录。虽然Route53故障转移记录默认TTL是300秒(5分钟),但不少公共递归DNS服务商(比如部分ISP的DNS)会自行延长缓存时长,最长可达数小时。你4小时后才完成切换,完全符合递归DNS缓存过期的时间线——即便Route53已经更新了记录,用户请求仍会被缓存的旧记录导向原主区域API。
健康检查的判定周期限制:Route53默认健康检查每30秒执行一次,需要连续3次失败才会标记目标为不健康。修改主API的STATUS为FAIL后,至少需要90秒才会触发健康状态变更;后续修改状态反转的操作,也需要重新经过完整的评估周期,才能更新健康状态。
健康检查的有效性问题:需确认健康检查的请求是否能正确命中API的
/status端点,且搜索字符串匹配逻辑正常。比如,若API Gateway自定义域名强制HTTPS,但健康检查使用HTTP协议,请求会被重定向,返回内容不含SUCCESS,但Route53可能误判请求成功(仅识别HTTP状态码为2xx/3xx),从而延迟不健康状态的标记。主备故障转移的触发条件:主备模式下,只有当主记录的健康检查明确标记为不健康,且备记录的健康检查处于健康状态时,Route53才会切换到备记录。如果备记录的健康检查存在波动,或Route53未及时同步备记录的健康状态,也会导致切换延迟。
内容的提问来源于stack exchange,提问作者Airel Perez

