雙伺服器熱備系統軟體開發

2021-04-12 11:45:37 字數 1541 閱讀 8262

設計思路

依託windows系統對ip位址衝突的處理原則

1 檢查自己是否為floatip設定者,如果是,goto 2,如果不是 goto 4

2 開啟服務,並檢查本機上承載服務是否正常,如果正常 goto 1 ,如果不正常 goto 3

3 關閉服務,清空floatip, 設定過期時鐘(等會闡述)

4 關閉服務,清空floatip .,本檢查floatip上的承載服務是否正常,如果正常,goto 1 如果不正常 goto 5

5 檢測過期時鐘是否過期,如果沒有過期,goto 1 如果過期了 goto 6

6 嘗試開啟本地服務,檢查本機上的承載服務是否正常,如果正常 goto 7 如果不正常 goto 8

7 關閉本地服務,goto 1

8 新增floatip給本機,goto 1

問題:是否存在

a b同時設定上

floatip

後,都認為自己是

floatip

擁有者

根據相通的交換環境規則,乙個ip位址對應唯一的網絡卡位址,所有rarp解析只能對應唯一的固定的伺服器網絡卡上,即使設定同乙個floatip,但對於相通的交換環境中,只有乙個floatip有效,而且一定有乙個有效,這種有效環境並且根據先來先到的基礎上,其他造成衝突的ip位址解析一律不儲存,但會每個一段時間取請求解析繫結。所有上面的問題不會出現的。

所以程式需要每次檢查到自己不是主服務的時候,需要清空他的floatip,雖然增加了點資源的消耗,但可以快速消除ip位址衝突提示。

問題引出,由於可能存在一台主服務剛剛判斷自己服務不通了

,清空了自己的

floatip

,另外的從伺服器還沒有來得及設定

floatip,

就會有可能讓這個原來的主伺服器馬上進入設定

floatip

階段。這個問題解決就設定了乙個過期時鐘,當自己從floatip變成從伺服器的時候,設定過期時鐘,只有當這個過期時鐘過期後(2s)後,才會進入設定判斷階段。避免ip變更抖動

需要涉及的api

function getipaddrtable(pipaddrtable: ptmibipaddrtable;

pdwsize: pulong;

border: bool): dword;

stdcall; external 'iphlpapi.dll';

function addipaddress(address, ipmask: tinaddr; ifindex: dword; ntecontext, nteinstance: pulong): dword;

stdcall; external 'iphlpapi.dll';

function deleteipaddress(ntecontext: ulong): dword;

stdcall; external 'iphlpapi.dll';

實際使用中,windows 2000 與 windows 2003 中的iphlpapi 對 新增floatip後該floatip的編號 (供刪除用的ntecontext)排列方式約有不同

系統軟體開發平台

很多時候我們找我們想要找到的人總是很難,比如技術人員想要找真正需求者,又比如需求者想找靠譜的開發團隊。於是就有了橋梁 產品經理的誕生,他們連線客戶與開發團隊,與客戶溝通好需求,再將需求整理給開發團隊。但是客戶與產品經理也是需要乙個橋梁的,這就出現了像大大神網這樣的能夠將他們連線到一起的平台。no.1...

伺服器雙機熱備概述

雙機熱備工作意圖如上所示。問 什麼時候需要雙機熱備呢?答 這個問題其實比較簡單,一般伺服器要長年累月的工作,其備份工作就絕對少不了。所以,決定是否使用雙機熱備,筆者覺得應首先對系統的重要性,以及終端使用者對服務中斷的容忍程度進行考慮,然後再來決定是否使用雙機熱備。比如網路中的使用者最多能容忍多長時間...

伺服器軟體開發系列 開篇

從畢業到現在一年的時間裡,都在做通訊方面的東西,因為通訊往往涉及到高併發和大資料的處理,所以誰的 只要有一丁點的問題,都會在伺服器上顯露無疑,所以並不能像很多的什麼什麼管理系統一樣,效率差點沒關係,反正也是企業內部使用。說到伺服器這方面的,因為園子裡面討論的人也不多或者我關注的不夠,所以在此鏈結以前...