原文: http://www.360doc.com/content/11/0823/18/5907545_142730623.shtml
有兩台Linux伺服器,其中一台主機(IP:139.24.214.22)對外提供了一定的網路服務,另一台從機(IP:139.24.214.24)能提供相同的服務,但IP地址沒有對外部公開。
用戶端串連的都是139.24.214.22這個IP地址,如果主機故障,則會使網路服務暫時中斷,時間越長造成損失越大,
由於沒有採用雙機熱備份技術,考慮自己用Linux指令碼來實現簡單的浮動IP技術,當主機故障時從機獲得139.24.214.22這個IP,暫時替代主機提供服務,當主機恢複時,從機自動釋放這個IP。
思路:
利用單個網卡綁定多個IP地址的技術和crontab自動執行技術
為主機的網卡多綁定一個靜態IP,如139.24.214.82,這個地址是便於從機判斷的,
為從機的網卡多綁定一個動態IP,127.0.0.1,它在主機故障時將會被指令碼修改為139.24.214.22
在從機上添加一個指令碼 /root/autoFloatIP.sh,使用crontab技術讓這個指令碼每分鐘執行一次,這個指令碼的作用是判斷主機的地址82能否Ping通,一旦不正常則將讓自己的網卡多餘的那個IP地址改為139.24.214.22,如果主機恢複,則將這個地址改回為127.0.0.1
步驟
1.為主機添加一個靜態IP139.24.214.82,由於這個是靜態IP,可以採用在圖形化介面中設定此IP並儲存的辦法,或者在/etc/sysconfig/network-scripts目錄裡面建立一個名為ifcfg-eth0:1的檔案,內容為:
DEVICE=eth0:1
IPADDR=139.24.214.82
NETMASK= 255.255.255.0
ONBOOT= yes
2.在從機上,在/root下建立一個指令碼autoFloatIP.sh
用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在電腦重啟會消失
3從機上建立crontab
用crontab -e命令
讓後加上這樣的一行並儲存
* * * * * /root/autoFloatIP.sh > /dev/null 2>&1
小提示
在測試時,你可以先將這句話改為 * * * * * /root/autoFloatIP.sh
這樣你可以用mutt收到很多郵件,使用者跟蹤指令碼執行情況