一、LVS項目簡介
LVS--Linux Virtual Server(Linux虛拟伺服器)。針對高可伸縮、高可用網絡服務的需求,LVS采用了基于IP層和基于内容請求分發的負載平衡排程解決方法,并在Linux核心中實作了這些方法,将一組伺服器構成一個實作可伸縮的、高可用網絡服務的虛拟伺服器。
一組伺服器通過高速的區域網路或者地理分布的廣域網互相連接配接,在它們的前端有一個負載排程器。負載排程器能無縫地将網絡請求排程到真實伺服器上,進而使得伺服器叢集的結構對客戶是透明的,客戶通路叢集系統提供的網絡服務就像訪 問一台高性能、高可用的伺服器一樣。客戶程式不受伺服器叢集的影響不需作任何修改。系統的伸縮性通過在服務機群中透明地加入和删除一個節點來達到,通過檢 測節點或服務程序故障和正确地重置系統達到高可用性。
二、IP虛拟伺服器軟體IPVS
在排程器的實作技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡位址轉換(Network Address Translation)将一組伺服器構成一個高性能的、高可用的虛拟伺服器,稱之為VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡排程器産品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,LVS提供通過IP隧道實作虛拟伺服器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實作虛拟伺服器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。是以,IPVS軟體實作了這三種IP負載均衡技術,它們的大緻原理如下:
1、Virtual Server via Network Address Translation(VS/NAT)
通過網絡位址轉換,排程器重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真實伺服器;真實伺服器的響應封包通過排程器時,封包的源位址被重寫,再傳回給客戶,完成整個負載排程過程。
2、Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術時,由于請求和響應封包都必須經過排程器位址重寫,當客戶請求越來越多時,排程器的處理能力将成為瓶頸。為了解決這個問題,排程器把請求封包通過IP隧道轉發至真實伺服器,而真實伺服器将響應直接傳回給客戶,是以排程器隻處理請求封包。由于一般網絡服務應答比請求封包大許多,采用 VS/TUN技術後,叢集系統的最大吞吐量可以提高10倍。
3、Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請求封包的MAC位址,将請求發送到真實伺服器,而真實伺服器将響應直接傳回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協定的要求,在三種方法中效率最高,但是要求排程器與真實伺服器都有一塊網卡連在同一實體網段上。
針對不同的網絡服務需求和伺服器配置,IPVS排程器實作了如下八種負載排程算法:
1、輪叫(Round Robin):排程器通過"輪叫"排程算法将外部請求按順序輪流配置設定到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連接配接數和系統負載。
2、權重輪叫(Weighted Round Robin):排程器通過"權重輪叫"排程算法根據真實伺服器的不同處理能力來排程通路請求。這樣可以保證處理能力強的伺服器處理更多的通路流量。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。
3、最少連結(Least Connections):排程器通過"最少連接配接"排程算法動态地将網絡請求排程到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統性能,采用"最小連接配接"排程算法可以較好地均衡負載。
4、權重最少連結(Weighted Least Connections):在叢集系統中的伺服器性能差異較大的情況下,排程器采用"權重最少連結"排程算法優化負載均衡性能,具有較高權值的伺服器将承受較大比例的活動連接配接負載。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。
5、基于局部性的最少連結(Locality-Based Least Connections):"基于局部性的最少連結" 排程算法是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。該算法根據請求的目标IP位址找出該目标IP位址最近使用的伺服器,若該伺服器 是可用的且沒有超載,将請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處于一半的工作負載,則用"最少連結"的原則選出一個可用的服務 器,将請求發送到該伺服器。
6、帶複制的基于局部性最少連結(Locality-Based Least Connections with Replication):"帶複制的基于局部性最少連結"排程算法也是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。它與LBLC算法的不同之處是它要維護從一個 目标IP位址到一組伺服器的映射,而LBLC算法維護從一個目标IP位址到一台伺服器的映射。該算法根據請求的目标IP位址找出該目标IP位址對應的服務 器組,按"最小連接配接"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,将請求發送到該伺服器,若伺服器超載;則按"最小連接配接"原則從這個叢集中選出一 台伺服器,将該伺服器加入到伺服器組中,将請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,将最忙的伺服器從伺服器組中删除,以降低複制的 程度。
7、目标位址散列(Destination Hashing):"目标位址散列"排程算法根據請求的目标IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。
8、源位址散列(Source Hashing):"源位址散列"排程算法根據請求的源IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。
更多内容參考LVS中文站點:http://zh.linuxvirtualserver.org/
三、伺服器設定及IP配置設定,本環境基于VMware安裝四台CentOS5.4伺服器(真實伺服器配置類同),伺服器配置設定如下:
Virtual IP:192.168.195.10 -- 虛拟伺服器IP,使用者通過該IP入口
Load Balancer(Active Router):192.168.195.3 -- 真實伺服器IP
Backup Router:192.168.195.4 -- 備份伺服器IP
Real Server 1:192.168.195.5 -- WEB伺服器IP
Real Server 2:192.168.192.6 -- WEB伺服器IP
拓撲圖如下(Keepalived、FastDFS将在後文描述):

四、基于DR模式LVS叢集安裝配置
1、根據Linux核心版本下載下傳相應IPVS軟體,下載下傳位址:http://www.linuxvirtualserver.org/software/index.html,(注意版本對應),Eg:ipvsadm-1.24.tar.gz,安裝過程如下:
#tar -zvxf ipvsadm-1.24.tar.gz
#cd ipvsadm-1.24
#ln -s /usr/src/kernels/2.6.18-164.el5-i686/ /usr/src/linux
#make && make install
2、編寫shell腳本管理LVS的運作,在Load Balancer伺服器(192.168.195.3)建立“lvsDR”shell檔案,代碼如下:
01 #!/bin/sh
02
03 VIP = 192.168.195.10 #Virtual IP
04
05 RIP1 = 192.168.195.5 #Real Server IP
06
07 RIP2 = 192.168.195.6 #Real Server IP
08
09 /etc/rc.d/init.d/functions
10
11 case "$1" in
12
13 start)
14
15 echo "start LVS of DR"
16
17 /sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up #注意子網路遮罩
18
19 /sbin/route add -host $VIP dev eth0:1
20
21 /sbin/ipvsadm -C
22
23 /sbin/ipvsadm -A -t $VIP :80 -s rr
24
25 /sbin/ipvsadm -a -t $VIP :80 -r $RIP1 :80 -g
26
27 /sbin/ipvsadm -a -t $VIP :80 -r $RIP2 :80 -g
28
29 /sbin/ipvsadm
30
31 ;;
32
33 stop)
34
35 echo "close LVS of DR"
36
37 /sbin/ifconfig eth0:1 down
38
39 /sbin/ipvsadm -C
40
41 ;;
42
43 *)
44
45 echo "Usage:$0{start|stop}"
46
47 exit 1
48
49 esac
3、編寫兩個Real Server(192.168.195.5、192.168.195.6)運作的shell腳本“RS”shell檔案,代碼如下:
01 #!/bin/sh
02 VIP = 192.168.195.10 #Virtual Server IP
03 /etc/rc.d/init.d/functions
04 case "$1" in
05 start)
06 echo "Start LVS of RS"
07 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up #注意子網路遮罩
08 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 -arp
09 /sbin/route add -host $VIP dev lo:0
10 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
11 echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
12 echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
13 echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
14 sysctl -p
15 ;;
16 stop)
17 /sbin/ifconfig lo:0 down
18 echo "Close LVS of RS"
19 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
20 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
21 echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
22 echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
23 sysctl -p
24 ;;
25 *)
26 echo "Usage:$0{start|stop}"
27 exit 1
28 esac
4、LVS運作及監控
a) Real Server伺服器運作指令:#./RS start,(停止指令:#./RS stop),記得運作WEB伺服器;
b) Load Balancer伺服器運作指令:#./lvsDR start,(停止指令:#./lvsDR stop);
c) 檢視LVS狀态:#ipvsadm;
d) 在浏覽器輸入http://192.168.195.10即可。
參考文檔:
LVS項目介紹:http://www.linuxvirtualserver.org/zh/lvs1.html
VMWare虛拟機環境下的Linux伺服器叢集 - 使用LVS+Heartbeat+Ldirectord:http://hi.baidu.com/litaosmile/blog/item/3a8410dcb7f260a6cc1166d0.html
VMware5環境下叢集LVS實戰解析:http://server.csdn.net/n/20090826/4249.html
如需轉載,請注明:本文來自感染源部落格[ http://blog.csdn.net/caleng ]