我有 3 个实例(node-0
,, )运行 2node-1
个node-2
服务 - 一个是 a websocket
,另一个是 an API
(两个服务在每个实例中运行)。
目标群体设置:
目标群体 | 实例 | 健康检查路径 |
---|---|---|
api-节点-0 | 节点-0 | /某些路径/api/v1/ping |
api-节点-1 | 节点 1 | /某些路径/api/v1/ping |
api-节点-2 | 节点2 | /某些路径/api/v1/ping |
websocket-节点-0 | 节点-0 | /某些路径/websocket/v1/ping |
websocket-节点-1 | 节点 1 | /某些路径/websocket/v1/ping |
websocket-节点-2 | 节点2 | /某些路径/websocket/v1/ping |
听众和规则:
HTTPS:443 监听器
规则:
api
- 条件:路径
/some-path/api/*
- 行动:转发给目标群体:
- api-节点-0 (33.33%)
- api-节点-1 (33.33%)
- API 节点-2 (33.33%)
- 粘性:关闭
网络套接字
- 条件:路径
/some-path/websocket/*
- 行动:转发给目标群体:
- websocket-节点-0 (33.33%)
- websocket-节点-1 (33.33%)
- websocket-节点-2 (33.33%)
- 粘性:关闭
默认
- 条件:无其他规则适用
- 行动:转发给目标群体:
- api-节点-0 (100%)
健康检查属性:
- 间隔:30秒
- 超时:5 秒
- 健康阈值:2
- 不健康阈值:2
- 健康阈值:连续2次健康检查成功
- 不健康阈值:连续 2 次健康检查失败
- 成功代码:200
负载均衡器属性:
- HTTP 客户端保持连接时长:3600 秒
- 连接空闲超时:60 秒
- X-Forwarded-For 标头:附加
- 跨区域负载均衡:开启
PS如果您需要有关设置的更多信息,请告诉我。
在所有目标组都健康的正常测试期间,ALB 似乎按预期运行。当我想模拟一个节点上的服务之一变得不健康的情况时,问题出现了,我更改了 ie 的运行状况检查路径api-node-1
,它显示为不健康(Error 404
),但流量仍在发送到它。通过访问日志和 CloudWatch 指标(RequestCountPerTarget
)确认。我还尝试模拟不健康的组,通过从实例中删除相关安全组来阻止 ALB 的访问。(Error 400
)
测试方法(针对不健康目标组):使用 curl(10-20 次)或 Grafana k6 负载测试并在访问日志和 Cloudwatch 中监控流量 - 流量仍然被路由到所有实例,其中一个实例显示为不健康。
您可以在此处找到讨论此问题的另一个问题的链接。
您链接到的问题的答案也是您所问问题的答案,因为每当组中 100% 的目标未通过健康检查时,健康检查状态就会被忽略。
由于每个组中只有一个目标,因此该组的健康检查状态将始终被忽略,因此停止服务的节点仍会接收流量。