lvs說(shuō)明:目前有三種IP負(fù)載均衡技術(shù)(VS/NAT、VS/TUN和VS/DR);
八種調(diào)度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
在調(diào)度器的實(shí)現(xiàn)技術(shù)中,IP負(fù)載均衡技術(shù)是效率最高的。在已有的IP負(fù)載均衡技術(shù)中有通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translation)將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器,我們稱之為VS/NAT技術(shù)(Virtual Server via Network Address Translation),大多數(shù)商品化的IP負(fù)載均衡調(diào)度器產(chǎn)品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點(diǎn)和網(wǎng)絡(luò)服務(wù)的非對(duì)稱性的基礎(chǔ)上,我們提出通過(guò)IP隧道實(shí)現(xiàn)虛擬服務(wù)器的方法VS/TUN (Virtual Server via IP Tunneling),和通過(guò)直接路由實(shí)現(xiàn)虛擬服務(wù)器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統(tǒng)的伸縮性。所以,IPVS軟件實(shí)現(xiàn)了這三種IP負(fù)載均衡技術(shù),它們的大致原理如下(我們將在其他章節(jié)對(duì)其工作原理進(jìn)行詳細(xì)描述),
Virtual Server via Network Address Translation(VS/NAT)
通過(guò)網(wǎng)絡(luò)地址轉(zhuǎn)換,調(diào)度器重寫請(qǐng)求報(bào)文的目標(biāo)地址,根據(jù)預(yù)設(shè)的調(diào)度算法,將請(qǐng)求分派給后端的真實(shí)服務(wù)器;真實(shí)服務(wù)器的響應(yīng)報(bào)文通過(guò)調(diào)度器時(shí),報(bào)文的源地址被重寫,再返回給客戶,完成整個(gè)負(fù)載調(diào)度過(guò)程。
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術(shù)時(shí),由于請(qǐng)求和響應(yīng)報(bào)文都必須經(jīng)過(guò)調(diào)度器地址重寫,當(dāng)客戶請(qǐng)求越來(lái)越多時(shí),調(diào)度器的處理能力將成為瓶頸。為了解決這個(gè)問(wèn)題,調(diào)度器把請(qǐng)求報(bào)文通過(guò)IP隧道轉(zhuǎn)發(fā)至真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶,所以調(diào)度器只處理請(qǐng)求報(bào)文。由于一般網(wǎng)絡(luò)服務(wù)應(yīng)答比請(qǐng)求報(bào)文大許多,采用 VS/TUN技術(shù)后,集群系統(tǒng)的最大吞吐量可以提高10倍。
Virtual Server via Direct Routing(VS/DR)
VS/DR通過(guò)改寫請(qǐng)求報(bào)文的MAC地址,將請(qǐng)求發(fā)送到真實(shí)服務(wù)器,而真實(shí)服務(wù)器將響應(yīng)直接返回給客戶。同VS/TUN技術(shù)一樣,VS/DR技術(shù)可極大地提高集群系統(tǒng)的伸縮性。這種方法沒(méi)有IP隧道的開(kāi)銷,對(duì)集群中的真實(shí)服務(wù)器也沒(méi)有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器與真實(shí)服務(wù)器都有一塊網(wǎng)卡連在同一物理網(wǎng)段上。
針對(duì)不同的網(wǎng)絡(luò)服務(wù)需求和服務(wù)器配置,IPVS調(diào)度器實(shí)現(xiàn)了如下八種負(fù)載調(diào)度算法:使用比較多的是以下四種:
輪叫(Round Robin)
調(diào)度器通過(guò)"輪叫"調(diào)度算法將外部請(qǐng)求按順序輪流分配到集群中的真實(shí)服務(wù)器上,它均等地對(duì)待每一臺(tái)服務(wù)器,而不管服務(wù)器上實(shí)際的連接數(shù)和系統(tǒng)負(fù)載。
加權(quán)輪叫(Weighted Round Robin)
調(diào)度器通過(guò)"加權(quán)輪叫"調(diào)度算法根據(jù)真實(shí)服務(wù)器的不同處理能力來(lái)調(diào)度訪問(wèn)請(qǐng)求。這樣可以保證處理能力強(qiáng)的服務(wù)器處理更多的訪問(wèn)流量。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
最少鏈接(Least Connections)
調(diào)度器通過(guò)"最少連接"調(diào)度算法動(dòng)態(tài)地將網(wǎng)絡(luò)請(qǐng)求調(diào)度到已建立的鏈接數(shù)最少的服務(wù)器上。如果集群系統(tǒng)的真實(shí)服務(wù)器具有相近的系統(tǒng)性能,采用"最小連接"調(diào)度算法可以較好地均衡負(fù)載。
加權(quán)最少鏈接(Weighted Least Connections)
在集群系統(tǒng)中的服務(wù)器性能差異較大的情況下,調(diào)度器采用"加權(quán)最少鏈接"調(diào)度算法優(yōu)化負(fù)載均衡性能,具有較高權(quán)值的服務(wù)器將承受較大比例的活動(dòng)連接負(fù)載。調(diào)度器可以自動(dòng)問(wèn)詢真實(shí)服務(wù)器的負(fù)載情況,并動(dòng)態(tài)地調(diào)整其權(quán)值。
1、拓?fù)涿枋觯?一定要理解這個(gè)拓?fù)潢P(guān)系)
負(fù)載服務(wù)器master真實(shí)IP 192.168.1.252
負(fù)載服務(wù)器backup真實(shí)IP 192.168.1.230
負(fù)載服務(wù)器虛擬IP 192.168.1.229
后端WEB服務(wù)器IP 192.168.1.220
后端WEB服務(wù)器IP 192.168.1.231
2、升級(jí)內(nèi)核
#yum install kernel
3、重啟服務(wù)器,使用新的內(nèi)核
4、刪除舊版、升級(jí)新版內(nèi)核
#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
6、安裝ipvsadm-1.24 //master和backup
# rpm -ivh ipvsadm-1.24-6.src.rpm
# cd /usr/src/redhat/SOURCES
# tar -zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm
# uname -r //查詢版本
2.6.18-53.el5xen
# ln -s /usr/src/kernels/2.6.18-53.el5xen-i686/ /usr/src/linux //假如這里的內(nèi)核版本不一樣的話,make的時(shí)候會(huì)出現(xiàn)錯(cuò)誤。
# make;make install
7,安裝keepalived.
在負(fù)載均衡服務(wù)器上執(zhí)行 master和backup
1、解壓
#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
8、開(kāi)啟負(fù)載服務(wù)器路由機(jī)制 //master和backup
# vi /sbin/sysctl.conf 保證有如下內(nèi)容
net.ipv4.ip_forward = 1
執(zhí)行
# sysctl -p
9、建立負(fù)載服務(wù)器啟動(dòng)腳本 //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 "Usage0{start|stop}"
exit 1
esac
10、分配權(quán)限
#chmod 755 /sbin/lvsdr.sh
11、執(zhí)行測(cè)試
# /sbin/lvsdr.sh start
查看ifconfig是否有ifcfg-eth0:1 (有就對(duì)了)
查看route -n 路由表是否多了eth0:1路由(有就對(duì)了)
# /sbin/lvsdr.sh stop
查看ifconfig是否有ifcfg-eth0:1 (無(wú)就對(duì)了)
查看route -n 路由表是否多了eth0:1路由(無(wú)就對(duì)了)
# /sbin/lvsdr.sh adsa
是否提示參數(shù)錯(cuò)誤,只能使用{start|stop}。
12、配置后端WEB服務(wù)器
在192.168.1.231和192.168.1.220上分別建立如下腳本。
# vi /sbin/realdr.sh
#!/bin/bash
VIP=192.168.1.229
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/default/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
13、配置權(quán)限
# chmod 755 /sbin/realdr.sh
14、在兩臺(tái)web服務(wù)器上分別執(zhí)行其指命。
/sbin/realdr.sh start
15.配置keepalived.conf配置文件 //master和backup
#vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
dalianlxw@139.com }
notification_email_from
xwluan@tsong.cn smtp_server 222.73.214.147
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER //備份服務(wù)器設(shè)置為backup
interface eth0
virtual_router_id 51
priority 100 ////備份服務(wù)器設(shè)置小于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秒內(nèi)被分配到同一臺(tái)realserver
inhibit_on_failure //當(dāng)web掛掉的時(shí)候,前面請(qǐng)求的用戶,可以繼續(xù)打開(kāi)網(wǎng)頁(yè),但是后面的請(qǐng)求不會(huì)調(diào)度到掛掉的web上面。
protocol TCP //用TCP協(xié)議檢查realserver狀態(tài)
real_server 192.168.1.220 80 {
weight 3 //權(quán)重
TCP_CHECK {
connect_timeout 10 //10秒無(wú)響應(yīng)超時(shí)
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,啟動(dòng)keepalived
# /etc/rc.d/init.d/keepalived start
17:設(shè)置成自啟動(dòng)
#vi /etc/rc.local //里面添加
/etc/init.d/keepalived restart
/etc/lvsdr.sh start
測(cè)試算法:
我的測(cè)試環(huán)境中,算法使用的是wrr,和wlc這兩種。
權(quán)重問(wèn)題:當(dāng)lvs配置文件lvs-dr.sh改變權(quán)重以及keepalived配置文件keepalived.conf修改權(quán)重后,哪個(gè)文件重新啟動(dòng),哪個(gè)文件的權(quán)重生效。同時(shí)權(quán)重在master和backup上面可以設(shè)置不同。
當(dāng)算法是rr的時(shí)候,權(quán)重沒(méi)有作用,但是當(dāng)算法是wlc和wrr的時(shí)候,必須設(shè)置權(quán)重,可以根據(jù)服務(wù)器的性能和配置,來(lái)確定權(quán)重的大小,當(dāng)權(quán)重大的時(shí)候,lvs調(diào)度的服務(wù)也就多,同時(shí)權(quán)重高的服務(wù)器先收到鏈接。當(dāng)小的時(shí)候,lvs調(diào)度的比較少。當(dāng)權(quán)重為0的時(shí)候,表示服務(wù)器不可用,
測(cè)試lvs
1 當(dāng)我把master的lvs服務(wù)關(guān)掉的時(shí)候,會(huì)將用戶請(qǐng)求自動(dòng)切換到backup上面進(jìn)行工作。
2 當(dāng)我把web服務(wù)關(guān)掉的時(shí)候,lvs上面會(huì)顯示web消失,當(dāng)啟用后,web會(huì)自動(dòng)顯示
web關(guān)閉后:
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddressort Scheduler Flags
-> RemoteAddressort 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 LocalAddressort 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 當(dāng)master服務(wù)器down的時(shí)候,backup自動(dòng)會(huì)接替服務(wù),當(dāng)master起來(lái)的時(shí)候,backup會(huì)自動(dòng)斷掉。
本文出自 “warrior” 博客,請(qǐng)務(wù)必保留此出處http://jasonboy.blog.51cto.com/1632224/385777