lvs說明:目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);
八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
在調度器的實現技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有經過網絡地址轉換(Network Address Translation)將一組服務器構成一個高性能的、高可用的虛擬服務器,咱們稱之爲VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡調度器產品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,咱們提出經過IP隧道實現虛擬服務器的方法VS/TUN (Virtual Server via IP Tunneling),和經過直接路由實現虛擬服務器的方法VS/DR(Virtual Server via Direct Routing),它們能夠極大地提升系統的伸縮性。因此,IPVS軟件實現了這三種IP負載均衡技術,它們的大體原理以下(咱們將在其餘章節對其工做原理進行詳細描述),
Virtual Server via Network Address Translation(VS/NAT)
經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
Virtual Server via IP Tunneling(VS/TUN)
採用NAT技術時,因爲請求和響應報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文經過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。
Virtual Server via Direct Routing(VS/DR)
VS/DR經過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術同樣,VS/DR技術可極大地提升集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,可是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。
針對不一樣的網絡服務需求和服務器配置,IPVS調度器實現了以下八種負載調度算法:使用比較多的是如下四種:
輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
一、拓撲描述:(必定要理解這個拓撲關係)
負載服務器master真實IP 192.168.1.252
負載服務器backup真實IP 192.168.1.230
負載服務器虛擬IP 192.168.1.229
後端WEB服務器IP 192.168.1.220
後端WEB服務器IP 192.168.1.231
二、升級內核
#yum install kernel
三、重啓服務器,使用新的內核
四、刪除舊版、升級新版內核
#rpm -e kernel-2.6.18-53.el5
#rpm -e kernel-devel-2.6.18-53.el5
#rpm -e kernel-headers-2.6.18-53.el5 --nodeps
#yum install kernel-headers
#yum install kernel-devel
六、安裝ipvsadm-1.24 //master和backup
# uname -r //查詢版本
2.6.18-53.el5xen
# ln -s /usr/src/kernels/2.6.18-53.el5xen-i686/ /usr/src/linux //假如這裏的內核版本不同的話,make的時候會出現錯誤。
# rpm -ivh ipvsadm-1.24-6.src.rpm
# cd /usr/src/redhat/SOURCES
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm
# make;make install
7,安裝keepalived.
在負載均衡服務器上執行 master和backup
一、解壓
#tar -zxvf keepalived-1.1.15.tar.gz
#cd keepalived-1.1.15
#./configure --prefix=/usr/local/keepalived
#make;make install
#cp /usr/local/keepalived/sbin/rc.d/init.d/keepalived /sbin/rc.d/init.d/
#cp /usr/local/keepalived/sbin/sysconfig/keepalived /sbin/sysconfig/
#mkdir /sbin/keepalived
#cp /usr/local/keepalived/sbin/keepalived/keepalived.conf /sbin/keepalived/
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#service keepalived start|stop 作成系統服務啓動,方便管理
八、開啓負載服務器路由機制 //master和backup
# vi /sbin/sysctl.conf 保證有以下內容
net.ipv4.ip_forward = 1
執行
# sysctl -p
九、創建負載服務器啓動腳本 //master和backup
#vi /sbin/lvsdr.sh
#!/bin/bash
VIP=192.168.1.229
RIP1=192.168.1.220
RIP2=192.168.1.231
/sbin/rc.d/init.d/functions
case "$1" in
start)
echo "start LVS of DirectorServer"
#Set the Virtual IP Address
/sbin/ifconfig eth0:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev eth0:1
#Clear IPVS Table
/sbin/ipvsadm -C
#Set Lvs
/sbin/ipvsadm -A -t $VIP:80 -s wrr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
#Run Lvs
/sbin/ipvsadm
;;
stop)
echo "Close LVS Directorserver"
/sbin/ifconfig eth0:1 down
/sbin/ipvsadm -C
;;
*)
echo "Usage 0{start|stop}"
exit 1
esac
十、分配權限
#chmod 755 /sbin/lvsdr.sh
十一、執行測試
# /sbin/lvsdr.sh start
查看ifconfig是否有ifcfg-eth0:1 (有就對了)
查看route -n 路由表是否多了eth0:1路由(有就對了)
# /sbin/lvsdr.sh stop
查看ifconfig是否有ifcfg-eth0:1 (無就對了)
查看route -n 路由表是否多了eth0:1路由(無就對了)
# /sbin/lvsdr.sh adsa
是否提示參數錯誤,只能使用{start|stop}。
十二、配置後端WEB服務器
在192.168.1.231和192.168.1.220上分別創建以下腳本。
# vi /sbin/realdr.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
SNS_VIP=192.168.1.229
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
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 "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
1三、配置權限
# chmod 755 /sbin/realdr.sh
1四、在兩臺web服務器上分別執行其指命。
/sbin/realdr.sh start
15.配置keepalived.conf配置文件 //master和backup
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
smtp_server 222.73.214.147
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER //備份服務器設置爲backup
interface eth0
virtual_router_id 51
priority 100 ////備份服務器設置小於100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.229
}
}
virtual_server 192.168.1.229 80 {
delay_loop 6 //隔6秒查詢
lb_algo wrr //lvs算法
lb_kind DR //(Direct Route)
persistence_timeout 60 //同一IP的鏈接60秒內被分配到同一臺realserver
inhibit_on_failure //當web掛掉的時候,前面請求的用戶,能夠繼續打開網頁,可是後面的請求不會調度到掛掉的web上面。
protocol TCP //用TCP協議檢查realserver狀態
real_server 192.168.1.220 80 {
weight 3 //權重
TCP_CHECK {
connect_timeout 10 //10秒無響應超時
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.1.231 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
16,啓動keepalived
# /etc/rc.d/init.d/keepalived start
使用keepalived時不須要啓動 lvsdr.sh 腳本。
17:設置成自啓動
#vi /etc/rc.local //裏面添加
/etc/init.d/keepalived restart
/etc/lvsdr.sh start
測試算法:
個人測試環境中,算法使用的是wrr,和wlc這兩種。
權重問題:當lvs配置文件lvs-dr.sh改變權重以及keepalived配置文件keepalived.conf修改權重後,哪一個文件從新啓動,哪一個文件的權重生效。同時權重在master和backup上面能夠設置不一樣。
當算法是rr的時候,權重沒有做用,可是當算法是wlc和wrr的時候,必須設置權重,能夠根據服務器的性能和配置,來肯定權重的大小,當權重大的時候,lvs調度的服務也就多,同時權重高的服務器先收到連接。當小的時候,lvs調度的比較少。當權重爲0的時候,表示服務器不可用,
測試lvs
1 當我把master的lvs服務關掉的時候,會將用戶請求自動切換到backup上面進行工做。
2 當我把web服務關掉的時候,lvs上面會顯示web消失,當啓用後,web會自動顯示
web關閉後:
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress ort Scheduler Flags
-> RemoteAddress ort Forward Weight ActiveConn InActConn
TCP 192.168.1.229:80 wlc
-> 192.168.1.231:80 Route 10 0 0
[root@localhost ~]# ipvsadm -ln
web啓用後:
root@localhost ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress ort Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.229:80 wlc -> 192.168.1.231:80 Route 1 0 0 -> 192.168.1.220:80 Route 1 0 0 3 當master服務器down的時候,backup自動會接替服務,當master起來的時候,backup會自動斷掉。