2017-08-08 126 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