健康探针将实例标记为不健康,但不是
我为我的节点应用程序使用了一个VM规模集。 我的应用程序有一个可通过www.mydomain.com/api/healthcheck
访问的操作,并只打印一些json。 当我configuration我的健康探测器使用TCP
协议时,一切工作正常,也是我的api返回给我预期的JSON(和状态200)。 但是,当我现在切换我的健康探测使用HTTP
和path= /api/healthcheck
,我的网站不能访问了( ERR_CONNECTION_TIMED_OUT
…我想loadbalancer拿出所有实例,因为健康探测告诉他,每个实例不良)
我在我的节点应用程序前面使用nginx,但我也尝试(testing)configuration我的LoadBalancer路由端口80到后端口8080(我的节点应用程序在每台机器上运行,所以我可以避免nginx代理)。 但是我得到了同样的行为。
我不知道为什么我的自定义健康检查不起作用。 希望你能帮忙。
编辑:为了testing,我做了以下:
- 在每个虚拟机上运行3000端口上的另一个nodejs应用程序,这只是打印“hello world”(没有nginx代理!)
- 创build一个端口3000的LB规则,并configuration我的NSG允许:3000
- 在开始时,我的健康探针被configuration为使用
tcp
- 结果:
mydoamin.com:3000/hello
:mydoamin.com:3000/hello
hello可用(打印你好,并返回200) - 现在我configuration我的健康探测器使用
http
协议,端口3000
和位置/hello
。 - 结果:我的整个networking应用程序不再可用
我看不到你的服务器的代码,所以很难弄清楚。 如果你分享了一些代码,会更容易。
所以我们试着分析一下情况:
初始检查
与实例的连接已超时
尝试从机器terminal执行以下命令
curl –I private-IP-address-of-the-instance:port/health-check-target-page
现在取决于我们有不同的可能原因…
初始检查结果:非200响应
- 在实例上没有configuration目标页面。
- Content-Length头的值在响应中没有设置。
- 应用程序未configuration为接收来自负载平衡器的请求或返回200响应代码。
初始检查结果:能够直接连接到实例
- 实例在configuration的响应超时期限内未能响应。
- 实例处于重大负载之下,并且所花费的时间比您configuration的响应超时时间段长。
- 如果您使用的是HTTP或HTTPS连接,并且正在对pingpath字段(例如,HTTP:80 / index.html)中指定的目标页面执行运行状况检查,则目标页面的响应时间可能会比您configuration的超时。
其他:实例未收到来自负载平衡器的stream量
问题:实例的安全组正在阻止来自负载平衡器的stream量。
在实例上执行数据包捕获以validation问题。 使用以下命令:
tcpdump port health-check-port