在liunx雙機下自己動手實現浮動IP技術

2021-07-03 09:13:36 字數 1926 閱讀 5814



原文:有兩台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...