健康探针将实例标记为不健康,但不是

我为我的节点应用程序使用了一个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 
Interesting Posts