LVS是Linux Virtual Server的簡寫,即Linux虛擬伺服器,是一個虛擬伺服器叢集系統。
在下面的案例中,我們用了3台主機,IP地址分別為:
192.168.1.100
192.168.1.101
192.168.1.102
其中,192.168.1.100將安裝LVS做為負載平衡器來分發請求,另外2台做為真實提供服務的主機,以DR模式進行部署。
首先,我們應先在192.168.1.101和192.168.1.102上部署好Apache或是Nginx,還有PHP,這裡就不詳細說明了,可以參考本站的《Nginx + PHP(FastCGI)安裝配置筆記》(http://www.sunbloger.com/article/242.html)。
為了便於測試,我們在192.168.1.101上放置一個test.php,代碼如下:
PHP
<?php
echo '101';
?>
並在192.168.1.102上也放置一個同名檔案test.php,代碼如下:
<?php
echo '102';
?>
分別通過瀏覽器訪問http://192.168.1.101:80/test.php和http://192.168.1.102:80/test.php,正常的話會分別顯示101和102。
接下來,我們分別在192.168.1.101和192.168.1.102上添加用於LVS的指令碼,我們可以將指令碼添加到/etc/rc.d/init.d下,作為系統服務隨Linux一起啟動,方法如下:
vi /etc/rc.d/init.d/lvs-rs //建立名為lvs-rs的指令碼
chmod +x /etc/rc.d/init.d/lvs-rs //添加執行許可權
chkconfig --add lvs-rs //加入到系統服務中
lvs-dr指令碼代碼如下:
#!/bin/bash
# chkconfig: 35 90 10
# description: LVS of RealServer
VIP=192.168.1.100
. /etc/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255
/sbin/route add -host $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 "LVS of RealServer Start."
;;
stop)
ifconfig lo:0 down
route del $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 "LVS of RealServer Stoped."
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
接下來,我們開始為192.168.1.100安裝LVS。
yum install ipvsadm
在CentOS下推薦採用yum安裝,可以避免核心版本對LVS的影響。
ipvsadm安裝完畢後,我們為192.168.1.100添加一個名為lvs-ds的服務啟停指令碼,代碼如下:
#!/bin/bash
# chkconfig: 35 90 10
# description: LVS of DirectorServer
VIP=192.168.1.100
RIP1=192.168.1.101
RIP2=192.168.1.102
. /etc/init.d/functions
case "$1" in
start)
/sbin/ipvsadm -A -t $VIP:80 -s wlc
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "LVS of DirectorServer start."
;;
stop)
/sbin/ipvsadm -C
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "LVS of DirectorServer stoped."
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "LVS of DirectorServer stoped."
exit 1
else
echo "LVS of DirectorServer OK."
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
將lvs-ds添加到系統服務中:
vi /etc/rc.d/init.d/lvs-ds //建立名為lvs-rs的指令碼
chmod +x /etc/rc.d/init.d/lvs-ds //添加執行許可權
chkconfig --add lvs-ds //加入到系統服務中
至此,3台主機部署完畢,開始測試
首先在192.168.1.101和192.168.1.102上分別啟動lvs-rs
service lvs-rs start
然後在192.168.1.100上啟動lvs-ds
service lvs-ds start
通過http://192.168.1.100:80/test.php來測試LVS工作是否正常,反覆重新整理頁面會看到隨機顯示101或102就代碼部署成功了。