ALB通過健全狀態檢查來判斷後端伺服器的業務可用性,開啟健全狀態檢查功能後,當某台後端伺服器健全狀態檢查出現異常時,ALB會自動將新的請求分發到其他健全狀態檢查正常的後端伺服器上,避免了局部後端伺服器異常對總體服務的影響從而保證業務高可用。當出現健全狀態檢查異常時,您可參考本文進行排查解決。
問題描述
ALB執行個體的監聽對應的健全狀態檢查狀態顯示異常。
問題原因
如果您是首次配置健全狀態檢查時出現異常,主要原因是健全狀態檢查配置問題。可以通過以下兩類原因進行排查。
健全狀態檢查參數設定錯誤
監聽連接埠問題
如果您是配置成功後健全狀態檢查出現異常,主要原因是後端伺服器出現問題。可以通過以下三類原因進行排查。
安全類防護軟體問題
路由配置錯誤問題
後端伺服器負載過高
解決方案
首次配置健全狀態檢查出現異常
原因一:健全狀態檢查參數設定錯誤
- 登入應用型負載平衡ALB控制台。
在頂部功能表列,選擇ALB執行個體所屬的地區。
在左側導覽列,選擇 。
在伺服器組頁面,找到目標ALB執行個體掛載的伺服器組,然後單擊伺服器組ID。
在服務組詳情頁面,在健全狀態檢查地區單擊編輯健全狀態檢查。
在編輯健全狀態檢查對話方塊,檢查健全狀態檢查參數設定是否正常,建議按照預設提供的健全狀態檢查參數進行設定。
更多資訊,請參見健全狀態檢查。
原因二:監聽連接埠問題
- 登入應用型負載平衡ALB控制台。
在頂部功能表列,選擇ALB執行個體所屬的地區。
在左側導覽列,選擇 。
在伺服器組頁面,找到目標ALB執行個體掛載的伺服器組,然後單擊伺服器組ID。
在伺服器組詳情頁,單擊後端伺服器頁簽,查看並記錄後端伺服器連接埠。
在服務組詳情頁面,單擊詳細資料頁簽,在健全狀態檢查地區單擊編輯健全狀態檢查。在編輯健全狀態檢查對話方塊,查看並記錄健全狀態檢查參數。
登入後端伺服器,使用nc或curl命令對後端伺服器進行探測。
關於如何登入ECS,請參見ECS遠端連線操作指南。
# nc命令: echo -e "[$Method] [$PATH] [$VERSION]\r\nHost: [$Domain]\r\n\r\n" | nc -t [$IP] [$Port] #格式 echo -e "HEAD /index.html HTTP/1.0\r\nHost: wwww.example.org\r\n\r\n" | nc -t 127.0.0.1 80 #樣本 # curl命令: curl -X [$Method] -H "Host: [$Domain]" -I http://[$IP]:[$Port][$PATH] #格式 curl -X HEAD --http1.0 -H "Host: www.example.org" -I http://127.0.0.1:80/index.html #樣本
說明[$Method]為該伺服器組設定的健全狀態檢查方法。
[$PATH]為該伺服器組設定的健全狀態檢查路徑。
[$VERSION]為該伺服器組設定的健全狀態檢查中HTTP協議的版本,例如HTTP/1.0。
[$Domain]為該伺服器組設定的健全狀態檢查網域名稱,如果該值為“-----”,說明預設使用各後端ECS執行個體的內網IP為網域名稱,可以使用[$IP]代替。
[$IP]為後端ECS執行個體內網IP地址。
[$Port]為該伺服器組設定的健全狀態檢查的探測連接埠,如果沒有手動設定過健全狀態檢查連接埠,預設使用的是後端ECS執行個體連接埠,如果配置了健全狀態檢查連接埠,則使用配置的健全狀態檢查連接埠。
查看命令執行結果的狀態代碼,結合業務判斷返回的狀態代碼是否屬於正常情況下的返回。
如果判斷返回的狀態代碼是屬於正常情況下的返回,且該狀態代碼未在健全狀態檢查中配置,請修改健全狀態檢查的健康狀態返回碼。
如果判斷返回的狀態代碼異常,請參見下表進行排查。下表列出了可能返回的HTTP狀態代碼及排查方法。
狀態代碼
描述
排查方法
400
用戶端HTTP請求格式異常
HTTP頭部格式錯誤,例如content length為空白、header的某些欄位未使用大寫字母等。請檢查HTTP請求的格式。
404
未找到目標資源
請檢查請求的URL是否正確。
405
健全狀態檢查要求方法不支援
請檢查後端服務是否支援健全狀態檢查的要求方法。
500
伺服器內部錯誤,無法完成請求
請檢查後端服務的商務邏輯。
503
伺服器暫時不可用
請檢查後端服務的商務邏輯或負載是否過高。
配置成功後健全狀態檢查出現異常
原因一:安全類防護軟體問題
ALB執行個體使用內網位址區段100.64.0.0/10或VPC網段與後端ECS通訊,請確保後端ECS執行個體沒有對ALB執行個體的該網段進行任何形式的屏蔽,包括Iptables或其他任何第三方安全性原則軟體。
因為ALB通過內部保留位址區段中的IP地址與後端ECS執行個體通訊,ALB的該位址區段被屏蔽會導致健全狀態檢查異常,ALB將無法正常工作。本文以Iptables檢查100.64.0.0/10為例介紹。
登入問題後端ECS執行個體,執行以下命令,查看filter表的所有規則。
iptables -nL
如果返回類似以下資訊,說明後端ECS執行個體禁止ALB內網位址區段請求。
執行以下命令,刪除此規則即可。
iptables -t filter -D INPUT -s 100.64.0.0/10 -j DROP
執行以下命令,確認沒有禁止ALB內網位址區段請求。
iptables -nL
原因二:路由配置錯誤問題
當ALB執行個體使用的內網位址區段100.64.0.0/10在後端ECS上的路由配置錯誤時,也會導致ALB執行個體收不到健全狀態檢查探測的資料包,造成健全狀態檢查異常。本文以Linux下的route命令為例,檢查路由配置情況。
登入問題後端ECS執行個體,執行以下命令,檢查當前系統的路由配置情況。
route -n
若您發現存在路由條目的Destination為100.64.0.0,Genmask為255.192.0.0,且Gateway沒有指向對應網卡的預設閘道(當Destination為0.0.0.0時,Gateway顯示的資訊就是預設閘道),則該路由配置錯誤。
執行以下命令,刪除配置錯誤的100.64.0.0/10路由。
route del -net 100.64.0.0/10
原因三:後端ECS執行個體負載過高
參見Linux執行個體負載高問題排查和異常處理,查看是否是伺服器負載過高導致的問題。