天天看點

針對web伺服器容災自動切換方案

思路: 

當伺服器A 發生故障,伺服器B可以迅速接管伺服器A的任務,不影響使用者的正常通路。 

當伺服器A 故障恢複,伺服器A可以馬上接管伺服器B的任務,伺服器B恢複備機狀态。 

做法: 

兩台伺服器上配置一個虛拟IP位址,主伺服器先綁定虛拟ip位址,當發生故障時,備機自動接管虛拟ip位址,重新整理網關路由位址。當主機恢複後,備機釋放虛拟ip位址,主機再次主動接管虛拟ip位址,重新整理網關路由位址。 

結構圖: 

針對web伺服器容災自動切換方案

主伺服器: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 

針對web伺服器容災自動切換方案

/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、重新整理網關路由 

針對web伺服器容災自動切換方案

/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 

針對web伺服器容災自動切換方案

/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: 

針對web伺服器容災自動切換方案

6、重新開機啟動主備機web服務 

主機192.168.190.199 

autoSwitchMain.sh切換腳本 

針對web伺服器容災自動切換方案

#!/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 

針對web伺服器容災自動切換方案

/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,如需轉載請自行聯系原作者