原文:有兩台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"
fifi
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收到很多郵件,使用者跟蹤指令碼執**況
自己動手實現vector
有了實現string的基礎,在加上一點點模板的知識,就可以自己動手實現乙個vector了。下面是我實現的 比較簡單。有點犯懶了,講解以後再寫吧!ifndef my vector h define my vectoe h include typedef unsigned int size t temp...
自己動手實現redux 一
訂閱事件,返回乙個取消訂閱函式 let subscribe cb let dispatch action return export default createstore 當我們使用redux時,首先需要使用redux的createstore並且傳入reducer來建立我們的store impor...
C 自己動手實現Spy (一)
intptr hwnd win32.windowfrompoint cursor.position 最關鍵的一句 if oldwnd intptr.zero oldwnd hwnd if hwnd intptr.zero else hwnd.toint32 tostring textbox3.tex...