Linux服務(wù)器集群系統(tǒng)之通過NAT實現(xiàn)虛擬服務(wù)器(VS/NAT)
Linux服務(wù)器集群系統(tǒng)是當(dāng)代許多公司采用的解決方案,Linux服務(wù)器集群通過多臺機器連接起來,處理復(fù)雜的問題??梢詫⑼瑯?gòu)或者異構(gòu)的計算機連接起來,協(xié)同完成特定的任務(wù)。這樣就構(gòu)成了集群。LVS是Linux virtual server的縮寫,他的意思是Linux虛擬機服務(wù)。本文主要介紹的是基于Linux服務(wù)器下的集群系統(tǒng)之通過NAT實現(xiàn)虛擬服務(wù)器(VS/NAT)。
由于IPv4中IP地址空間的日益緊張和安全方面的原因,很多網(wǎng)絡(luò)使用保留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上使用,而是專門為內(nèi)部網(wǎng)絡(luò)預(yù)留的。當(dāng)內(nèi)部網(wǎng)絡(luò)中的主機要訪問Internet或被Internet訪問時,就需要采用網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation, 以下簡稱NAT),將內(nèi)部地址轉(zhuǎn)化為Internets上可用的外部地址。NAT的工作原理是報文頭(目標(biāo)地址、源地址和端口等)被正確改寫后,客戶相信它們連接一個IP地址,而不同IP地址的服務(wù)器組也認為它們是與客戶直接相連的。由此,可以用NAT方法將不同IP地址的并行網(wǎng)絡(luò)服務(wù)變成在一個IP地址上的一個虛擬服務(wù)。
VS/NAT的體系結(jié)構(gòu)如圖2所示。在一組服務(wù)器前有一個調(diào)度器,它們是通過Switch/HUB相連接的。這些服務(wù)器提供相同的網(wǎng)絡(luò)服務(wù)、相同的內(nèi)容,即不管請求被發(fā)送到哪一臺服務(wù)器,執(zhí)行結(jié)果是一樣的。服務(wù)的內(nèi)容可以復(fù)制到每臺服務(wù)器的本地硬盤上,可以通過網(wǎng)絡(luò)文件系統(tǒng)(如NFS)共享,也可以通過一個分布式文件系統(tǒng)來提供。
圖2:VS/NAT的體系結(jié)構(gòu)
客戶通過Virtual IP Address(虛擬服務(wù)的IP地址)訪問網(wǎng)絡(luò)服務(wù)時,請求報文到達調(diào)度器,調(diào)度器根據(jù)連接調(diào)度算法從一組真實服務(wù)器中選出一臺服務(wù)器,將報文的目標(biāo)地址Virtual IP Address改寫成選定服務(wù)器的地址,報文的目標(biāo)端口改寫成選定服務(wù)器的相應(yīng)端口,最后將修改后的報文發(fā)送給選出的服務(wù)器。同時,調(diào)度器在連接Hash表中記錄這個連接,當(dāng)這個連接的下一個報文到達時,從連接Hash表中可以得到原選定服務(wù)器的地址和端口,進行同樣的改寫操作,并將報文傳給原選定的服務(wù)器。當(dāng)來自真實服務(wù)器的響應(yīng)報文經(jīng)過調(diào)度器時,調(diào)度器將報文的源地址和源端口改為Virtual IP Address和相應(yīng)的端口,再把報文發(fā)給用戶。我們在連接上引入一個狀態(tài)機,不同的報文會使得連接處于不同的狀態(tài),不同的狀態(tài)有不同的超時值。在TCP連接中,根據(jù)標(biāo)準(zhǔn)的TCP有限狀態(tài)機進行狀態(tài)遷移,這里我們不一一敘述,請參見W. Richard Stevens的《TCP/IP Illustrated Volume I》;在UDP中,我們只設(shè)置一個UDP狀態(tài)。不同狀態(tài)的超時值是可以設(shè)置的,在缺省情況下,SYN狀態(tài)的超時為1分鐘,ESTABLISHED狀態(tài)的超時為15分鐘,F(xiàn)IN狀態(tài)的超時為1分鐘;UDP狀態(tài)的超時為5分鐘。當(dāng)連接終止或超時,調(diào)度器將這個連接從連接Hash表中刪除。
這樣,客戶所看到的只是在Virtual IP Address上提供的服務(wù),而服務(wù)器集群的結(jié)構(gòu)對用戶是透明的。對改寫后的報文,應(yīng)用增量調(diào)整Checksum的算法調(diào)整TCP Checksum的值,避免了掃描整個報文來計算Checksum的開銷。
在一些網(wǎng)絡(luò)服務(wù)中,它們將IP地址或者端口號在報文的數(shù)據(jù)中傳送,若我們只對報文頭的IP地址和端口號作轉(zhuǎn)換,這樣就會出現(xiàn)不一致性,服務(wù)會中斷。所以,針對這些服務(wù),需要編寫相應(yīng)的應(yīng)用模塊來轉(zhuǎn)換報文數(shù)據(jù)中的IP地址或者端口號。我們所知道有這個問題的網(wǎng)絡(luò)服務(wù)有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所示:
圖3:VS/NAT的例子
VS/NAT的配置如下表所示,所有到IP地址為202.103.106.5和端口為80的流量都被負載均衡地調(diào)度的真實服務(wù)器172.16.0.2:80和172.16.0.3:8000上。目標(biāo)地址為202.103.106.5:21的報文被轉(zhuǎn)移到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服務(wù)的報文可能有以下的源地址和目標(biāo)地址:
SOURCE | 202.100.1.2:3456 | DEST | 202.103.106.5:80 |
調(diào)度器從調(diào)度列表中選出一臺服務(wù)器,例如是172.16.0.3:8000。該報文會被改寫為如下地址,并將它發(fā)送給選出的服務(wù)器。
SOURCE | 202.100.1.2:3456 | DEST | 172.16.0.3:8000 |
從服務(wù)器返回到調(diào)度器的響應(yīng)報文如下:
SOURCE | 172.16.0.3:8000 | DEST | 202.100.1.2:3456 |
響應(yīng)報文的源地址會被改寫為虛擬服務(wù)的地址,再將報文發(fā)送給客戶:
SOURCE | 202.103.106.5:80 | DEST | 202.100.1.2:3456 |
這樣,客戶認為是從202.103.106.5:80服務(wù)得到正確的響應(yīng),而不會知道該請求是服務(wù)器172.16.0.2還是服務(wù)器172.16.0.3處理的。
【編輯推薦】
- Linux集群原理與安裝配置匯總
- “懶惰”Linux集群管理員的11個秘訣
- 圖文詳解 文件柜內(nèi)DIY自己的Linux集群機
- 大型Linux集群的安裝節(jié)點和管理
- 大型Linux集群簡介和硬件配置
- 高性能Linux集群基礎(chǔ)知識