lvs是在linux操作系統(tǒng)基礎(chǔ)上建立虛擬服務(wù)器,實現(xiàn)服務(wù)節(jié)點之間的負載均衡。它是基于linux內(nèi)核實現(xiàn)的。2.6.X內(nèi)核默認集成了lvs模塊。
lvs常用負載均衡的實現(xiàn)是基于ip協(xié)議的,所以一般稱為ipvs。ipvs有三種實現(xiàn)方式,最常用、性能最好的是Direct routing(簡稱DR)。
Ubuntu9.10已經(jīng)用了2.6的內(nèi)核,所以不需要再編譯內(nèi)核了,為了檢測一下,可以在命令行執(zhí)行:modprobe -l | grep ipvs
會出現(xiàn):
kernel/net/netfilter/ipvs/ip_vs.ko
kernel/net/netfilter/ipvs/ip_vs_rr.ko
kernel/net/netfilter/ipvs/ip_vs_wrr.ko
kernel/net/netfilter/ipvs/ip_vs_lc.ko
kernel/net/netfilter/ipvs/ip_vs_wlc.ko
kernel/net/netfilter/ipvs/ip_vs_lblc.ko
kernel/net/netfilter/ipvs/ip_vs_lblcr.ko
kernel/net/netfilter/ipvs/ip_vs_dh.ko
kernel/net/netfilter/ipvs/ip_vs_sh.ko
kernel/net/netfilter/ipvs/ip_vs_sed.ko
kernel/net/netfilter/ipvs/ip_vs_nq.ko
kernel/net/netfilter/ipvs/ip_vs_ftp.ko
說明內(nèi)核已經(jīng)集成了ipvs模塊
我的機器三臺機器分別是10.45.8.5,10.45.8.108,10.45.8.111。虛擬IP為10.45.8.200其中10.45.8.108作為負載均衡器使用,首先需要安裝ipvsadm。
執(zhí)行:apt-get install ipvsadm
安裝完成后執(zhí)行:ipvsadm
會看到提示:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
說明已經(jīng)安裝成功。
接下來就是配置lvs,其實很簡單,就是在負載均衡器建一個虛擬ip,然后用ipvsadm建立轉(zhuǎn)發(fā)規(guī)則
配置虛擬IP:
ifconfig eth0:0 10.45.8.200 netmask 255.255.255.0 broadcast 10.45.8.200
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暫沒發(fā)現(xiàn)有啥用處)
使用ipvsadm安裝LVS服務(wù):
ipvsadm -A -t 10.45.8.200:http -s rr
增加真實服務(wù)器:
ipvsadm -a -t 10.45.8.200:http -r 10.45.8.111 -g -w 1
ipvsadm -a -t 10.45.8.200:http -r 10.45.8.5 -g -w 1
真實服務(wù)器的配置:
ifconfig lo:0 10.45.8.200 netmask 255.255.255.255 broadcast 10.45.8.200
route add -host 10.45.8.200 dev lo:0 (此指令暫沒發(fā)現(xiàn)有啥用處)
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暫沒發(fā)現(xiàn)有啥用處)
我自己還嘗試成功的指令:
LBServer:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
真實服務(wù)器:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
我只需要建立一個eth0:0就可以了。。。。。。與實際不同的在于子網(wǎng)掩碼的第三段(255 vs 252)
在負載均衡服務(wù)器用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP test1-1149.local:www rr
-> test3-63.local:www Route 1 0 0
-> test2-64.local:www Route 1 0 0
接著是做ARP Hidden,不同的linux系統(tǒng)指令有所區(qū)別,Ubuntu系統(tǒng)的指令為:
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
只需要在真實服務(wù)器安裝個apache或者tomcat,把默認頁面修改一下方便區(qū)別是哪臺服務(wù)器即可。用瀏覽器先訪問真實服務(wù)器的IP,如果瀏覽器正常顯示對應(yīng)的默認頁面說明web服務(wù)正常。
這時就可以訪問虛擬IP(10.45.8.200)咯,然后不停地刷新,會發(fā)現(xiàn)lvs已經(jīng)成功的將請求轉(zhuǎn)發(fā)了。當(dāng)然,我發(fā)現(xiàn)IE在半分鐘內(nèi)刷新的話基本是仍然連接到之前的服務(wù)器,建議是開幾個IE窗口,然后挨個刷新就可以看到變化呢。
最后可以在負載均衡服務(wù)器上用ipvsadm --list查看:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP test1-1149.local:www rr
-> test3-86.local:www Route 1 0 5
-> test2-87.local:www Route 1 1 4
確實大功告成。不過如果機器重啟的話,這些配置就沒了,需要重新設(shè)置哦,另外還有個ipvsadm -C的指令是用于清除ipvsadm配置的,可能會有用處。
NOTE:
需要sudo 權(quán)限,否則會出現(xiàn):
Can't initialize ipvs: No space left on device
Are you sure that IP Virtual Server is built in the kernel or as module?
這個問題查了好久的哈!沒想到是權(quán)限 的問題
聯(lián)系客服