思路:
當伺服器A 發生故障,伺服器B可以迅速接管伺服器A的任務,不影響使用者的正常通路。
當伺服器A 故障恢複,伺服器A可以馬上接管伺服器B的任務,伺服器B恢複備機狀态。
做法:
兩台伺服器上配置一個虛拟IP位址,主伺服器先綁定虛拟ip位址,當發生故障時,備機自動接管虛拟ip位址,重新整理網關路由位址。當主機恢複後,備機釋放虛拟ip位址,主機再次主動接管虛拟ip位址,重新整理網關路由位址。
結構圖:

主伺服器:ip 192.168.190.199
備伺服器: ip 192.168.190.208
vip:192.168.190.88
gateWay=192.168.190.254
netMask=255.255.255.0
bcast=192.168.190.255
步驟:
1、配置虛拟ip:192.168.190.88 到 www.test.com 綁定虛拟ip
/sbin/ifconfig eth0:1 192.168.190.88 broadcast 192.168.190.255
netmask 255.255.255.0 up
/sbin/route add -host 192.168.190.88 dev eth0:1
2、重新整理網關路由
/sbin/arping -i eth0 -s 192.168.190.88 192.168.190.254 > /dev/null 2>&1
3、當發生故障時,主機192.168.190.199 ,釋放虛拟ip192.168.190.88,備機192.168.190.208接管 虛拟ip192.168.190.88
/sbin/ifconfig eth0:1 192.168.190.88 broadcast 192.168.190.255 netmask 255.255.255.0 down
3、這時 www.test.com 解析到了備機伺服器192.168.190.208
4、重新開機備機web伺服器
5、若主機192.168.190.199服務恢複正常,備機192.168.190.208釋放虛拟IP,主機
綁定虛拟IP 192.168.190.88
備機釋放虛拟ip:
6、重新開機啟動主備機web服務
主機192.168.190.199
autoSwitchMain.sh切換腳本
#!/bin/sh
#############################################################
#desc:伺服器當機自動切換服務
#author:gaozhonghui
#mail:[email protected]
#date:20121101
vip=192.168.190.88
gateWay=192.168.190.254
netMask=255.255.255.0
bcast=192.168.190.255
function_bind_vip1(){
/sbin/ifconfig eth0:1 ${vip} broadcast ${bcast} netmask ${netMask} up
/sbin/route add -host ${vip} dev eth0:1
}
function_remove_vip1(){
/sbin/ifconfig eth0:1 ${vip} broadcast ${bcast} netmask ${netMask down
function_vip_arping1(){
/sbin/arping -i eth0 -s ${vip} ${gateWay} > /dev/null 2>&1
function_restart_nginx(){
/web/webserver/nginx/sbin/nginx -s reload
bind_time_vip="N"
while true
do
httpCode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://192.168.190.199`
if [ x${httpCode_rip1} == "x200" ];
then
if [ ${bind_time_vip} == "N" ];
then
function_bind_vip1
function_vip_arping1
bind_time_vip="Y"
fi
function_vip_arping1
else
if [ ${bind_time_vip} == "Y" ]
function_remove_vip1
bind_time_vip="N"
fi
sleep 10
done
然後linux 啟動守候程序
/usr/bin/nohup /bin/sh /home/Gzh/shell/ autoSwitchMain.sh 2>&1 > /dev/null &
備機192.168.190.208:
autoSwitchSlave.sh
/sbin/ifconfig eth0:1 ${vip} broadcast ${bcast} netmask ${netMask} down
httpCode_rip1=`/usr/bin/curl -o /dev/null -s -w %{http_code} http://192. 168.190.199`
if [ x${httpCode_rip1} == "x200" ];
if [ ${bind_time_vip} == "Y" ];
then
function_remove_vip1
bind_time_vip="N"
fi
function_vip_arping1
else
if [ ${bind_time_vip} == "N" ]
function_bind_vip1
function_vip_arping1
bind_time_vip="Y"
sleep 10
啟動守候程序
/usr/bin/nohup /bin/sh /home/Gzh/shell/autoSwitchSlave.sh 2>&1 > /dev/null &
本文轉自 freeterman 51CTO部落格,原文連結:http://blog.51cto.com/myunix/1120659,如需轉載請自行聯系原作者