2017-08-08 87 views
6

我为我的节点应用程序使用了VM标度集。我的应用程序有一个可通过www.mydomain.com/api/healthcheck访问的公开操作,并只打印一些json。 当我配置我的健康探测器使用TCP协议时,一切正常,并且我的api还给我预期的json(和状态200)。 但是,当我现在切换我的健康探针使用HTTP和路径= /api/healthcheck,我的网站无法访问了(ERR_CONNECTION_TIMED_OUT ...我想loadbalancer拿出所有实例,因为健康调查告诉他,每个实例是不健康的)我试过(用于测试)配置我的LoadBalancer来将端口80路由到后端端口8080(我的节点应用程序在每台机器上运行,因此我可以避免使用nginx代理)。但我得到了同样的行为。健康探针将实例标记为不健康,但不是

我不知道为什么我的自定义健康检查不起作用。希望你能帮助。


编辑: 为了进行测试,我做了以下内容:

  • 运行在每台虚拟机,这只是输出 “Hello World” 3000端口其他的NodeJS应用
  • (不nginx的代理!)
  • 创建端口3000 LB规则,还可以配置我的NSG允许:所有
  • 在3000年初,我的健康探头被配置为使用tcp
  • RESU LT:mydoamin.com:3000/hello可用(打印你好并返回200)
  • 现在配置我的健康探头使用http -protocol,港口3000和位置/hello
  • 结果:我的整个Web应用程序不可用了
+0

即使使用端口80,HTTP运行状况检查是否失败?或者仅在使用端口8080时?另外,您的网站是否有可能从http端点重定向到相应的https端点? –

+0

它也在端口80上失败。是的,有一个重定向到https,但我删除了这个测试用例的规则,但我又得到了相同的行为。 – Munchkin

回答

2

我看不到你的服务器的代码,因此它很难搞清楚。 如果你分享了一些代码,它会更容易。

所以让我们尝试的情况来分析:

最初确认

连接的情况下,已超时

尝试从您的机器终端

执行以下命令
curl –I private-IP-address-of-the-instance:port/health-check-target-page 

现在取决于o tucome我们有不同的可能原因......

初步检查结果:非200响应

  • 没有目标页上的实例配置。
  • 未设置响应中Content-Length标头的值。
  • 该应用程序未配置为接收来自加载 平衡器的请求或返回200响应代码。

初始检查结果:能够直接连接到该实例

  • 实例失败到所配置的响应 等待时间内响应。
  • 实例处于重大负载下,并且所花费的时间比您配置的响应超时时间长以进行响应。
  • 如果您正在使用HTTP或HTTPS连接并在ping路径字段 (例如,HTTP:80/index.html)中指定的目标页面上执行运行状况检查 ,目标页面可能是采取 比您配置的超时更长。

其他:实例没有从负载平衡器接收交通

问题:该实例的安全组从负载平衡器阻塞的流量。

在实例上执行数据包捕获以验证问题。使用以下命令:

tcpdump port health-check-port 
+0

谢谢!我会按照这些步骤,让你知道它是否有效(可能明天) – Munchkin

+1

它现在的作品! 'curl -I private-IP-address-of-the-instance:port/health-check-target-page'告诉我,nginx无法识别服务器名称 - 因为在我所有的'server {}'--blocks我有这样一行:'server_name * .mydomain.com;'。现在我只是把它添加到我的nginx配置中:'server {listen 81; location =/my/healthcheck {...}}',为端口81设置一个NSG并配置我的健康探测器使用端口'81'和路径'/ my/healthcheck' – Munchkin

+0

好!我很高兴你的管理:] – EMX