lvs是在linux作業系統基礎上建立虛擬伺服器,實現服務節點之間的負載平衡。它是基於linux核心實現的。2.6.X核心預設整合了lvs模組。
lvs常用負載平衡的實現是基於ip協議的,所以一般稱為ipvs。ipvs有三種實現方式,最常用、效能最好的是Direct routing(簡稱DR)。
Ubuntu9.10已經用了2.6的核心,所以不需要再編譯核心了,為了檢測一下,可以在命令列執行:modprobe -l | grep ipvs
會出現:
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
說明核心已經整合了ipvs模組
我的機器三台機器分別是10.45.8.5,10.45.8.108,10.45.8.111。虛擬IP為10.45.8.200其中10.45.8.108作為負載平衡器使用,首先需要安裝ipvsadm。
執行:apt-get install ipvsadm
安裝完成後執行:ipvsadm
會看到提示:
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
說明已經安裝成功。
接下來就是配置lvs,其實很簡單,就是在負載平衡器建一個虛擬ip,然後用ipvsadm建立轉寄規則
配置虛擬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 (此指令暫沒發現有啥用處)
使用ipvsadm安裝LVS服務:
ipvsadm -A -t 10.45.8.200:http -s rr
增加真實伺服器:
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
真實伺服器的配置:
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 (此指令暫沒發現有啥用處)
echo "1">/proc/sys/net/ipv4/ip_forward (此指令暫沒發現有啥用處)
我自己還嘗試成功的指令:
LBServer:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
真實伺服器:
ifconfig eth0:0 10.45.8.200 netmask 255.255.252.0 broadcast 10.45.8.200
我只需要建立一個eth0:0就可以了。。。。。。與實際不同的在於子網路遮罩的第三段(255 vs 252)
在負載平衡伺服器用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系統指令有所區別,Ubuntu系統的指令為:
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
只需要在真實伺服器安裝個apache或者tomcat,把預設頁面修改一下方便區別是哪台伺服器即可。用瀏覽器先訪問真實伺服器的IP,如果瀏覽器正常顯示對應的預設頁面說明web服務正常。
這時就可以訪問虛擬IP(10.45.8.200)咯,然後不停地重新整理,會發現lvs已經成功的將請求轉寄了。當然,我發現IE在半分鐘內重新整理的話基本是仍然串連到之前的伺服器,建議是開幾個IE視窗,然後挨個重新整理就可以看到變化呢。
最後可以在負載平衡伺服器上用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
確實大功告成。不過如果機器重啟的話,這些配置就沒了,需要重新設定哦,另外還有個ipvsadm -C的指令是用於清除ipvsadm配置的,可能會有用處。