我有一项在两个目标群体中注册的服务:alb
和wwwalb
。
目标alb
组针对的是内部请求,wwwalb
目标组针对的是外部请求。
当我部署服务时,它会正常启动并开始接受请求。查看访问日志,我可以看到和都在alb
探测wwwalb
服务。由于服务在 3 个区域中运行,因此我看到每个区域有 3 个请求,总共 6 个。
- - - [19/Jun/2022:20:45:28 +0200] "GET /api/system/status HTTP/1.1" 204 -
- - - [19/Jun/2022:20:45:28 +0200] "GET /api/system/status HTTP/1.1" 204 -
- - - [19/Jun/2022:20:45:28 +0200] "GET /api/system/status HTTP/1.1" 204 -
- - - [19/Jun/2022:20:45:30 +0200] "GET /api/system/status HTTP/1.1" 204 -
- - - [19/Jun/2022:20:45:30 +0200] "GET /api/system/status HTTP/1.1" 204 -
- - - [19/Jun/2022:20:45:30 +0200] "GET /api/system/status HTTP/1.1" 204 -
尽管如此,该服务最终还是被撤下,因为目标群体认为该服务不健康。事实上,它似乎从来没有认为该服务是健康的。
用于检查目标组的 API 调用告诉我以下内容:
{
"TargetHealthDescriptions": [
{
"Target": {
"Id": "10.1.143.94",
"Port": 8182,
"AvailabilityZone": "eu-north-1b"
},
"HealthCheckPort": "8182",
"TargetHealth": {
"State": "unhealthy",
"Reason": "Target.FailedHealthChecks",
"Description": "Health checks failed"
}
}
]
}
我已经研究目标组指标、负载均衡器配置一段时间了 - 但我就是找不到任何可以解释这种行为的设置信息。健康检查设置对我来说似乎也很好:
我最近刚刚添加了wwwalb
,所以我认为将此服务放在两个目标组中会导致这种情况。不过,AWS 支持并解释了将服务放在两个目标组中。
有没有办法从 AWS 获取有关导致此问题的真正原因的更多详细信息?有没有办法调查 AWS 认为服务失败的原因?
答案1
我通常会将不健康阈值设置为高于健康阈值。例如,间隔 10 秒内成功呼叫 2 次是健康的,间隔 10 秒内不成功呼叫 6 次是不健康的。
话虽如此,这应该没关系,您的设置应该可以正常工作。当目标注册时,会出现“初始”状态。在此期间,AWS 正在尝试验证健康检查,并且只有在健康检查成功的情况下才会切换到健康状态。
您确定您的应用程序没有成功响应,然后失败了很长时间,以至于再次变得不健康吗?还是它真的花了太长时间启动并且从未脱离“初始”状态?