兩台Linux服務器,一台為主機(IP:124.158.26.30)對外提供了一定的網絡服務,另一台從機(IP:124.158.26.31)能提供相同的服務,但ip地址沒有對外部公開客戶端連接的都是124.158.26.30這個ip地址,如果主機故障,則會使網絡服務暫時中斷,時間越長造成損失越大由於沒有采用雙機熱備技術,考慮自己用Linux腳本來實現簡單的浮動ip技術,當主機故障時從機獲取124.158.26.30這個ip,暫時替代主機提供服務,當主機恢復時,從機自動釋放這個ip
實現:
利用單個網卡綁定多個ip地址的技術和crontab自動執行技術
為主機的網卡多綁定一個靜態ip,如124.158.26.32 ,這個地址是便於從機判斷的,為從機的網卡多綁定一個動態ip,127.0.0.1,它在主機故障時將會被腳本修改為124.158.26.30
在從機添加一個腳本 floatip.sh,使用crontab技術讓這個腳本每分鍾執行一次,這個腳本的作用是判斷主機的地址32能否ping通,一旦不通則將讓自己的網卡多余那個ip地址改為124.158.26.30,如果主機恢復,則將這個地址改回為127.0.0.1
步驟:
一、為主機多綁定一個靜態ip124.158.26.32
在
/etc/sysconfig/network-scripts目錄里面創建一個名為
ifcfg-eth0:1的文件,內容為:
DEVICE=eth0:1
IPADDR=139.24.214.82
NETMASK= 255.255.255.0
ONBOOT= yes
二、在從機上建立腳本floatip.sh
c1=`ping 124.158.26.32 -c 1 | grep Unreachable | wc -l`
c2=`ping 124.158.26.32 -c 10 | grep Unreachable | wc -l`
c3=`ping 124.158.26.30 -c 10 | grep Unreachable | wc -l`
c4=`/sbin/ifconfig |grep 124.158.26.30 |wc -l`
if [ $c1 -gt 0 ] ;then
if [ $c2 -gt 9 ] ;then
if [ $c3 -gt 9 ] ;then
/sbin/ifconfig eth0:1 124.158.26.30 netmask 255.255.255.0
echo "float ip to 30"
fi
fi
echo "can not connect"
else
if [ $c4 -gt 0 ] ;then
/sbin/ifconfig eth0:1 127.0.0.1 netmask 255.255.255.0
echo "reset ip"
fi
echo "connection is ok"
fi
用chmod +x autoFloatIP.sh
讓它可以執行,腳本的內容為
c1=$(ping 139.24.214.82 -c 1|grep Unreachable|wc -l)
if [ $c1 -gt 0 ] then
c2=$(ping 139.24.214.82 -c 10|grep Unreachable|wc -l)
if [ $c2 -gt 9 ] then
c3=$(ping 139.24.214.22 -c 10|grep Unreachable|wc -l)
if [ $c3 -gt 9 ] then
/sbin/ifconfig eth0:1 139.24.214.22 netmask 255.255.254.0
echo "float ip to 22"
fi
fi
echo "can not connect"
else
c4=$(/sbin/ifconfig|grep 139.24.214.22|wc -l)
if [ $c4 -gt 0 ] then
/sbin/ifconfig eth0:2 127.0.0.1 netmask 255.255.254.0
echo "reset ip"
fi
echo "connection is ok"
fi
其中關鍵的命令為
/sbin/ifconfig eth0:1 139.24.214.22 netmask 255.255.254.0
/sbin/ifconfig eth0:2 127.0.0.1 netmask 255.255.254.0
用這個方法來動態修改
IP
,動態
IP
在電腦重啟會消失
從機上建立crontab
讓后加上這樣的一行並保存
* * * * * /root/autoFloatIP.sh > /dev/null 2>&1
小提示
在測試時,你可以先將這句話改為
* * * * * /root/autoFloatIP.sh
這樣你可以用
mutt
收到很多郵件,用戶跟蹤腳本執行情況