可伸縮網路服務的幾種結構,它們都需要一個前端的負載調度器(或者多個進行主從備份)。我們先分析實現虛擬網路服務的主要技術,指出IP負載平衡技術是在負載調度器的實現技術中效率最高的。在已有的IP負載平衡技術中,主要有通過網路位址轉譯(Network
Address Translation)將一組伺服器構成一個高效能的、高可用的虛擬伺服器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation)。在分析VS/NAT的缺點和網路服務的非對稱性的基礎上,我們提出了通過IP隧道實現虛擬伺服器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實現虛擬伺服器的方法VS/DR(Virtual
Server via Direct Routing),它們可以極大地提高系統的伸縮性。VS/NAT、VS/TUN和VS/DR技術是LVS叢集中實現的三種IP負載平衡技術。
三種轉寄機制的優缺點
◆Virtual Server via NAT
VS/NAT 的優點是伺服器可以運行任何支援TCP/IP的作業系統,它只需要一個IP地址配置在LVS主機上,伺服器組可以用私人的IP地址。缺點是它的擴充能力有限,當伺服器結點數目升到20時,LVS主機本身有可能成為系統的新瓶頸,因為在VS/NAT中請求和響應封包都需要通過Server Load BalancerLVS主機。在 Pentium 166主機上測得重寫封包的平均延時為60us,假設TCP封包的平均長度為536 Bytes,則LVS主機的最大輸送量為8.93 MBytes/s。再假設每台伺服器的輸送量為600KBytes/s,這樣一個LVS主機可以帶動16台伺服器。
◆Virtual Server via IP Tunneling
在VS/TUN 的叢集系統中,Server Load BalancerLVS主機只將請求分配到不同的實際伺服器,實際伺服器將應答的資料直接返回給使用者。這樣,Server Load BalancerLVS主機就可以處理巨量的請求,而不會成為系統的瓶頸。即使Server Load BalancerLVS主機只有100Mbps的全雙工系統網卡,虛擬伺服器的最大輸送量可以達到幾Gbps。所以,VS/TUN可以極大地增加Server Load BalancerLVS主機分配的伺服器數量,它可以用來構建高效能超級伺服器。VS/TUN技術對伺服器的要求是所有的伺服器必須支援"IP Tunneling"或者"IP Encapsulation"協議。目前,VS/TUN
的後端伺服器主要運行Linux作業系統。因為"IP Tunneling"正成為各個作業系統的標準協議,所以VS/TUN也會適用運行其它作業系統的後端伺服器。
◆Virtual Server via Direct Routing
同VS/TUN 一樣,VS/DRLVS主機只處理客戶到伺服器端的串連,響應資料可以直接從獨立的網路路由返回給客戶。這可以極大地提高LVS叢集系統的伸縮性。同 VS/TUN相比,這種方法沒有IP隧道的開銷,但是要求Server Load BalancerLVS主機與實際伺服器都有一塊網卡連在同一物理網段上,伺服器網路裝置或者裝置別名不作 ARP 響應。
四種分配方法(Load-balancing Methods)
不同的分配方法建構LVS主機成四種不同的排程
Server Load Balancer排程是以串連為單位的。在HTTP協議(nowait)中,每個對象從WEB伺服器上擷取都需要建立一個TCP串連,同一使用者的不同請求會被分配到不同的伺服器上,所以這種串連的分配完全避免了使用者連結的突發性引起的負載不平衡。目前有以下4種排程演算法:
輪流排程 Round-Robin Scheduling (RRS)
輪流排程演算法是假設所有伺服器處理效能均相同,依次將請求分配不同的伺服器,演算法簡單,但不適用於伺服器組中處理效能不一致的情況。
加權輪流排程 Weighted Round-Robin Scheduling (WRRS)
為此使用加權輪流排程演算法,用相應的加權值表示伺服器的處理效能,將請求數目按加權值的比例分配到各伺服器。加權值高的伺服器先收到串連,加權值高的伺服器比加權值低的伺服器處理更多的串連,相同權值的伺服器處理相同數目的串連數。
最小連結數排程 Least-Connection Scheduling (LCS)
最小連結數排程是需要記錄各個伺服器已建立TCP串連的數目,把新的串連請求發送當前串連數最小的伺服器。當各個伺服器有相同的處理效能時,最小連結數排程能把負載變化大的請求平均分布到各個伺服器上,所有處理時間比較長的請求不可能被發送到同一台伺服器上。
加權最小串連數排程 Weighted Least-Connection Scheduling (WLCS)
但是,當各個伺服器的處理能力不同時,該演算法並不理想,因為TCP串連處理請求後會進入TIME_WAIT狀態,TCP的TIME_WAIT 一般為2分鐘,此時串連還佔用伺服器的資源,所以會出現這樣情形,效能高的伺服器已處理所收到的串連,串連處於TIME_WAIT狀態,而效能低的伺服器既要忙於處理所收到的串連,還要收到新的串連請求。加權最小串連分配是最小串連分配的超集,各個伺服器用相應的權值表示其處理效能。假設每台伺服器的權值為Wi(i=1..n),TCP串連數目為 Ti(i=1..n),依次選Ti/Wi為最小者的伺服器為下一個分配到服務的伺服器。