LVS的介紹與配置

對用硬件和軟件方法實現高可伸縮、高可用網絡服務的需求不斷增長,這種需求可以歸結以下幾點:

可伸縮性(Scalability),當服務的負載增長時,系統能被擴展來滿足需求,且不降低服務質量。

高可用性(Availability),儘管部分硬件和軟件會發生故障,整個系統的服務必須是每天24小時每星期7天可用的。

可管理性(Manageability),整個系統可能在物理上很大,但應該容易管理。

價格有效性(Cost-effectiveness),整個系統實現是經濟的、易支付的。

 

 LinuxVirtual Server

針對高可伸縮、高可用網絡服務的需求,我們給出了基於IP層和基於內容請求分發的負載平衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。

虛擬服務器的體系結構如圖2所示,一組服務器通過高速的局域網或者地理分佈的廣域網相互連接,在它們的前端有一個負載調度器(LoadBalancer)。負載調度器能無縫地將網絡請求調度到真實服務器上,從而使得服務器集羣的結構對客戶是透明的,客戶訪問集羣系統提供的網絡服務就像訪問一臺高性能、高可用的服務器一樣。客戶程序不受服務器集羣的影響不需作任何修改。系統的伸縮性通過在服務機羣中透明地加入和刪除一個節點來達到,通過檢 測節點或服務進程故障和正確地重置系統達到高可用性。由於我們的負載調度技術是在Linux內核中實現的,我們稱之爲Linux虛擬服務器LinuxVirtual Server)。

 
2:虛擬服務器的結構

LinuxVirtual Server項目的目標:使用集羣技術和Linux操作系統實現一個高性能、高可用的服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

3.1IP虛擬服務器軟件IPVS

在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡地址轉換(NetworkAddress Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,我們稱之爲VS/NAT技術(VirtualServer via Network Address Translation),大多數商品化的IP負載均衡調度器產品都是使用此方法,如CiscoLocalDirectorF5Big/IP和 AlteonACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,我們提出通過IP隧道實現虛擬服務器的方法VS/TUN VirtualServer via IP Tunneling),和通過直接路由實現虛擬服務器的方法VS/DRVirtualServer via Direct Routing),它們可以極大地提高系統的伸縮性。所以,IPVS軟件實現了這三種IP負載均衡技術,它們的大致原理如下(我們將在其他章節對其工作原 理進行詳細描述),

Virtual Server viaNetwork Address TranslationVS/NAT
通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

Virtual Server via IPTunnelingVS/TUN
採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量可以提高10倍。

Virtual Server viaDirect RoutingVS/DR
VS/DR
通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。

 

針對不同的網絡服務需求和服務器配置,IPVS調度器實現瞭如下八種負載調度算法:

輪叫(RoundRobin
調度器通過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而不管服務器上實際的連接數和系統負載。

加權輪叫(WeightedRound Robin
調度器通過"加權輪叫"調度算法根據真實服務器的不同處理能力來調度訪問請求。這樣可以保證處理能力強的服務器處理更多的訪問流量。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

最少鏈接(LeastConnections
調度器通過"最少連接"調度算法動態地將網絡請求調度到已建立的鏈接數最少的服務器上。如果集羣系統的真實服務器具有相近的系統性能,採用"最小連接"調度算法可以較好地均衡負載。

加權最少鏈接(WeightedLeast Connections
在集羣系統中的服務器性能差異較大的情況下,調度器採用"加權最少鏈接"調度算法優化負載均衡性能,具有較高權值的服務器將承受較大比例的活動連接負載。調度器可以自動問詢真實服務器的負載情況,並動態地調整其權值。

基於局部性的最少鏈接(Locality-BasedLeast Connections
"
基於局部性的最少鏈接調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工作負載,則用"最少鏈接"的原則選出一個可用的服務 器,將請求發送到該服務器。

帶複製的基於局部性最少鏈接(Locality-BasedLeast Connections with Replication
"
帶複製的基於局部性最少鏈接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不同之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小連接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小連接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低複製的程度。

目標地址散列(DestinationHashing
"
目標地址散列"調度算法根據請求的目標IP地址,作爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

源地址散列(SourceHashing
"
源地址散列"調度算法根據請求的源IP地址,作爲散列鍵(HashKey)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

 

 4. LVS集羣的特點

 

LVS集羣的特點可以歸結如下:

 

功能
有實現三種IP負載均衡技術和八種連接調度算法的IPVS軟件。在IPVS內部實現上,採用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相關的ICMP消息(有些商品化的系統反而不能)。虛擬服務的設置數目沒有限制,每個虛擬服務有自己的服務器集。它支持持久的虛擬服務(如HTTPCookieHTTPS等需要該功能的支持),並提供詳盡的統計數據,如連接的處理速率和報文的流量等。針對大規模拒絕服務(Denyof Service)攻擊,實現了三種防衛策略。
有基於內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。有相關的集羣管理軟件對資源進行監測,能及時將故障屏蔽,實現系統的高可用性。主、從調度器能週期性地進行狀態同步,從而實現更高的可用性。

 

適用性
後端服務器可運行任何支持TCP/IP的操作系統,包括Linux,各種Unix(如FreeBSDSunSolarisHPUnix等),Mac/OSWindowsNT/2000等。
負載調度器能夠支持絕大多數的TCPUDP協議:

 

協議

內 容

TCP

HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等

UDP

DNS,NTP,ICP,視頻、音頻流播放協議等

 

無需對客戶機和服務器作任何修改,可適用大多數Internet服務。

 

性能
LVS
服務器集羣系統具有良好的伸縮性,可支持幾百萬個併發連接。配置100M網卡,採用VS/TUNVS/DR調度技術,集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s

 

可靠性
LVS
服務器集羣軟件已經在很多大型的、關鍵性的站點得到很好的應用,所以它的可靠性在真實應用得到很好的證實。有很多調度器運行一年多,未作一次重啓動。

 

軟件許可證
LVS
集羣軟件是按GPLGNUPublic License)許可證發行的自由軟件,這意味着你可以得到軟件的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。

 

 LVS集羣的體系結構

 

 LVS集羣的通用體系結構


LVS
集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。

  
1LVS集羣的體系結構

爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。一般來說,LVS集羣採用三層結構,其體系結構如圖1所示,三層主要組成部分爲:

負載調度器(loadbalancer,它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(我們可稱之爲虛擬IP地址)上的。

 

服務器池(serverpool,是一組真正執行客戶請求的服務器,執行的服務有WEBMAILFTPDNS等。

 

共享存儲(sharedstorage,它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

 

調度器是服務器集羣系統的唯一入口點(SingleEntry Point),它可以採用IP負載均衡技術、基於內容請求分發技術或者兩者相結合。在IP負載均衡技術中,需要服務器池擁有相同的內容提供相同的服務。當客戶請求到達時,調度器只根據服務器負載情況和設定的調度算法從服務器池中選出一個服務器,將該請求轉發到選出的服務器,並記錄這個調度;當這個請求的其他報文到達,也會被轉發到前面選出的服務器。在基於內容請求分發技術中,服務器可以提供不同的服務,當客戶請求到達時,調度器可根據請求的內容選擇服務器 執行請求。因爲所有的操作都是在Linux操作系統核心空間中將完成的,它的調度開銷很小,所以它具有很高的吞吐率。

服務器池的結點數目是可變的。當整個系統收到的負載超過目前所有結點的處理能力時,可以在服務器池中增加服務器來滿足不斷增長的請求負載。對大多數網絡服務來說,請求間不存在很強的相關性,請求可以在不同的結點上並行執行,所以整個系統的性能基本上可以隨着服務器池的結點數目增加而線性增長。

共享存儲通常是數據庫、網絡文件系統或者分佈式文件系統。服務器結點需要動態更新的數據一般存儲在數據庫系統中,同時數據庫會保證併發訪問時數據的一致性。靜態的數據可以存儲在網絡文件系統(如NFS/CIFS)中,但網絡文件系統的伸縮能力有限,一般來說,NFS/CIFS服務器只能 支持3~6個繁忙的服務器結點。對於規模較大的集羣系統,可以考慮用分佈式文件系統,如AFS[1]GFS[2.3]Coda[4]和 Intermezzo[5]等。分佈式文件系統可爲各服務器提供共享的存儲區,它們訪問分佈式文件系統就像訪問本地文件系統一樣,同時分佈式文件系統可提供良好的伸縮性和可用性。此外,當不同服務器上的應用程序同時讀寫訪問分佈式文件系統上同一資源時,應用程序的訪問衝突需要消解才能使得資源處於一致狀態。這需要一個分佈式鎖管理器(DistributedLock Manager,它可能是分佈式文件系統內部提供的,也可能是外部的。開發者在寫應用程序時,可以使用分佈式鎖管理器來保證應用程序在不同結點上併發訪問的一致性。

負載調度器、服務器池和共享存儲系統通過高速網絡相連接,如100Mbps交換網絡、MyrinetGigabit網絡等。使用高速的網絡,主要爲避免當系統規模擴大時互聯網絡成爲整個系統的瓶頸。

Graphic Monitor是爲系統管理員提供整個集羣系統的監視器,它可以監視系統的狀態。GraphicMonitor是基於瀏覽器的,所以無論管理員在本地還是異地都可以監測系統的狀況。爲了安全的原因,瀏覽器要通過HTTPSSecureHTTP)協議和身份認證後,才能進行系統監測,並進行系統的配置和管理。

 





安裝:
根據內核版本(uname -r)安裝ipvsadm-1.26.tar.gz
http://www.linuxvirtualserver.org/software/ipvs.html#kernel-2.6
cd ipvsadm-1.26
make
make install
安裝完後驗證:
執行ipvsadm命令,出現
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
說明安裝成功。


配置:
Director server:

#!/bin/sh
# description: Start LVS of Director server
VIP=192.168.8.241
RIP1=192.168.8.136
RIP2=192.168.8.138
./etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of Director Server"
# set the Virtual IP Address and sysctl parameter
/sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/ip_forward
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t $VIP:49415 -s rr -p 600
/sbin/ipvsadm -a -t $VIP:49415 -r $RIP1:49415 -g
/sbin/ipvsadm -a -t $VIP:49415 -r $RIP2:49415 -g
#Run LVS
/sbin/ipvsadm
;;
stop)
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/ip_forward
/sbin/ipvsadm -C
/sbin/ifconfig eth0:0 down
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac



Real server:

#!/bin/bash
#description : Start Real Server 
VIP=192.168.8.241
./etc/rc.d/init.d/functions
case "$1" in
start)
echo " Start LVS of Real Server"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Director server"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac


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