Linux服務器集群系統之通過直接路由實現虛擬服務器(VS/DR)
Linux服務器集群系統是當代許多公司采用的解決方案,Linux服務器集群通過多臺機器連接起來,處理復雜的問題。可以將同構或者異構的計算機連接起來,協同完成特定的任務。這樣就構成了集群。LVS是Linux virtual server的縮寫,他的意思是Linux虛擬機服務。本文主要介紹的是基于Linux下的集群系統之通過IP隧道實現虛擬服務器(VS/TUN)。
跟VS/TUN方法相同,VS/DR利用大多數Internet服務的非對稱特點,負載調度器中只負責調度請求,而服務器直接將響應返回給客戶,可以極大地提高整個集群系統的吞吐量。該方法與IBM的NetDispatcher產品中使用的方法類似(其中服務器上的IP地址配置方法是相似的),但IBM的NetDispatcher是非常昂貴的商品化產品,我們也不知道它內部所使用的機制,其中有些是IBM的專利。
VS/DR的體系結構如圖7所示:調度器和服務器組都必須在物理上有一個網卡通過不分斷的局域網相連,如通過高速的交換機或者HUB相連。VIP地址為調度器和服務器組共享,調度器配置的VIP地址是對外可見的,用于接收虛擬服務的請求報文;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用于處理目標地址為VIP的網絡請求。
圖7:VS/DR的體系結構
VS/DR的工作流程如圖8所示:它的連接調度和管理與VS/NAT和VS/TUN中的一樣,它的報文轉發方法又有不同,將報文直接路由給目標服務器。在VS/DR中,調度器根據各個服務器的負載情況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改為選出服務器的MAC地址,再將修改后的數據幀在與服務器組的局域網上發送。因為數據幀的MAC地址是選出的服務器,所以服務器肯定可以收到這個數據幀,從中可以獲得該IP報文。當服務器發現報文的目標地址VIP是在本地的網絡設備上,服務器處理這個報文,然后根據路由表將響應報文直接返回給客戶。
圖8:VS/DR的工作流程
在VS/DR中,根據缺省的TCP/IP協議棧處理,請求報文的目標地址為VIP,響應報文的源地址肯定也為VIP,所以響應報文不需要作任何修改,可以直接返回給客戶,客戶認為得到正常的服務,而不會知道是哪一臺服務器處理的。
VS/DR負載調度器跟VS/TUN一樣只處于從客戶到服務器的半連接中,按照半連接的TCP有限狀態機進行狀態遷移。
【編輯推薦】