負載均衡原理與實踐詳解 第五篇 負載均衡時數據包流程詳解
系列文章:
負載均衡詳解第三篇:服務器負載均衡的基本概念-使用負載均衡器的服務器群
負載均衡詳解第四篇:服務器負載均衡的基本概念-負載均衡時數據包流程
負載均衡詳解第六篇:服務器負載均衡的基本概念-網絡地址轉換(NAT)
負載均衡詳解第七篇:服務器負載均衡的基本概念-服務器直接返回
負載均衡詳解第十篇:服務器負載均衡技術進階-會話保持(下)
我們以下圖為例,討論采用負載均衡器后數據包的流程。
如圖所示,有三台服務器,RS1到RS3,還包含三種應用:Web(HTTP),FTP,和SMTP,分別在三台服務器上運行。在這個例子中,所有的應用都運行在TCP之上,而且每個應用都使用不同的TCP端口。WEB應用在80端口上運行,FTP在21端口上運行,而SMTP在端口25上運行。負載均衡器根據接收的TCP數據包中的目的端口號識別客戶端需要訪問的應用,並為每個客戶請求選擇合適的服務器。
選擇服務的過程分兩步,第一,負載均衡器必須判斷哪些服務器上面的應用是可用的。服務器和應用是否可用由健康檢查決定,我們將會在后面的章節中詳細討論。第二,負載均衡器采用一種負載均衡算法來選擇服務器。常用的復雜均衡算法有輪循、最小連接數、權重、最快響應時間等,負載均衡算法將會在后面的章節詳細討論。
負載均衡器的配置包括以下幾個步驟:
1.定義一個VIP:VIP=123.122.121.1;
2.確定哪些應用需要負載均衡:Web、FTP和SMTP;
3.對每個應用,綁定VIP到相應的真實服務器:把RS1和RS2綁定到Web的VIP;把RS1綁定到FTP的VIP;把RS2和RS3綁定到SMTP的VIP。也就是說,VIP的80端口綁定到RS1和RS2的80端口;VIP的21端口綁定到RS1的21端口,依此類推,如上圖所示;
4.設置健康檢查,用來檢查服務器和應用的健康狀態;
5.設置負載均衡算法。 通過把VIP綁定到真實服務器的不同TCP端口,我們把服務器和應用分離開,提供了強大的靈活性。舉例來說,如果FTP應用的訪問量增加,只需要把另外一台服務器綁定到VIP的21端口就可以增加FTP服務的處理能力。如果RS2需要下線維護,我們可以利用負載均衡器實現RS2的無縫停機,也就是停止向RS2發送任何新的請求,並等待所有的在線連接關閉,然后將RS2停機。
注意示例中所有的真實服務器都使用私有IP地址,這樣做有兩個好處:首先,只用一個公網IP地址,也就是VIP,來表示所有的服務器群可以節省IP地址空間;第二,提高了安全性,任何客戶的請求都不能繞過負載均衡器直接訪問到服務器。
對於負載均衡器能夠做什么,現在我們都了解了,下面看一下采用負載均衡器后數據包的轉發流程。
我們用一個簡單例子,如下圖所示,來了解請求響應過程中數據包的轉發流程。
客戶端首先建立一個TCP連接,發送HTTP請求,接收服務器響應,並關閉這個TCP連結。建立TCP連接需要三次握手,負載均衡器接收到的TCP SYN請求包含以下信息:
源IP地址:客戶端的IP地址;
源端口:客戶端用於此TCP連接的端口號碼;
目的IP地址:VIP地址;
目的端口:由於請求訪問的是WEB應用,所以目的端口是80。
上述四個因素唯一標識了一個TCP會話,當負載均衡器接收到第一個TCP SYN數據包后,假定選擇RS2處理這個請求,並將請求發送到RS2。為了讓RS2接收TCP SYN數據包並進行處理,必須把數據包的目的地址修改為RS2的私有IP地址,而不是VIP的IP地址。因此,負載均衡器在轉發數據包之前會把目的地址修改為RS2的IP地址,這個IP地址轉換的過程稱為網絡地址轉換(NAT)。更確切的講,由於負載均衡器修改的是目的地址,所以也稱為目的地址NAT。
當用戶敲入www.agilesharp.com之后,瀏覽器會產生一個DNS查詢請求,獲取www.agilesharp.com對應的IP地址,也就是VIP。然后客戶端的瀏覽器發送TCP SYN數據包以建立一個新的TCP聯接。當負載均衡器接收TCP SYN數據包后,它先確認這個請求是需要做負載均衡的數據包,因為數據包的目的地址是VIP。由於這是一個新的連接,負載均衡器無法在會話表中通過源IP地址、目的IP地址、源端口地址、目的端口地址查到這一個會話。根據負載均衡設置和健康檢查的結果,負載均衡器確認RS1和RS2可以接收新建連接。根據預先定義的負載均衡算法,負載均衡器選擇RS2來處理這個會話請求。服務器選定之后,負載均衡器在它的會話表中建立一個新的記錄,並把數據包的目的IP地址和目的MAC地址修改為服務器RS2的IP地址和MAC地址,然后把數據包發送到RS2。
當接收到TCP SYN包之后,RS2會應答TCP SYN ACK包,數據包的源地址是RS2的IP地址,而目的地址就是客戶端的IP地址。負載均衡器接收到這個數據包之后,再把RS2的IP地址修改為VIP的IP地址,並把數據包發送到路由器,最終路由到客戶端。這個TCP會話后續所有的請求和回應數據包都是經過同樣的流程。最終,當通過FIN或RESET結束或終止這個連接時,負載均衡器在其會話表中刪除這個會話記錄。
現在我們來跟蹤數據包的流程,看一下IP地址和MAC地址是如何改變的。當路由器接收到數據包時,數據包的目的IP地址是VIP,而目的MAC地址是M1,也就是路由器的MAC地址。
第一步,如上圖中所示,路由器把目的MAC地址修改為M2並把數據包發送到負載均衡器,M2是負載均衡器的MAC地址。
第二步,負載均衡器把目的IP地址和目的MAC地址修改為RS2的IP地址和MAC地址,並發送到RS2。
第三步,RS2響應客戶端的請求。因此,源IP和源MAC都是RS2的地址,而目的IP地址是客戶端的IP地址。RS1和RS2的缺省網關是負載均衡器的IP地址。因此,目的MAC地址是負載均衡器的MAC地址。
第四步,負載均衡器接收數據包之后,把源IP地址修改為VIP的地址,使得回應看起來跟VIP發出的一樣。這一點非常重要,TCP連接是建立在客戶端和VIP之間的,並不是真實服務器,所以回應的數據包必須看起來象是從VIP發出的一樣。為了數據包能夠正常到達客戶端,負載均衡器需要把數據包轉發給它的下一跳,也就是路由器。負載均衡器把源MAC地址修改為自己的MAC地址M2,目的MAC地址修改為路由器的MAC地址M1,然后把數據包轉發至路由器。
在這個例子中,負載均衡器作為真實服務器的缺省網關。其實,也可以用路由器作為服務器的缺省網關。那樣的話,從真實服務器返回的數據包的目的MAC地址為M1,也就是路由器的MAC地址,而負載均衡器對源MAC和目的MAC不做任何改動。對於其他的二、三層交換機和主機而言,負載均衡器就相當於一個二層交換機。
本篇就討論到這里!下一篇,我們繼續!