ALB健康檢查異常排查方法
ALB通過(guò)健康檢查來(lái)判斷后端服務(wù)器的業(yè)務(wù)可用性,開(kāi)啟健康檢查功能后,當(dāng)某臺(tái)后端服務(wù)器健康檢查出現(xiàn)異常時(shí),ALB會(huì)自動(dòng)將新的請(qǐng)求分發(fā)到其他健康檢查正常的后端服務(wù)器上,避免了局部后端服務(wù)器異常對(duì)總體服務(wù)的影響從而保證業(yè)務(wù)高可用。當(dāng)出現(xiàn)健康檢查異常時(shí),您可參考本文進(jìn)行排查解決。
問(wèn)題描述
ALB實(shí)例的監(jiān)聽(tīng)對(duì)應(yīng)的健康檢查狀態(tài)顯示異常。
問(wèn)題原因
如果您是首次配置健康檢查時(shí)出現(xiàn)異常,主要原因是健康檢查配置問(wèn)題。可以通過(guò)以下兩類原因進(jìn)行排查。
健康檢查參數(shù)設(shè)置錯(cuò)誤
監(jiān)聽(tīng)端口問(wèn)題
如果您是配置成功后健康檢查出現(xiàn)異常,主要原因是后端服務(wù)器出現(xiàn)問(wèn)題。可以通過(guò)以下三類原因進(jìn)行排查。
安全類防護(hù)軟件問(wèn)題
路由配置錯(cuò)誤問(wèn)題
后端服務(wù)器負(fù)載過(guò)高
解決方案
首次配置健康檢查出現(xiàn)異常
原因一:健康檢查參數(shù)設(shè)置錯(cuò)誤
- 登錄應(yīng)用型負(fù)載均衡ALB控制臺(tái)。
在頂部菜單欄,選擇ALB實(shí)例所屬的地域。
在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)器組頁(yè)面,找到目標(biāo)ALB實(shí)例掛載的服務(wù)器組,然后單擊服務(wù)器組ID。
在服務(wù)組詳情頁(yè)面,在健康檢查區(qū)域單擊編輯健康檢查。
在編輯健康檢查對(duì)話框,檢查健康檢查參數(shù)設(shè)置是否正常,建議按照默認(rèn)提供的健康檢查參數(shù)進(jìn)行設(shè)置。
更多信息,請(qǐng)參見(jiàn)健康檢查。
原因二:監(jiān)聽(tīng)端口問(wèn)題
- 登錄應(yīng)用型負(fù)載均衡ALB控制臺(tái)。
在頂部菜單欄,選擇ALB實(shí)例所屬的地域。
在左側(cè)導(dǎo)航欄,選擇 。
在服務(wù)器組頁(yè)面,找到目標(biāo)ALB實(shí)例掛載的服務(wù)器組,然后單擊服務(wù)器組ID。
在服務(wù)器組詳情頁(yè),單擊后端服務(wù)器頁(yè)簽,查看并記錄后端服務(wù)器端口。
在服務(wù)組詳情頁(yè)面,單擊詳細(xì)信息頁(yè)簽,在健康檢查區(qū)域單擊編輯健康檢查。在編輯健康檢查對(duì)話框,查看并記錄健康檢查參數(shù)。
登錄后端服務(wù)器,使用nc或curl命令對(duì)后端服務(wù)器進(jìn)行探測(cè)。
關(guān)于如何登錄ECS,請(qǐng)參見(jiàn)ECS遠(yuǎn)程連接操作指南。
# 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 #示例
說(shuō)明[$Method]為該服務(wù)器組設(shè)置的健康檢查方法。
[$PATH]為該服務(wù)器組設(shè)置的健康檢查路徑。
[$VERSION]為該服務(wù)器組設(shè)置的健康檢查中HTTP協(xié)議的版本,例如HTTP/1.0。
[$Domain]為該服務(wù)器組設(shè)置的健康檢查域名,如果該值為“-----”,說(shuō)明默認(rèn)使用各后端ECS實(shí)例的內(nèi)網(wǎng)IP為域名,可以使用[$IP]代替。
[$IP]為后端ECS實(shí)例內(nèi)網(wǎng)IP地址。
[$Port]為該服務(wù)器組設(shè)置的健康檢查的探測(cè)端口,如果沒(méi)有手動(dòng)配置過(guò)健康檢查端口,默認(rèn)使用的是后端ECS實(shí)例端口,如果配置了健康檢查端口,則使用配置的健康檢查端口。
查看命令執(zhí)行結(jié)果的狀態(tài)碼,結(jié)合業(yè)務(wù)判斷返回的狀態(tài)碼是否屬于正常情況下的返回。
如果判斷返回的狀態(tài)碼是屬于正常情況下的返回,且該狀態(tài)碼未在健康檢查中配置,請(qǐng)修改健康檢查的健康狀態(tài)返回碼。
如果判斷返回的狀態(tài)碼異常,請(qǐng)參見(jiàn)下表進(jìn)行排查。下表列出了可能返回的HTTP狀態(tài)碼及排查方法。
狀態(tài)碼
描述
排查方法
400
客戶端HTTP請(qǐng)求格式異常
HTTP頭部格式錯(cuò)誤,例如content length為空、header的某些字段未使用大寫(xiě)字母等。請(qǐng)檢查HTTP請(qǐng)求的格式。
404
未找到目標(biāo)資源
請(qǐng)檢查請(qǐng)求的URL是否正確。
405
健康檢查請(qǐng)求方法不支持
請(qǐng)檢查后端服務(wù)是否支持健康檢查的請(qǐng)求方法。
500
服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求
請(qǐng)檢查后端服務(wù)的業(yè)務(wù)邏輯。
503
服務(wù)器暫時(shí)不可用
請(qǐng)檢查后端服務(wù)的業(yè)務(wù)邏輯或負(fù)載是否過(guò)高。
配置成功后健康檢查出現(xiàn)異常
原因一:安全類防護(hù)軟件問(wèn)題
ALB實(shí)例使用內(nèi)網(wǎng)地址段100.64.0.0/10或VPC網(wǎng)段與后端ECS通信,請(qǐng)確保后端ECS實(shí)例沒(méi)有對(duì)ALB實(shí)例的該網(wǎng)段進(jìn)行任何形式的屏蔽,包括Iptables或其他任何第三方安全策略軟件。
因?yàn)?span data-tag="ph" id="ph-rny-6ch-25s" class="ph">ALB通過(guò)內(nèi)部保留地址段中的IP地址與后端ECS實(shí)例通信,ALB的該地址段被屏蔽會(huì)導(dǎo)致健康檢查異常,ALB將無(wú)法正常工作。本文以Iptables檢查100.64.0.0/10為例介紹。
登錄問(wèn)題后端ECS實(shí)例,執(zhí)行以下命令,查看filter表的所有規(guī)則。
iptables -nL
如果返回類似以下信息,說(shuō)明后端ECS實(shí)例禁止ALB內(nèi)網(wǎng)地址段請(qǐng)求。
執(zhí)行以下命令,刪除此規(guī)則即可。
iptables -t filter -D INPUT -s 100.64.0.0/10 -j DROP
執(zhí)行以下命令,確認(rèn)沒(méi)有禁止ALB內(nèi)網(wǎng)地址段請(qǐng)求。
iptables -nL
原因二:路由配置錯(cuò)誤問(wèn)題
當(dāng)ALB實(shí)例使用的內(nèi)網(wǎng)地址段100.64.0.0/10在后端ECS上的路由配置錯(cuò)誤時(shí),也會(huì)導(dǎo)致ALB實(shí)例收不到健康檢查探測(cè)的數(shù)據(jù)包,造成健康檢查異常。本文以Linux下的route命令為例,檢查路由配置情況。
登錄問(wèn)題后端ECS實(shí)例,執(zhí)行以下命令,檢查當(dāng)前系統(tǒng)的路由配置情況。
route -n
若您發(fā)現(xiàn)存在路由條目的Destination為100.64.0.0,Genmask為255.192.0.0,且Gateway沒(méi)有指向?qū)?yīng)網(wǎng)卡的默認(rèn)網(wǎng)關(guān)(當(dāng)Destination為0.0.0.0時(shí),Gateway顯示的信息就是默認(rèn)網(wǎng)關(guān)),則該路由配置錯(cuò)誤。
執(zhí)行以下命令,刪除配置錯(cuò)誤的100.64.0.0/10路由。
route del -net 100.64.0.0/10
原因三:后端ECS實(shí)例負(fù)載過(guò)高
參見(jiàn)Linux實(shí)例負(fù)載高問(wèn)題排查和異常處理,查看是否是服務(wù)器負(fù)載過(guò)高導(dǎo)致的問(wèn)題。