NLB健康檢查用于探測您的后端服務器是否處于正常工作狀態,當健康檢查出現異常時,通常說明您的后端服務器出現了異常,但也可能是您的健康檢查或后端服務器配置不正確導致,本文主要介紹網絡型負載均衡NLB健康檢查出現異常的解決方法。
問題描述
NLB實例的監聽對應的健康檢查狀態顯示異常。
問題原因
如果您是首次配置健康檢查時出現異常,推薦您優先排查健康檢查配置問題。可以通過以下兩類原因進行排查。
健康檢查參數設置錯誤
監聽端口問題
如果您是配置成功后健康檢查出現異常,推薦您優先排查后端服務器問題。可以通過以下原因進行排查。
安全類防護軟件問題
路由配置錯誤問題
后端服務器負載過高
解決方案
首次配置健康檢查出現異常
原因一:健康檢查參數設置錯誤
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇NLB實例所屬的地域。
在左側導航欄,選擇 。
在服務器組頁面,找到目標NLB實例掛載的服務器組,然后單擊編輯健康檢查。
在編輯健康檢查對話框,檢查健康檢查參數設置是否正常,建議按照默認提供的健康檢查參數進行設置。
原因二:監聽端口問題
一、檢查健康檢查端口
- 登錄網絡型負載均衡NLB控制臺。
在頂部菜單欄,選擇NLB實例所屬的地域。
在左側導航欄,選擇 。
在服務器組頁面,找到目標NLB實例掛載的服務器組,然后單擊服務器組ID。
在服務器組詳情頁,單擊后端服務器頁簽,查看并記錄后端服務器端口。
在服務器組詳情頁,單擊詳細信息頁簽,在健康檢查區域單擊編輯健康檢查。在編輯健康檢查對話框,查看并記錄健康檢查參數。
TCP監聽場景
登錄后端服務器,執行以下命令,嘗試連接健康檢查端口。
關于如何登錄后端服務器,請參見ECS遠程連接操作指南。
telnet [$IP] [$Port]
說明[$IP]為后端服務器私網IP地址。
[$Port]為該服務器組設置的健康檢查的探測端口,如果沒有手動配置過健康檢查端口,默認使用的是后端服務器端口,如果配置了健康檢查端口,則使用配置的健康檢查端口。
查看命令執行結果。
命令返回類似“telnet: connect to address [$IP]: Connection refused”的信息,即系統提示無法連接到該主機,連接被拒絕,如下圖所示。說明后端服務器上健康檢查端口處于異常狀態。
命令返回類似“Connected to [$IP]”的信息,如下圖所示。說明后端服務器上健康檢查端口處于正常工作(監聽)狀態。
UDP監聽場景
登錄后端服務器,執行以下命令,查看健康檢查端口狀態。
關于如何登錄后端服務器,請參見ECS遠程連接操作指南。
netstat -anu | grep [$IP]:[$Port]
說明[$IP]為后端服務器私網IP地址。
[$Port]為該服務器組設置的健康檢查的探測端口,如果沒有手動配置過健康檢查端口,默認使用的是后端服務器端口,如果配置了健康檢查端口,則使用配置的健康檢查端口。
查看命令執行結果。
命令返回沒有[$IP]:[$Port]的條目,如下圖所示。說明后端服務器上健康檢查端口處于異常狀態。
命令返回[$IP]:[$Port]的條目,如下圖所示。說明后端服務器上健康檢查端口處于正常工作(監聽)狀態。
二、排查是否是相關后端服務器沒有啟動或后端服務器端口和健康檢查端口不一致等原因,本小節以Nginx服務為例進行演示。
登錄異常后端服務器,執行以下命令,查看Nginx服務狀態。
systemctl status nginx
系統顯示類似如下,說明服務沒有啟動。
執行以下命令,啟動Nginx服務。
systemctl start nginx
然后執行以下命令,查看Nginx服務狀態。
systemctl status nginx
系統顯示類似如下,說明服務是啟動狀態。
登錄網絡型負載均衡NLB控制臺,分別進行以下操作。
在左側導航欄,選擇
。在服務器組頁面,找到目標服務器組實例,在操作列單擊編輯健康檢查。
在編輯健康檢查對話框,查看健康檢查端口[$Port]。
查看健康檢查是否正常,如果不正常,執行以下命令,查看Nginx服務監聽端口。
netstat -tanp |grep nginx
系統顯示類似如下,與[$Port]端口不一致。
編輯
/etc/nginx/nginx.conf
文件,找到并修改此listen值,將此值修改成[$Port],然后保存并退出。說明當業務場景不適合修改此listen值,可以參見NLB監聽概述根據應用場景重新修改對應協議的健康檢查端口。
執行以下命令,重啟Nginx服務,然后等待片刻,確認健康檢查正常。
systemctl restart nginx
配置成功后健康檢查出現異常
原因一:安全類防護軟件問題
NLB實例使用VPC網段與后端服務器通信,請確保后端服務器沒有對NLB實例的該網段進行任何形式的屏蔽,包括Iptables或其他任何第三方安全策略軟件。NLB實例的該網段被屏蔽會導致健康檢查異常,NLB將無法正常工作。本節以Iptables為例,檢查NLB使用的私網地址段屏蔽情況。
登錄網絡型負載均衡NLB控制臺,查看NLB實例與后端服務交互使用的本地IP地址。
登錄異常后端服務器實例,執行以下命令,查看filter表的所有規則。
iptables -nL
如果返回類似以下信息,說明后端服務器禁止NLB的本地IP地址請求。
執行以下命令,即可刪除此規則。
iptables -t filter -D INPUT -s 192.168.20.75 -j DROP #IP地址僅為示例
說明命令中的IP地址需要根據實際場景中NLB使用的私網地址修改。
執行以下命令,確認沒有禁止NLB的私網地址段請求。
iptables -nL
確認NLB實例的監聽對應的健康檢查狀態顯示正常。
原因二:路由配置錯誤問題
當在后端服務器的路由配置了NLB實例使用的VPC網段,會導致NLB實例收不到健康檢查探測的數據包,從而導致健康檢查異常。本節以Linux下的route命令為例,檢查路由配置情況。
登錄網絡型負載均衡NLB控制臺,查看NLB實例與后端服務交互使用的本地IP地址。
登錄問題后端服務器,執行以下命令,檢查當前系統的路由配置情況。
route -n
若您發現存在路由條目的Destination為NLB實例與后端服務交互使用的本地IP地址,Genmask為255.255.255.255,且Gateway沒有指向對應網卡的默認網關(當Destination為0.0.0.0時,Gateway顯示的信息就是默認網關),則該路由配置錯誤。
執行以下命令,刪除配置的錯誤路由。
ip route del blackhole 192.168.20.75 #IP地址僅為示例
說明命令中的IP地址需要根據實際場景中NLB使用的私網地址修改。
確認NLB實例的監聽對應的健康檢查狀態顯示正常。
原因三:后端服務器負載過高
參見Linux實例負載高問題排查和異常處理,查看是否是后端服務器負載過高導致的問題。
相關文檔
您還可以通過NLB實例診斷功能進行NLB健康檢查異常排查,具體操作可參考NLB實例診斷。