LVS三種負載均衡模式之-網絡地址轉換

LVS全稱是Linux Virtual Service

 

1.通過NAT實現虛擬服務器(VS/NAT)

 

由於IPv4中IP地址空間的日益緊張和安全方面的原因,很多網絡使用保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0 /255.128.0.0和192.168.0.0/255.255.0.0)[64, 65, 66]。這些地址不在Internet上使用,而是專門爲內部網絡預留的。當內部網絡中的主機要訪問Internet或被Internet訪問時,就需要 採用網絡地址轉換(Network Address Translation, 以下簡稱NAT),將內部地址轉化爲Internets上可用的外部地址。NAT的工作原理是報文頭(目標地址、源地址和端口等)被正確改寫後,客戶相信 它們連接一個IP地址,而不同IP地址的服務器組也認爲它們是與客戶直接相連的。由此,可以用NAT方法將不同IP地址的並行網絡服務變成在一個IP地址 上的一個虛擬服務。


VS/NAT的體系結構如圖3.1所示。在一組服務器前有一個調度器,它們是通過Switch/HUB相連接的。這些服務器提供相同的網絡服務、相 同的內容,即不管請求被髮送到哪一臺服務器,執行結果是一樣的。服務的內容可以複製到每臺服務器的本地硬盤上,可以通過網絡文件系統(如NFS)共享,也 可以通過一個分佈式文件系統來提供。


客戶通過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器,調度器根據連接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址 Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最後將修改後的報文發送給選出的服務器。同時,調度器在連接Hash 表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定服務器的地址和端口,進行同樣的改寫操作,並將報文傳給原選定的服務 器。當來自真實服務器的響應報文經過調度器時,調度器將報文的源地址和源端口改爲Virtual IP Address和相應的端口,再把報文發給用戶。我們在連接上引入一個狀態機,不同的報文會使得連接處於不同的狀態,不同的狀態有不同的超時值。在TCP 連接中,根據標準的TCP有限狀態機進行狀態遷移;在UDP中,我們只設置一個UDP狀態。不同狀態的超時值是可以設置的,在缺省情況下,SYN狀態的超 時爲1分鐘,ESTABLISHED狀態的超時爲15分鐘,FIN狀態的超時爲1分鐘;UDP狀態的超時爲5分鐘。當連接終止或超時,調度器將這個連接從 連接Hash表中刪除。

這樣,客戶所看到的只是在Virtual IP Address上提供的服務,而服務器集羣的結構對用戶是透明的。對改寫後的報文,應用增量調整Checksum的算法調整TCP Checksum的值,避免了掃描整個報文來計算Checksum的開銷。


在一些網絡服務中,它們將IP地址或者端口號在報文的數據中傳送,若我們只對報文頭的IP地址和端口號作轉換,這樣就會出現不一致性,服務會中斷。 所以,針對這些服務,需要編寫相應的應用模塊來轉換報文數據中的IP地址或者端口號。我們所知道有這個問題的網絡服務有FTP、IRC、H.323、 CUSeeMe、Real Audio、Real Video、Vxtreme / Vosiac、VDOLive、VIVOActive、True Speech、RSTP、PPTP、StreamWorks、NTT AudioLink、NTT SoftwareVision、Yamaha MIDPlug、iChat Pager、Quake和Diablo。

下面,舉個例子來進一步說明VS/NAT,如圖3.2所示:


 

VS/NAT的配置如下表所示,所有到IP地址爲202.103.106.5和端口爲80的流量都被負載均衡地調度的真實服務器 172.16.0.2:80和172.16.0.3:8000上。目標地址爲202.103.106.5:21的報文被轉移到172.16.0.3:21 上。而到其他端口的報文將被拒絕。

Protocol Virtual IP Address Port Real IP Address Port Weight
TCP 202.103.106.5 80 172.16.0.2 80 1
172.16.0.3 8000 2
TCP 202.103.106.5 21 172.16.0.3 21 1

從以下的例子中,我們可以更詳細地瞭解報文改寫的流程。

訪問Web服務的報文可能有以下的源地址和目標地址:

SOURCE 202.100.1.2:3456 DEST 202.103.106.5:80

調度器從調度列表中選出一臺服務器,例如是172.16.0.3:8000。該報文會被改寫爲如下地址,並將它發送給選出的服務器。

SOURCE 202.100.1.2:3456 DEST 172.16.0.3:8000

從服務器返回到調度器的響應報文如下:

SOURCE 172.16.0.3:8000 DEST 202.100.1.2:3456

響應報文的源地址會被改寫爲虛擬服務的地址,再將報文發送給客戶:

SOURCE 202.103.106.5:80 DEST 202.100.1.2:3456

這樣,客戶認爲是從202.103.106.5:80服務得到正確的響應,而不會知道該請求是服務器172.16.0.2還是服務器172.16.0.3處理的。

 

轉自:

http://zh.linuxvirtualserver.org/node/26

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章