健康檢查是負(fù)載均衡中最基本的功能,也是整個負(fù)載均衡處理過程中最重要的環(huán)節(jié)。為了確保后端應(yīng)用的高可用性,負(fù)載均衡通過定義的健康檢查方法實時的對后端服務(wù)器或應(yīng)用的健康狀態(tài)進行檢測,當(dāng)后臺服務(wù)器發(fā)生故障的時候,負(fù)載均衡會發(fā)現(xiàn)這些問題,并把服務(wù)器從應(yīng)用服務(wù)組中排出,以避免將正常的客戶端請求轉(zhuǎn)發(fā)至故障的服務(wù)器上,以確保用戶的能夠正常訪問后端的應(yīng)用。
有時候,雖然服務(wù)器仍在運行,但是因為某種原因,比如:軟件編寫的漏洞或著相關(guān)聯(lián)的應(yīng)用中間件或數(shù)據(jù)庫出了問題,導(dǎo)致服務(wù)器上運行的應(yīng)用系統(tǒng)已經(jīng)不能正常工作。在這種情況下,就需要采用一些能夠檢測應(yīng)用狀態(tài)(有時也稱作基于應(yīng)用內(nèi)容)的健康檢查方法。
基于ICMP協(xié)議的健康檢查
利用ICMP進行健康檢查是負(fù)載均衡最常用也是最基本的健康檢查方式。負(fù)載均衡向被檢測的服務(wù)器發(fā)送一個ICMP Request,如果能收到服務(wù)器的ICMP Reply,則說明服務(wù)器當(dāng)前正常運行。一般情況下,ICMP健康檢查只能說明服務(wù)器正在運行,但是,對服務(wù)器上運行的應(yīng)用卻無任何感知,因此,ICMP健康檢查常用于一些鏈路負(fù)載均衡的部署環(huán)境,在應(yīng)用服務(wù)器負(fù)載均衡的環(huán)境中,ICMP是不太可靠的。
基于TCP協(xié)議的健康檢查
常見的應(yīng)用程序都會使用一個固定的監(jiān)聽端口,比如:HTTP運行在80端口,F(xiàn)TP運行在21/20端口、HTTPS運行在443端口等等。因此,TCP健康檢查就是負(fù)載均衡與對應(yīng)的服務(wù)器應(yīng)用端口進行TCP三次握手,如果握手成功,則說明服務(wù)器上的應(yīng)用正常工作,如果握手失敗,則說明當(dāng)前服務(wù)器運行情況不正常。
基于UDP協(xié)議的健康檢查
相較于TCP,UDP是無連接的協(xié)議,盡管協(xié)議交互更加簡單,但是健康檢查方法卻并不簡單。因為對于TCP來說,只要無法正常建立TCP連接,即可說明服務(wù)器端應(yīng)用服務(wù)不正常。但是,利用UDP進行通信時,卻并無嚴(yán)格要求服務(wù)器在收到UDP請求報文時必須進行確認(rèn)。因此,UDP健康檢查主要是看在發(fā)送出UDP的健康檢查報文后,是否會收到ICMP unreachable的報文。如果沒收到這種報文,就說明應(yīng)用正常運行;如果收到這種ICMP報文,則說明應(yīng)用發(fā)送了故障。
基于應(yīng)用內(nèi)容的健康檢查方法
利用常見的ICMP、TCP和UDP健康檢查方法,盡管能夠?qū)Ψ?wù)器的健康狀態(tài)進行檢查,但是,我們有時候會發(fā)現(xiàn),盡管仍然能與服務(wù)器建立TCP三次握手,但是,服務(wù)器卻無法正常響應(yīng)客戶端請求。在這種情況下,我們需要更進一步,采用基于應(yīng)用內(nèi)容的健康檢查方法。
例如,對于Web應(yīng)用服務(wù)器,我們可以模擬客戶端發(fā)送一個HTTP請求,根據(jù)響應(yīng)的內(nèi)容或響應(yīng)狀態(tài)碼來判斷Web應(yīng)用服務(wù)器的健康狀態(tài)。
基于腳本的健康檢查方法
在某些情況下,由于用戶的一些應(yīng)用特殊性,無法用與常規(guī)的健康檢查方法進行健康檢查。例如:在某些鏈路健康狀態(tài)檢查時,必須采用指定的源地址進行鏈路的健康檢查,在這些情況下,我們可以用一個簡單的腳本來解決問題。
A10的AX上提供了豐富的健康檢查方法,從簡單的ICMP、TCP、UDP到基于應(yīng)用內(nèi)容檢測的HTTP、HTTPS、FTP、SIP等等。下面,我們將以A10網(wǎng)絡(luò)的AX負(fù)載均衡為例,來說明這些常見的負(fù)載均衡的配置方法。