本章節講述linux下的開源負載均衡軟體LVS的安裝、配置和使用。LVS是一個中國人創建和開發的開放源碼專案,利用LVS可以構建高可用、高可靠的負載均衡集群,因此,利用Linux+LVS不但可以假設高性能的負載均衡系統,同時也為企業和個人節省了成本。商業的負載等化器價格昂貴,而且技術開放程度很低,如果你正在為企業應用的性能問題而煩惱,不妨試試LVS這個開源的負載均衡軟體。
20.1 LVS簡介
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體專案,現在已經是 Linux標準內核的一部分。在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支援LVS功能模組,但是從Linux2.4內核以後,已經完全內置了LVS的各個功能模組,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。
使用LVS技術要達到的目標是:通過LVS提供的負載均衡技術和Linux作業系統實現一個高性能、高可用的伺服器叢集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。
LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS框架實現高可伸縮的、高可用的網路服務有WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音訊點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:linux的門戶網站(www.linux.com)、向RealPlayer提供音訊視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。
20.2 LVS體系結構
使用LVS架設的伺服器集群系統有三個部分組成,最前端的負載均衡層,用Load Balancer表示,中間的伺服器群組層,用Server Array表示,最底端的資料共用存儲層,用Shared
Storage表示,在用戶看來,所有的內部應用都是透明的,用戶只是在使用一個虛擬伺服器提供的高性能服務。
LVS體系結構如圖20.1所示:
圖20.1 LVS的體系結構
l Load Balancer層:位於整個集群系統的最前端,有一台或者多台負載調度器(Director Server)組成,LVS模組就安裝在Director Server上,而Director的主要作用類似于一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把用戶的請求分發給Server Array層的應用伺服器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模組Ldirectord,此模組用於監測各Real Server的健康狀況。在Real Server不可用時把它從LVS路由表中剔除,恢復時重新加入。
l Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB伺服器、MAIL伺服器、FTP伺服器、DNS伺服器、視訊伺服器中的一個或者多個,每個Real Server之間通過高速的LAN或分佈在各地的WAN相連接。在實際的應用中,Director Server也可以同時兼任Real Server的角色。
l Shared Storage層:是為所有Real Server提供共用存儲空間和內容一致性的存儲區域,在物理上,一般有磁碟陣列設備組成,為了提供內容的一致性,一般可以通過NFS網路檔案系統共用資料,但是NFS在繁忙的業務系統中,性能並不是很好,此時可以採用集群檔案系統,例如Redhat的GFS檔案系統,oracle提供的OCFS2檔案系統等。
從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的作業系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就可以支援LVS功能,而FreeBSD作為Director Server的應用還不是很多,性能也不是很好。
對於Real Server,幾乎可以是所有的系統平臺,Linux、windows、Solaris、AIX、BSD系列都能很好的支援。
20.3 LVS集群的特點
20.3.1 IP負載均衡與負載調度演算法
1.IP負載均衡技術
負載均衡技術有很多實現方案,有基於DNS功能變數名稱輪流解析的方法、有基於用戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP位址的調度方法,在這些負載調度演算法中,執行效率最高的是IP負載均衡技術。
LVS的IP負載均衡技術是通過IPVS模組來實現的,IPVS是LVS集群系統的核心軟體,它的主要作用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP位址,用戶必須通過這個虛擬的IP位址訪問服務。訪問的請求首先到達負載調度器,然後由負載調度器從Real Server清單中選取一個服務節點回應使用者的請求。
當使用者的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回資料給使用者,是IPVS實現的重點技術,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述如下:
l VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網路位址翻譯技術實現虛擬伺服器,當用戶請求到達調度器時,調度器將請求報文的目標位址(即虛擬IP位址)改寫成選定的Real Server位址,同時報文的目標埠也改成選定的Real Server的相應埠,最後將報文請求發送到選定的Real Server。在伺服器端得到資料後,Real Server返回資料給使用者時,需要再次經過負載調度器將報文的源位址和源埠改成虛擬IP位址和相應埠,然後把資料發送給使用者,完成整個負載調度過程。
可以看出,在NAT方式下,使用者請求和回應報文都必須經過Director Server位址重寫,當用戶請求越來越多時,調度器的處理能力將稱為瓶頸。
l VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬伺服器。它的連接調度和管理與VS/NAT方式一樣,只是它的報文轉發方法不同,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接回應用戶的請求,不再經過前端調度器,此外,對Real Server的地域位置沒有要求,可以和Director
Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理用戶的報文請求,集群系統的輸送量大大提高。
l VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬伺服器。它的連接調度和管理與VS/NAT和VS/TUN中的一樣,但它的報文轉發方法又有不同,VS/DR通過改寫請求報文的MAC位址,將請求發送到Real Server,而Real Server將回應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
2.負載調度演算法
上面我們談到,負載調度器是根據各個伺服器的負載情況,動態地選擇一台Real Server回應使用者請求,那麼動態選擇是如何實現呢,其實也就是我們這裡要說的負載調度演算法,根據不同的網路服務需求和伺服器配置,IPVS實現了如下八種負載調度演算法,這裡我們詳細講述最常用的四種調度演算法,剩餘的四種調度演算法請參考其其它資料。
l 輪叫調度(Round Robin)
“輪叫”調度也叫1:1調度,調度器通過“輪叫”調度演算法將外部使用者請求按順序1:1的分配到集群中的每個Real Server上,這種演算法平等地對待每一台Real Server,而不管伺服器上實際的負載狀況和連接狀態。
l 加權輪叫調度(Weighted Round Robin)
“加權輪叫”調度演算法是根據Real Server的不同處理能力來調度訪問請求。可以對每台Real Server設置不同的調度權值,對於性能相對較好的Real Server可以設置較高的權值,而對於處理能力較弱的Real Server,可以設置較低的權值,這樣保證了處理能力強的伺服器處理更多的訪問流量。充分合理的利用了伺服器資源。同時,調度器還可以自動問詢Real Server的負載情況,並動態地調整其權值。
l 最少連結調度(Least Connections)
“最少連接”調度演算法動態地將網路請求調度到已建立的連結數最少的伺服器上。如果集群系統的真實服務器具有相近的系統性能,採用“最小連接”調度演算法可以較好地均衡負載。
l 加權最少連結調度(Weighted Least Connections)
“加權最少連結調度”是“最少連接調度“的超集合,每個服務節點可以用相應的權值表示其處理能力,而系統管理員可以動態的設置相應的權值,缺省權值為1,加權最小連接調度在分配新連接請求時盡可能使服務節點的已建立連接數和其權值成正比。
其它四種調度演算法分別為:基於局部性的最少連結(Locality-Based Least Connections)、帶複製的基於局部性最少連結(Locality-Based
Least Connections with Replication)、目標位址散列(Destination Hashing)和源位址散列(Source Hashing)。
20.3.2 高可用性
LVS是一個基於內核級別的應用軟體,因此具有很高的處理性能,用LVS構架的負載均衡集群系統具有優秀的處理能力,每個服務節點的故障不會影響整個系統的正常使用,同時又實現負載的合理均衡,使應用具有超高負荷的服務能力,可支援上百萬個併發連接請求。如配置百兆網卡,採用VS/TUN或VS/DR調度技術,整個集群系統的輸送量可高達1Gbits/s;如配置千兆網卡,則系統的最大輸送量可接近10Gbits/s。
20.3.3 高可靠性
LVS負載均衡集群軟體已經在企業、學校等行業得到了很好的普及應用,國內外很多大型的、關鍵性的web網站也都採用了LVS集群軟體,所以它的可靠性在實踐中得到了很好的證實。有很多負載調度器運行一年多,未作一次重新啟動。這些都說明瞭LVS的高穩定性和高可靠性。
20.3.4 適用環境
LVS對前端Director Server目前僅支援linux和freebsd系統,但是支援大多數的TCP和UDP協定,支援TCP協定的應用有:HTTP,HTTPS ,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。支援UDP協定的應用有:DNS,NTP,ICP,視頻、音訊流播放協定等。
LVS對Real Server的作業系統沒有任何限制,Real Server可運行在任何支援TCP/IP的作業系統上,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。
20.3.5 開源軟體
LVS集群軟體是按GPL(GNU Public License)許可證發行的自由軟體,因此,使用者可以得到軟體的原始程式碼,並且可以根據自己的需要進行各種修改,但是修改必須是以GPL方式發行。
20.4 LVS的安裝與配置
20.4.1 安裝
1.安裝前準備工作
作業系統:統一採用Centos4.4版本。
地址規劃:
伺服器名
|
IP地址
|
閘道
|
虛擬裝置名
|
虛擬IP
|
Director Server
|
192.168.60.56
|
192.168.60.1
|
eth0:0
|
192.168.60.200
|
Real Server 1
|
192.168.60.132
|
192.168.60.1
|
lo:0
|
192.168.60.200
|
Real Server 2
|
192.168.60.144
|
192.168.60.1
|
lo:0
|
192.168.60.200
|
更詳細的資訊如圖20.2所示:
圖20.2 LVS安裝部署結構圖
2.安裝作業系統
Centos4.4版本的linux,內核默認支援LVS功能,為了方便編譯安裝IPVS管理軟體,在安裝作業系統時,建議選擇如下這些安裝包:
l 桌面環境:xwindows system、GNOME desktop environment。
l 開發工具:development tools、x software development、gnome software development、kde software development。
系統安裝完畢,可以通過如下命令檢查kernel是否已經支援LVS的ipvs模組:
[root@localhost ~]#modprobe -l |grep ipvs
/lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_sh.ko
如果有類似上面的輸出,表明系統內核已經預設支援了IPVS模組。接著就可以安裝IPVS管理軟體了。
3.在Director Serve上安裝IPVS管理軟體
IPVS提供的套裝軟體有源碼方式的也有rpm方式的,這裡介紹下源碼方式安裝IPVS,首先從http://www.linuxvirtualserver.org/software/ipvs.html下載對應版本的ipvs源碼,由於我們這裡採用的作業系統為Centos4.4版本,因此,下載對應的ipvsadm-1.24版本,接著進行安裝:
[root@localhost ~]#tar zxvf ipvsadm-1.24.tar.gz
[root@localhost ~]#cd ipvsadm-1.24
[root@localhost ~]#make
[root@localhost ~]#make install
注意:在make時可能會出現錯誤編譯資訊,這是由於編譯器找不到對應內核的原因,按照如下操作就可以正常編譯:
[root@localhost ~]#ln -s /usr/src/kernels/2.6.9-42.EL-i686/
/usr/src/linux
也可以通過rpm包方式進行安裝,
[root@localhost ~]#rpm –ivh ipvsadm-1.24-6.1.i386.rpm
然後執行:
[root@localhost ~]# ipvsadm --help
如果看到幫助提示,表明IPVS已經成功安裝。
4.ipvsadm的用法
ipvsadm 的用法和格式如下:
ipvsadm -A|E -t|u|f virutal-service-address:port [-s
scheduler] [-p
[timeout]] [-M netmask]
ipvsadm -D -t|u|f virtual-service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f virtual-service-address:port -r
real-server-address:port
[-g|i|m] [-w weight]
ipvsadm -d -t|u|f virtual-service-address -r
real-server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f virtual-service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm –h
其中:
l virtual-service-address:是指虛擬伺服器的ip 位址.本文是192.168.60.200
l real-service-address:是指Real Server的ip 地址,本文是192.168.60.132/144
l scheduler:指定調度演算法。
ipvsadm命令選項詳細含義如下:
命令選項
|
含義
|
-A --add-service
|
在內核的虛擬伺服器列表中添加一條新的虛擬IP記錄。也就是增加一台新的虛擬伺服器。虛擬IP也就是虛擬伺服器的IP位址。
|
-E --edit-service
|
編輯內核虛擬伺服器列表中的一條虛擬伺服器記錄
|
-D --delete-service
|
刪除內核虛擬伺服器列表中的一條虛擬伺服器記錄
|
-C --clear
|
清除內核虛擬伺服器清單中的所有記錄
|
-R --restore
|
恢復虛擬伺服器規則
|
-S --save
|
保存虛擬伺服器規則,輸出為-R 選項可讀的格式
|
-a --add-server
|
在內核虛擬伺服器清單的一條記錄裡添加一條新的Real Server記錄。也就是在一個虛擬伺服器中增加一台新的Real Server
|
-e --edit-server
|
編輯一條虛擬伺服器記錄中的某條Real Server記錄
|
-d --delete-server
|
刪除一條虛擬伺服器記錄中的某條Real Server記錄
|
-L|-l --list
|
顯示內核中虛擬伺服器列表
|
-Z --zero
|
虛擬伺服器列表計數器清零(清空當前的連接數量等)
|
--set tcp tcpfin udp
|
設置連接逾時值
|
-t
|
說明虛擬伺服器提供的是tcp 的服務,此選項後面跟如下格式:
[virtual-service-address:port]
or [real-server-ip:port]
|
-u
|
說明虛擬伺服器提供的是udp 的服務,此選項後面跟如下格式:
[virtual-service-address:port]
or [real-server-ip:port]
|
-f fwmark
|
說明是經過iptables 標記過的服務類型
|
-s scheduler
|
使用的調度演算法。
有這樣幾個選項 rr|wrr|lc|wlc|lblc|lblcr|dh|sh
預設的調度演算法是: wlc
|
-p [timeout]
|
在某個Real Server上持續的服務時間。也就是說來自同一個用戶的多次請求,將被同一個Real Server處理。此參數一般用於有動態請求的操作中,timeout 的預設值為300 秒。
|
-r
|
指定Real Server的IP位址,此選項後面跟如下格式:
[real-server-ip:port]
|
-g --gatewaying
|
指定LVS 的工作模式為直接路由模式(此模式是LVS 預設工作模式)
|
-i --ipip
|
指定LVS 的工作模式為隧道模式
|
-m --masquerading
|
指定LVS 的工作模式為NAT 模式
|
-w --weight weight
|
指定Real Server的權值
|
-c --connection
|
顯示LVS 目前的連接 如:ipvsadm -L -c
|
-L --timeout
|
顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
|
-L --daemon
|
顯示同步守護進程狀態
|
-L --stats
|
顯示統計資訊
|
-L --rate
|
顯示速率資訊
|
-L --sort
|
對虛擬伺服器和真實伺服器排序輸出
|
20.4.2 LVS的配置
LVS集群有DR、TUN、NAT三種配置模式,可以對www服務、FTP服務、MAIL服務等做負載均衡,下麵通過搭建www服務的負載均衡實例,講述基於DR模式的LVS集群配置。
1. Director Server的配置
在Director Server上配置LVS負載均衡集群,有兩種方法:
沒有留言:
張貼留言