Linux負載均衡軟件LVS的簡單示例
本文一個簡單的示例演示LVS的配置(DR模式)和測試。
使用的配置環境如下:
Director server: 192.168.8.4
Real server1: 192.18.8.5
Real server2: 192.168.8.6
VIP: 192.168.8.200
網絡topology圖如下:
圖2中的VIP指的是虛擬IP地址,還可以叫做LVS集群的服務IP,在DR、TUN模式中,
數據包是直接返回給用戶的,所以,在Director Server上以及集群的每個節點上都需要設置這個地址。
此IP在Real Server上一般綁定在回環地址上,例如lo:0。
在Director Server上,虛擬IP綁定在真實的網絡接口設備上,例如eth0:0。
Linux2.6內核默認支持LVS功能,系統安裝完畢,可以通過如下命令檢查kernel是否已經支持LVS的ipvs模塊:
[root@localhost ~]#modprobe -l |grep ipvs
/lib/modules/2.6.18-53.el5/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.18-53.el5/kernel/net/ipv4/ipvs/ip_vs_rr.ko
如果有類似上面的輸出,表明系統內核已經默認支持了IPVS模塊。接著就可以安裝IPVS管理軟件了。
一 在Director Serve上安裝IPVS管理軟件
下載對應的ipvsadm-1.24版本,接著進行安裝:
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24
make
make install
注意:在make時可能會出現錯誤編譯信息,這是由于編譯程序找不到對應內核的原因,
按照如下操作就可以正常編譯:
[root@localhost ~]#ln -s /usr/src/kernels/2.6.18-53.el5-i686/ /usr/src/linux
安裝完成后,通過ipvsadm命令行進行配置
首先在Director Server上綁定一個虛擬IP,此IP用于對外提供服務,執行如下命令:
ifconfig eth0:0 192.168.8.200 broadcast 192.168.8.200 netmask 255.255.255.255 up
這樣在eth0設備上綁定了一個虛擬設備eth0:0,同時設置了一個虛擬IP是192.168.8.200,
也就是上面我們規劃的IP地址,然后指定廣播地址也為192.168.8.200,需要特別注意的是,
這里的子網掩碼為255.255.255.255。
然后給設備eth0:0指定一條路由,執行如下指令:
route add -host 192.168.8.200 dev eth0:0
接著啟用系統的包轉發功能,從而使系統充當路由器,執行如下指令:
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
指令中,參數值為1時啟用ip轉發,為0時禁止ip轉發。其實在DR模式中,開啟系統的包轉發功能不是必須的,
而在NAT模式下此操作是必須的。
然后開始配置ipvs,執行如下操作:
ipvsadm -C
ipvsadm -A -t 192.168.8.200:8080 -s rr
ipvsadm -a -t 192.168.8.200:8080 -r 192.168.8.5:8080 -g
ipvsadm -a -t 192.168.8.200:8080 -r 192.168.8.6:8080 -g
上面操作中,第一行是清除內核虛擬服務器列表中的所有記錄,
第二行是添加一條新的虛擬IP記錄,同時指定策略為輪詢。
第三、四行是在新加虛擬IP記錄中添加兩條新的Real Server記錄,并且指定LVS的工作模式為直接路由模式。
-g代表gateway,意思為直接路由,還可以有-i(internet)隧道模型,-m(masq)偽裝,NAT模式
二、Real server 的配置
在lvs的DR和TUN模式下,用戶的訪問請求到達真實服務器后,是直接返回給用戶的,
而不再經過前端的Director Server,因此,就需要在每個Real server節點上增加虛擬的VIP地址,
這樣數據才能直接返回給用戶,增加VIP地址的操作可以通過下面的命令來實現:
ifconfig lo:0 192.168.8.200 broadcast 192.168.8.200 netmask 255.255.255.255 up
子網掩碼255.255.255.255表示這個整個網段只有這一個地址
route add -host 192.168.8.200 dev lo:0
上面的命令表示網絡請求地址是192.168.8.200的請求,返回的時候的源地址是lo:0網卡上配置的地址,
這樣出去的ip包的src地址就是192.168.8.200
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
在回環設備上綁定了一個虛擬IP地址,并設定其子網掩碼為255.255.255.255,
與Director Server上的虛擬IP保持互通,然后禁止了本機的ARP請求。
由于虛擬ip,也就是上面的VIP地址,是Director Server和所有的Real server共享的,
如果有ARP請求VIP地址時,Director Server與所有Real server都做應答的話,就會出現問題,
因此,需要禁止Real server響應ARP請求。
三、在Real server上配置tomcat服務,略。
在192.18.8.5建一個html文件內容為:
this is the test page
from server 192.168.8.5
在192.18.8.6建一個html文件內容為:
this is the test page
from server 192.168.8.6
四 測試
客戶端通過VIP訪問,如下面的url
http://192.168.8.200:8080/test/test.html
可以發現返回的內容由192.168.8.5和192.168.8.6輪流提供。
來自:http://blog.csdn.net/kkdelta/article/details/39452019