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