版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/sinat_17736151/article/details/82720288
負載均衡作為實現應用高可用和高可靠的一種方式,已成為目前數據中心內不可或缺的一個環節,並扮演着越來越重要的作用,而F5正是這一領域的佼佼者。要實現應用的高可用,如何探測負載均衡后端應用的可用性是其中非常重要的一個環節,該環節又被稱作應用的健康檢查。
本文將在下面的章節中,就作者工作中使用的幾種F5健康檢查的方式做簡單的介紹和分析。主要包括TCP_HALF_OPEN、TCP ECV、HTTP GET這三種。我認為每一種健康檢查的方式,都有其特點,而沒有絕對的優劣。
##############################################
寫在前面:
F5用來做健康檢查的配置被統稱為monitor,F5會優先通過與pool membet相同vlan的Self ip發起健康檢查,采用主備狀態的兩台F5,均會對pool中的member進行健康檢查。F5內置了一些常用的monitor配置,用戶可以直接使用。如:icmp、tcp、tcp-half-open等。用戶也可以根據自己的需要創建自己定制化的monitor。
##############################################
針對TCP應用的健康檢查,目前工作中用到的有兩種:
1、TCP-HALF-OPEN
2、另一種是通過F5發送TCP報文給應用,通過判斷收到應用的返回值中是否包含有我用來判斷應用健康的值,來監測應用的健康程度。這種方式被F5稱作ECV(Extended Content Verification)。
下面將分別針對這兩種方式做簡要的分析。
##############################################
1、TCP-HALF-OPEN方式
TCP-HALF-OPEN的探測方式,實際是F5每隔一個固定的時間,發送一個SYN包給資源池pool中的一個member,等待服務器返回SYN_ACK,在收到SYN_ACK后,F5會使用RST,將該連接重置。
若F5在發出SYN包后,超過規定的時間仍未收到SYN_ACK,則認為這個member不可用,不再向這個member分配應用流量。
F5默認內置了一個tcp-half-open的monitor,具體配置界面如下:
從圖中可以看到默認的,tcp_half_open的健康檢查方式,探測間隔為5秒,超時時間為16秒。
下面來看一下具體的數據包:
在F5上抓包,利用wireshark對抓包文件進行過濾,192.168.92.7為F5的self ip,192.168.92.11為健康檢查目標服務器。
通過Time 列可以看出,每隔約5秒鍾,F5發起一次健康檢查,F5發送SYN包與服務器建立TCP連接,服務器響應SYN包,同時服務器TCP狀態變為SYN_RCVD,回復SYN_ACK報文,F5在收到SYN_ACK后,向member服務器發送RST包,將該鏈接重置,服務器收到RST包后,TCP狀態重新變為listen狀態。
F5內置的monitor中,還有一個TCP monitor,他與TCP_HALF_OPEN的區別,主要是TCP monitor是通過發送FIN包的方式,正常中斷連接的。TCP_HALF_OPEN相對於TCP的方式,發送包的數量更少。但是由於采用RST的方式中斷連接,可能會出現問題(目前還沒有碰到),需要前期進行測試。
需要注意的是:
tcp_half_open和tcp這種健康檢查方式,只能判斷目標服務器的tcp端口是否處於listen狀態,判斷目標服務器是否有建立TCP連接的能力,不能完全用來判斷應用的可用性。這並不是一種理想的健康檢查方式。
######################################################
2、TCP ECV模式
前文已經講過,TCP ECV模式是一種定制化的監控模式,通過F5發送定制化的TCP報文,之后在返回值中匹配指定內容,判斷應用狀態。
目前,已經在我工作的公司中,已存在通過F5發送定長報文和XML格式報文。同時已知的F5支持的報文格式還有16進制構造的字符串等。
進行TCP ECV模式的健康檢查的案例。通過這種方式進行應用健康檢查,往往需要應用系統開發人員首先提供可用來進行健康檢查的探測報文。F5發送該探測報文,應用收到后,響應該報文。這時,如果該探測報文,可以由應用直接回復,無需經過數據庫,則該健康檢查只檢查到應用層面。若該探測報文,是需要在數據庫中進行查詢等操作,則可通過在這種健康檢查方式,探測這個目的member的應用可用性和其對數據庫的可用性。所以,采用這種模式的健康檢查,與應用系統開發人員的溝通將極為重要。這可能包括了,探測頻度的商定、判斷應用程序狀態指定特征碼的唯一性等。
下面來看一個例子,
已知x.x.61.55通過TCP 38001端口對外提供服務
開發提供的健康檢查探測報文如下:
可以首先通過sockettool軟件,判斷該報文的正確性,判斷該報文是否被服務器接受。
在F5中,創建monitor,並命名,選擇tcp作為父monitor,如下圖:
將開發提供的報文粘貼進Send String一欄中。同時我們得知,該應用系統在收到可識別的報文后,會返回帶有00000特征碼的報文,我們就可以通過這個特征碼,判斷應用是否可用。在Receive String中輸入000000,F5會在收到的返回報文中查找該字符,若查到則健康檢查通過,反之失敗。
下面我們看一下具體數據包:
紅底部分為F5作為客戶端發送的探測報文,我們可以看到F5發送由開發提供的探測報文,在收到返回報文中,匹配到指定的000000特征碼,則健康檢查通過。
其中在具體的配置過程中,有幾點需要注意:
探測報文中不能帶有換行符
探測報文中部分字符需要進行轉義,例如雙引號,其中xml報文中標記了xml版本和編碼格式的字段中的的雙引號可以由單引號代替。
推薦使用火狐瀏覽器,進行該項配置。
新建monitor需要管理員權限。
#######################################################
HTTP GET
針對HTTP應用的健康檢查,常用的是通過HTTP GET的方式,獲取指定頁面,通過判斷頁面中是否有指定的字符串,判斷http應用的健康狀態。
配置頁面如下,其中父monitor選擇為http
下面來看一個具體的案例,http get的內容為:
GET /ibxx/ HTTP/1.1 \r\n
下面看具體數據包,如下圖:
可以看到,F5首先與目標服務器建立TCP連接,之后通過HTTP GET的方式,獲取指定頁面。服務器響應該請求,如下圖:
在這里,我們常通過判斷收到200,作為判斷http服務正常的依據。
200狀態碼:表示請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
我們也可以通過其他字符,作為判斷http應用運行正常的依據。
最后,F5會通過發送RST包的方式,將該連接復位。
其中需要注意的是:
F5發送的是http 0.9的get請求,所以我們需要針對應用工作的http版本,構造get內容,例如:
HTTP version 1.1:GET /index.html HTTP/1.1 \r\n
HTTP version 1.0:GET /index.html HTTP/1.0 \r\n
F5同樣支持HTTP POST,作為健康檢查的一種方式。
#############################################################
至此,我們介紹了F5常用的TCP_HALF_OPEN、TCP ECV、HTTP GET這三種健康檢查的方式,除此以外,F5還支持多種健康檢查方式,包括訪問特定應用的健康檢查方式,如FTP、Oracle等。目前在我司還未應用,有待后續進一步探索。
————————————————
版權聲明:本文為CSDN博主「BBIE」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sinat_17736151/article/details/82720288