NLB健全狀態檢查異常排查方法
NLB健全狀態檢查用於探測您的後端伺服器是否處於正常工作狀態,當健全狀態檢查出現異常時,通常說明您的後端伺服器出現了異常,但也可能是您的健全狀態檢查或後端伺服器配置不正確導致,本文主要介紹網路型負載平衡NLB健全狀態檢查出現異常的解決方案。
問題描述
NLB執行個體的監聽對應的健全狀態檢查狀態顯示異常。
問題原因
如果您是首次配置健全狀態檢查時出現異常,推薦您優先排查健全狀態檢查配置問題。可以通過以下兩類原因進行排查。
-
健全狀態檢查參數設定錯誤
-
監聽連接埠問題
如果您是配置成功後健全狀態檢查出現異常,推薦您優先排查後端伺服器問題。可以通過以下原因進行排查。
-
安全類防護軟體問題
-
路由配置錯誤問題
-
後端伺服器負載過高
解決方案
首次配置健全狀態檢查出現異常
原因一:健全狀態檢查參數設定錯誤
在頂部功能表列,選擇執行個體地區。
在左側導覽列,選擇。
-
在伺服器組頁面,找到目標NLB執行個體掛載的伺服器組,然後單擊編輯健全狀態檢查。
-
在編輯健全狀態檢查對話方塊,檢查健全狀態檢查參數設定是否正常,建議按照預設提供的健全狀態檢查參數進行設定。
原因二:監聽連接埠問題
一、檢查健全狀態檢查連接埠
在頂部功能表列,選擇執行個體地區。
在左側導覽列,選擇。
-
在伺服器組頁面,找到目標NLB執行個體掛載的伺服器組,然後單擊伺服器組ID。
-
在伺服器組詳情頁,單擊後端伺服器頁簽,查看並記錄後端伺服器連接埠。
-
在伺服器組詳情頁,單擊詳細資料頁簽,在健全狀態檢查地區單擊編輯健全狀態檢查。在編輯健全狀態檢查對話方塊,查看並記錄健全狀態檢查參數。
TCP監聽情境
-
登入後端伺服器,執行以下命令,嘗試串連健全狀態檢查連接埠。
關於如何登入後端伺服器,請參見ECS遠端連線操作指南。
telnet [$IP] [$Port]說明-
[$IP]為後端伺服器私網IP地址。
-
[$Port]為該伺服器組設定的健全狀態檢查的探測連接埠,如果沒有手動設定過健全狀態檢查連接埠,預設使用的是後端伺服器連接埠,如果配置了健全狀態檢查連接埠,則使用配置的健全狀態檢查連接埠。
-
-
查看命令執行結果。
命令返回類似“telnet: connect to address [$IP]: Connection refused”的資訊,即系統提示無法串連到該主機,串連被拒絕,如下所示。說明後端伺服器上健全狀態檢查連接埠處於異常狀態。
Trying xxx.xxx.xxx.xxx... telnet: connect to address xxx.xxx.xxx.xxx: Connection refused命令返回類似“Connected to [$IP]”的資訊,如下所示。說明後端伺服器上健全狀態檢查連接埠處於正常工作(監聽)狀態。
Trying 1xxx... Connected to 1xxx.
UDP監聽情境
-
登入後端伺服器,執行以下命令,查看健全狀態檢查連接埠狀態。
關於如何登入後端伺服器,請參見ECS遠端連線操作指南。
netstat -anu | grep [$IP]:[$Port]說明-
[$IP]為後端伺服器私網IP地址。
-
[$Port]為該伺服器組設定的健全狀態檢查的探測連接埠,如果沒有手動設定過健全狀態檢查連接埠,預設使用的是後端伺服器連接埠,如果配置了健全狀態檢查連接埠,則使用配置的健全狀態檢查連接埠。
-
-
查看命令執行結果。
命令返回沒有[$IP]:[$Port]的條目,說明後端伺服器上健全狀態檢查連接埠處於異常狀態。
[rxxxxx xjZ ~]# netstat -anu | grep 192.168 :53 [xxxxx pxjZ ~]#命令返回[$IP]:[$Port]的條目,說明後端伺服器上健全狀態檢查連接埠處於正常工作(監聽)狀態。
[rxxx ~]# netstat -anu | grep 192.168.xxx.xxx:53 udp 0 0 192.168.xxx.xxx:53 0.0.0.0:*
二、排查是否是相關後端伺服器沒有啟動或後端伺服器連接埠和健全狀態檢查連接埠不一致等原因,本小節以Nginx服務為例進行示範。
-
登入異常後端伺服器,執行以下命令,查看Nginx服務狀態。
systemctl status nginx -
系統顯示類似如下,說明服務沒有啟動。
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: inactive (dead) -
執行以下命令,啟動Nginx服務。
systemctl start nginx -
然後執行以下命令,查看Nginx服務狀態。
systemctl status nginx系統顯示類似如下,說明服務是啟動狀態。
● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: active (running) since Mon xxx CST; 2h 20min ago -
登入網路型負載平衡NLB控制台,分別進行以下操作。
-
在左側導覽列,選擇。
-
在伺服器組頁面,找到目標伺服器組執行個體,在操作列單擊編輯健全狀態檢查。
-
在編輯健全狀態檢查對話方塊,查看健全狀態檢查連接埠[$Port]。確認健全狀態檢查已開啟,健全狀態檢查協議為TCP,健全狀態檢查連接埠為80。
-
查看健全狀態檢查是否正常,如果不正常,執行以下命令,查看Nginx服務監聽連接埠。
netstat -tanp |grep nginx
-
-
系統顯示類似如下,與[$Port]連接埠不一致。
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 22855/nginx: master tcp6 0 0 :::81 :::* LISTEN 22855/nginx: master編輯
/etc/nginx/nginx.conf檔案,找到並修改此listen值,將此值修改成[$Port],然後儲存並退出。說明當業務情境不適合修改此listen值,可以參見NLB監聽根據應用情境重新修改對應協議的健全狀態檢查連接埠。
server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; } -
執行以下命令,重啟Nginx服務,然後等待片刻,確認健全狀態檢查正常。
systemctl restart nginx
配置成功後健全狀態檢查出現異常
原因一:安全類防護軟體問題
NLB執行個體使用VPC網段與後端伺服器通訊,請確保後端伺服器沒有對NLB執行個體的該網段進行任何形式的屏蔽,包括Iptables或其他任何第三方安全性原則軟體。NLB執行個體的該網段被屏蔽會導致健全狀態檢查異常,NLB將無法正常工作。本節以Iptables為例,檢查NLB使用的私網位址區段屏蔽情況。
-
登入網路型負載平衡NLB控制台,查看NLB執行個體與後端服務互動使用的本地IP地址。
在執行個體列表中,找到目標執行個體對應的 Local IP 列,即可查看本地 IP 位址(如 192.168.20.75)。
-
登入異常後端伺服器執行個體,執行以下命令,查看filter表的所有規則。
iptables -nL如果返回類似以下資訊,說明後端伺服器禁止NLB的本地IP地址請求。
# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destination DROP all -- 192.168.20.75 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination -
執行以下命令,即可刪除此規則。
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顯示的資訊就是預設閘道),則該路由配置錯誤。
Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 xxx 0.0.0.0 UG 0 0 0 eth0 xxx 0.0.0 255.255.0.0 U 1002 0 0 xxx 192.168.20.75 0.0.0.0 255.255.255.255 UH 0 0 0 * -
執行以下命令,刪除配置的錯誤路由。
ip route del blackhole 192.168.20.75 #IP地址僅為樣本說明命令中的IP地址需要根據實際情境中NLB使用的私網地址修改。
-
確認NLB執行個體的監聽對應的健全狀態檢查狀態顯示正常。
原因三:後端伺服器負載過高
參見Linux執行個體負載高問題排查和異常處理,查看是否是後端伺服器負載過高導致的問題。
相關文檔
您還可以通過NLB執行個體診斷功能進行NLB健全狀態檢查異常排查,具體操作可參考NLB執行個體診斷。