连接到负载均衡器的 EC2 实例显示不健康状态
EC2 instance attached to a load balancer is showing Unhealthy status
我创建了一个负载均衡器并将其分配给 运行 EC2 实例之一。创建后,我导航到负载平衡下 AWS 控制台中的目标组部分,当我选择分配给负载均衡器的目标组时,它显示注册实例状态为 "Unhealthy" 并且注册实例上方有一条消息显示 "None of these Availability Zones contains a healthy target. Requests are being routed to all targets" 的窗格。在创建负载均衡器时,我选择了所有子网(可用区)。
下面提到了我用于健康检查的设置,
- 协议:HTTP
- 路径:/healthcheck.html
- 端口:流量端口
- 健康阈值:3
- 不健康阈值:2
- 超时:5
- 间隔:10
- 成功代码:200
那么,为什么我注册的实例状态为 "Unhealthy",我如何 rectify/resolve 将状态更改为 "In-service"?
不健康 表示实例的健康检查失败。
要检查的事项:
- 检查实例是运行一个网络服务器
- 检查位于
healthcheck.html
的网页是否使用有效的 200 响应 响应
- 检查实例是否有允许在端口 80 (HTTP) 上访问的安全组
如果您在 运行 类似服务的多个 EC2 实例之间共享负载均衡器,请确保您的每个服务 运行 在不同的端口,否则您的服务将无法访问,因此你的健康检查不会通过
在我的例子中,ALB 上的健康检查配置是 / 和 https。
我通过以下步骤解决了问题。
- 检查安全组 - 我们是否打开了从 ALB SG 到 EC2 SG 的所需端口。
-
Login to server and check does IIS server's default site has 443 port opened if your health-check is on 443. (whatever port you are using for health checks).
使用 curl 命令解决问题。
如果您想检查 HTTPS,请使用以下命令检查响应。使用 -k 或 --insecure 忽略 SSL 问题。
curl https://[服务器IP] -k
对于 HTTP 测试,请使用以下命令。
curl http://[服务器IP]
我创建了一个负载均衡器并将其分配给 运行 EC2 实例之一。创建后,我导航到负载平衡下 AWS 控制台中的目标组部分,当我选择分配给负载均衡器的目标组时,它显示注册实例状态为 "Unhealthy" 并且注册实例上方有一条消息显示 "None of these Availability Zones contains a healthy target. Requests are being routed to all targets" 的窗格。在创建负载均衡器时,我选择了所有子网(可用区)。 下面提到了我用于健康检查的设置,
- 协议:HTTP
- 路径:/healthcheck.html
- 端口:流量端口
- 健康阈值:3
- 不健康阈值:2
- 超时:5
- 间隔:10
- 成功代码:200
那么,为什么我注册的实例状态为 "Unhealthy",我如何 rectify/resolve 将状态更改为 "In-service"?
不健康 表示实例的健康检查失败。
要检查的事项:
- 检查实例是运行一个网络服务器
- 检查位于
healthcheck.html
的网页是否使用有效的 200 响应 响应
- 检查实例是否有允许在端口 80 (HTTP) 上访问的安全组
如果您在 运行 类似服务的多个 EC2 实例之间共享负载均衡器,请确保您的每个服务 运行 在不同的端口,否则您的服务将无法访问,因此你的健康检查不会通过
在我的例子中,ALB 上的健康检查配置是 / 和 https。
我通过以下步骤解决了问题。
- 检查安全组 - 我们是否打开了从 ALB SG 到 EC2 SG 的所需端口。
-
Login to server and check does IIS server's default site has 443 port opened if your health-check is on 443. (whatever port you are using for health checks).
使用 curl 命令解决问题。
如果您想检查 HTTPS,请使用以下命令检查响应。使用 -k 或 --insecure 忽略 SSL 问题。
curl https://[服务器IP] -k
对于 HTTP 测试,请使用以下命令。
curl http://[服务器IP]