1. 检查ELB配置时需要检查:
- timeouts:timeout值要比ELB idle timeout高,
- keep alive
- X-Forwarded-* headers
- 服务器
- 当使用web/application服务器作为ELB的代理时,确保该服务器服从ELB TTL
2. 504报错
当ELB向后端发送一个请求,然后后端要么1)关闭连接;2)重置,ELB都会返回504报错。可能的原因有:
- ELB pre-opened连接
3. 健康检查
-
TCP健康检查:
先和指定端口通过三次TCP握手建立TCP连接(需要在指定timeout之前完成)。若连接超时,或后端返回了一个RST,健康检查会失败。
一个健康的TCP检查并不保证服务是正常的,因为一个应用可能可以建立连接,但不能serve任何请求。所以推荐使用HTTP健康检查,这个可以have a better insight of the service listening on the port -
HTTP健康检查:
会发一个HTTP请求到指定健康检查端口。一个后端实例需要返回200OK码才能通过健康检查。
后端需要返回200 OK才能通过,常见的302返回码(重定向到一个200 OK的页面)虽然在一个浏览器上看是正常的,但会导致健康检查失败 -
健康检查失败之后:对于顾客来说需要在后端实例上添加日志,来检查为什么健康检查会失败。这会导致
-
ELB健康检查时报错为Timeout,说明ELB发送给该实例的健康检查请求无法在有效时间内建立连接,导致超时。多次尝试连接失败后判断后端为unhealthy状态。需要:
检查后端实例的安全组、ACL、路由表;后端实例配置的健康检查端口是否正常监听,实例内部是否启用了iptables规则,查看是否能正确连通ELB节点- 1)登录到后端实例上
- 2)netstat -tnlp:确定配置的健康检查端口是否正常监听
- 3)iptables -S 或 iptables -L:查看iptables配置情况
- 4)chkconfig:查看是否iptables开机紫气doing
- 5)若希望关闭iptables以及开机自启动,可参考如下步骤:
- chkconfig iptables off(设置开机启动为关闭)
- chkconfig --del iptables(移除开机自启动)
- /etc/init.d/iptables stop
- service iptables stop
- 6)若问题仍然存在,建议将上述命令的输出结果以及/var.log/messages、监听在健康检测配置端口的java应用的日志,一并打包发给我们进行更多的排查