常見的負載平衡方法
1、DNS負載平衡的方法
RR-DNS(Round-Robin Domain Name System) 輪流排程的方式是:在DNS服務器中,可以為多個不同的IP地址配置同一個名稱,當客戶端查詢這個名字時將在解析這個名稱時得到其中的一個地址。因此,對于同一個名字,不同的客戶端會得到不同的地址,他們也就連結不同地址上的Web服務器,從而達到負載平衡的目的。例如 : 當客戶端連結 這名稱時,DNS 有能力依序將名稱解析到 202.1.1.1 、 202.1.1.2 、202.1.1.3和 202.1.1.4等不同的網絡地址,而這些是提供相同服務的主機,讓客戶端不自覺有不同
2、服務端應用層和IP層的負載平衡方法
EDDIE、Reverse-Proxy和SWEB 都使用屬于應用層負載平衡的方法將到達的HTTP請求轉發到不同的Web 服務器,取得結果后,再返回給用戶。Berkeley的MagicRouter、Cisco的LocalDirector、Altheon 的ACEDirector和F5的Big/IP等都是使用網絡地址轉換NAT的方法,目前在Linux 上Cluster的方式也是用這種方法達成的。
3、集群( Cluster )Server 達成負載平衡的方法
集群能達到的機制
a. 分身服務 將兩個以上的服務器連貫成服務器群,每臺提供相同服務
b. 不疑有他 客戶端感覺只有一臺機器在提供服務
c. 備份能力 也就是當其中有某臺服務器出問題時,不會有服務中斷的情形
d. 可擴充性 當客戶數量增加時,可在不中止服務的情形下擴充服務器
e. 負載平衡 將客戶端的要求科學的分配給服務器,不致讓主機負載過量
在Linux Cluster 實現負載平衡的軟件 ----LVS( Linux Virtual Server )
Linux上集群的達成是實施 Linux Virtual Server ( LVS ) 的架設
LVS可稱為Linux虛擬服務器,它具備高可用性、可擴充性和科學性的數學運算,而這些也就是集群系統 (Cluster System)的應用。
高可用性High-Availability (HA) 不允許有服務中斷的情形發生時。由兩臺以上的計算機通過一定方式互相監聽,當主要服務器主機出現問題而無預警的停止服務時,備份服務器能夠自動立即接替工作,使客戶端感覺不出有異。
可擴充性 (Scalability) 應用在web 、ftp server上為多。當用戶連結一個地址,但實際上是有若干臺服務器在提供服務。而當服務請求達到飽和時,還可以很容易地再添加新的節點而不用停掉整個cluster,實現所謂的"熱插拔",這也就是Cluster中的一個概念-Scalability (易擴展性)。而且,cluster還會查詢真實節點的情況,當某臺真實節點沒有響應時,就不再把任務分配到那里,直到這臺節點恢復正常。
科學的數學運算 (Scientific) 用于效能、圖像處理等計算
Cluster已經發展多年,也比較成熟了。之前需要專業的軟/硬設備才能實現。所以只有少數公司才有能力用的起?,F在Linux上的LVS就可以讓你在PC上架設Cluster的解決方案,使更多的人有機會構建自己的cluster。
LVS提供了三種轉發機制(Traffic Forward Mechanism)、四種分配方法(Load-balancing Methods),以下詳述
三轉發機制(Traffic Forward Mechanism)
三種不同的轉發機制分別將LVS主機建構成
NAT Virtual Server via Network Address Translation
IP Tunneling Virtual Server via IP Tunneling
Direct Routing Virtual Server via Direct Routing
負載平衡主機可稱為Virtual Server ( )、Load Balancer (負載平衡器)、Linux Director (導引主機),以下簡稱為LVS主機
NAT Virtual Server via Network Address Translation ( VS/NAT )
由于IPv4中IP地址空間的日益不足和安全方面的原因,很多網絡使用Inte.net上未被分配的私有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)。當內部網絡中的主機要連結Internet或被Internet連結時,就需要采用網絡地址轉換(Network Address Translation, 以下簡稱NAT),可以用NAT方法將不同IP地址的并行網絡服務變成在一個IP 地址上的一個虛擬服務。
VS/NAT的體系結構
在一組服務器前有一個LVS主機,用戶通過Virtual IP Address(即LVS主機的外部地址)連結服務時,請求到達LVS主機,LVS主機以負載平衡方法從一組真實服務器選出一個,將目標地址Virtual IP Address重新指向內部實際提供服務服務器的地址。同時,LVS主機記錄這個連接,當這個連接的真實服務器的響應經過LVS主機時,LVS主機將來源地址和來源端口改?Virtual IP Address和相應的埠,再把響應發給用戶。當連接終止或逾時,LVS主機將這個連接從紀錄中刪除。這樣,用戶所看到的只是在Virtual IP Address 上提供的服務。
IP Tunneling Virtual Server via IP Tunneling (VS/TUN)
在VS/NAT的集群系統中,請求和應答的封包都需要通過LVS主機,當實際服務器的數量超過20時,LVS主機將成為集群系統的新瓶頸。利用IP隧道技術將請求封包封裝轉發給后端服務器,響應封包能從后端服務器直接返回給客戶。但在這里,后端服務器有一組而非一個,所以我們不可能靜態地建立一一對應的隧道,而是動態地選擇一臺服務器,將請求封包封裝和轉發給選出的服務器。這樣,我們可以利用IP隧道的原理將一組服務器上的網絡服務組成在一個IP地址上的虛擬網絡服務。
VS/TUN的體系結構
如上圖所示,各個服務器將 VIP地址配置在自己的IP隧道設備上。
VS/TUN的連接分配和管理與VS/NAT中的一樣,只是它的封包轉發方法不同。負載平衡主機根據各個服務器的負載情況,動態地選擇一臺服務器,將請求封包封裝在另一個IP封包中,再將封裝后的IP封包轉發給選出的服務器;那臺服務器收到封包后,先將封包解封獲得原來目標地址為VIP的封包,服務器發現VIP地址被配置在本地的IP隧道設備上,所以就處理這個請求,然后根據路由表將響應封包直接返回給客戶。
Direct Routing Virtual Server via Direct Routing (VS/DR)
這種IP層負載平衡方法與IBM的NetDispatcher中的方法類似。它的體系結構如下圖所示:
VS/DR的體系結構
LVS主機和服務器組都必須在同一網絡區域中,如通過交換機或者高速的HUB相連。VIP地址為LVS主機和服務器組共享,LVS主機配置的VIP地址是對外可連結的,用于接收虛擬服務的請求封包;所有的服務器把VIP地址配置在各自的Non-ARP網絡設備上,它對外面是不可見的,只是用于處理目標地址?VIP的網絡請求。
VS/DR的連接分配和管理與VS/NAT和VS/TUN中的一樣,它的封包轉發方法又有不同,將封包直接路由給目標服務器。在VS/DR中,LVS主機根據各個服務器的負載情況,動態地選擇一臺服務器,不修改也不封裝IP封包,而是將資料封包的MAC地址改為選出服務器的MAC地址,再將修改后的資料封包在與服務器組的局域網上發送;因為資料封包的MAC地址是選出的服務器,所以服務器肯定可以收到該封包,發現VIP地址被配置在本地的網絡設備上,所以就處理這個請求,然后根據路由表將響應封包直接返回給客戶。
三種轉發機制的優缺點
歸納在下表中:
● Virtual Server via NAT
VS/NAT的優點是服務器可以運行任何支持TCP/IP的操作系統,它只需要一個IP地址配置在LVS主機上,服務器組可以用私有的IP地址。缺點是它的擴充能力有限,當服務器結點數目升到20時,LVS主機本身有可能成為系統的新瓶頸,因為在VS/NAT中請求和響應封包都需要通過負載LVS主機。在Pentium 166主機上測得重寫封包的平均延時為60us,假設TCP封包的平均長度為536 Bytes,則LVS主機的最大吞吐量為8.93 MBytes/s。再假設每臺服務器的吞吐量為600KBytes/s,這樣一個LVS主機可以帶動16臺服務器。
● Virtual Server via IP Tunneling
在VS/TUN的集群系統中,負載LVS主機只將請求分配到不同的實際服務器,實際服務器將應答的資料直接返回給用戶。這樣,負載LVS主機就可以處理巨量的請求,而不會成為系統的瓶頸。即使負載LVS主機只有100Mbps的全雙工網卡,虛擬服務器的最大吞吐量可以達到幾Gbps。所以,VS/TUN可以極大地增加負載LVS主機分配的服務器數量,它可以用來構建高性能超級服務器。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隧道的開銷,但是要求負載LVS主機與實際服務器都有一塊網卡連在同一物理網段上,服務器網絡設備或者設備別名不作ARP 響應。
四種分配方法(Load-balancing Methods)
不同的分配方法建構LVS主機成四種不同的排程
負載平衡排程是以連接為單位的。在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為最小者的服務器為下一個分配到服務的服務器。
四種分配方法(Load-balancing Methods)
表示如下
名稱 描述
Round robin (RRS)
將工作平均的分配到服務器 (用于實際服務主機性能一致)
Least-connections (LCS)
向較少連接的服務器分配較多的工作(IPVS 表存儲了所有的活動的連接。用于實際服務主機性能一致。)
Weighted round robin (WRRS)
向較大容量的服務器分配較多的工作??梢愿鶕撦d信息動態的向上或向下調整。 (用于實際服務主機性能不一致時)
Weighted least-connections (WLC)
考慮它們的容量向較少連接的服務器分配較多的工作。容量通過用戶指定的砝碼來說明,可以根據裝載信息動態的向上或向下調整。(用于實際服務主機性能不一致時)