Linux負載均衡軟件LVS

linux下的開源負載均衡軟件LVS的安裝、配置和使用。
LVS是一箇中國人建立和開發的開放源碼項目,利用LVS能夠構建高可用、高可靠的負載均衡集羣,
所以,利用Linux+LVS不但能夠假設高性能的負載均衡系統,同時也爲企業和我的節省了成本。
商業的負載均衡器價格昂貴,並且技術開放程度很低,若是你正在爲企業應用的性能問題而煩惱,不妨試試LVS這個開源的負載均衡軟件。

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)等。

LVS體系結構
使用LVS架設的服務器集羣系統有三個部分組成,最前端的負載均衡層,用Load Balancer表示,中間的服務器羣組層,
用Server Array表示,最底端的數據共享存儲層,用Shared Storage表示,
在用戶看來,全部的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。

Load Balancer層:位於整個集羣系統的最前端,有一臺或者多臺負載調度器(Director Server)組成,
LVS模塊就安裝在Director Server上,而Director的主要做用相似於一個路由器,
它含有完成LVS功能所設定的路由表,經過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。
同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各Real Server的健康情況。
在Real Server不可用時把它從LVS路由表中剔除,恢復時從新加入。

Server Array層:由一組實際運行應用服務的機器組成,
Real Server能夠是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,
每一個Real Server之間經過高速的LAN或分佈在各地的WAN相鏈接。
在實際的應用中,Director Server也能夠同時兼任Real Server的角色。

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系列都能很好的支持。

LVS集羣的特色
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,
詳述以下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,
調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改爲選定的Real Server的相應端口,
最後將報文請求發送到選定的Real Server。在服務器端獲得數據後,Real Server返回數據給用戶時,
須要再次通過負載調度器將報文的源地址和源端口改爲虛擬IP地址和相應端口,而後把數據發送給用戶,完成整個負載調度過程。
在NAT方式下,用戶請求和響應報文都必須通過Director Server地址重寫,當用戶請求愈來愈多時,調度器的處理能力將稱爲瓶頸。

VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬服務器。它的鏈接調度和管理與VS/NAT方式同樣,只是它的報文轉發方法不一樣,
VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,
而這個Real Server將直接響應用戶的請求,再也不通過前端調度器,此外,對Real Server的地域位置沒有要求,
能夠和Director Server位於同一個網段,也能夠是獨立的一個網絡。
所以,在TUN方式中,調度器將只處理用戶的報文請求,集羣系統的吞吐量大大提升。

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實現了以下八種負載調度算法,
這裏咱們詳細講述最經常使用的四種調度算法,剩餘的四種調度算法請參考其其它資料。

輪叫調度(Round Robin)
「輪叫」調度也叫1:1調度,調度器經過「輪叫」調度算法將外部用戶請求按順序1:1的分配到集羣中的每一個Real Server上,這種算法平等地對待每一臺Real Server,而無論服務器上實際的負載情況和鏈接狀態。

加權輪叫調度(Weighted Round Robin)
「加權輪叫」調度算法是根據Real Server的不一樣處理能力來調度訪問請求。能夠對每臺Real Server設置不一樣的調度權值,對於性能相對較好的Real Server能夠設置較高的權值,
而對於處理能力較弱的Real Server,能夠設置較低的權值,這樣保證了處理能力強的服務器處理更多的訪問流量。
充分合理的利用了服務器資源。同時,調度器還能夠自動問詢Real Server的負載狀況,並動態地調整其權值。

最少連接調度(Least Connections)
「最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。
若是集羣系統的真實服務器具備相近的系統性能,採用「最小鏈接」調度算法能夠較好地均衡負載。

加權最少連接調度(Weighted Least Connections)
「加權最少連接調度」是「最少鏈接調度「的超集,每一個服務節點能夠用相應的權值表示其處理能力,
而系統管理員能夠動態的設置相應的權值,缺省權值爲1,
加權最小鏈接調度在分配新鏈接請求時儘量使服務節點的已創建鏈接數和其權值成正比。

其它四種調度算法分別爲:
基於局部性的最少連接(Locality-Based Least Connections)、
帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)、
目標地址散列(Destination Hashing)和源地址散列(Source Hashing)。

高可用性
LVS是一個基於內核級別的應用軟件,所以具備很高的處理性能,用LVS構架的負載均衡集羣系統具備優秀的處理能力,
每一個服務節點的故障不會影響整個系統的正常使用,同時又實現負載的合理均衡,使應用具備超高負荷的服務能力,
可支持上百萬個併發鏈接請求。
如配置百兆網卡,採用VS/TUN或VS/DR調度技術,整個集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,
則系統的最大吞吐量可接近10Gbits/s。

高可靠性
LVS負載均衡集羣軟件已經在企業、學校等行業獲得了很好的普及應用,國內外不少大型的、關鍵性的web站點也都採用了LVS集羣軟件,
因此它的可靠性在實踐中獲得了很好的證明。
有不少負載調度器運行一年多,未做一次從新啓動。這些都說明了LVS的高穩定性和高可靠性。

適用環境
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等。

開源軟件
LVS集羣軟件是按GPL(GNU Public License)許可證發行的自由軟件,
所以,使用者能夠獲得軟件的源代碼,而且能夠根據本身的須要進行各類修改,可是修改必須是以GPL方式發行。

LVS的安裝與配置
安裝
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


2.安裝操做系統
Centos4.4版本的linux,內核默認支持LVS功能,爲了方便編譯安裝IPVS管理軟件,在安裝操做系統時,建議選擇以下這些安裝包:
桌面環境:xwindows system、GNOME desktop environment。
開發工具: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
其中:
virtual-service-address:是指虛擬服務器的ip 地址
real-service-address:是指Real Server的ip 地址

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

對虛擬服務器和真實服務器排序輸出

LVS的配置
LVS集羣有DR、TUN、NAT三種配置模式,能夠對www服務、FTP服務、MAIL服務等作負載均衡html

備註:隨筆中內容來源於網上資料整理,僅供參考。前端

相關文章
相關標籤/搜索