標籤:style blog http color 使用 strong
前幾年我開發過一個軟體系統,為使用者提供7×24小時不間斷的服務。為了確保服務品質,採用了雙機熱備的形式。雙機系統能夠正常工作的關鍵技術之一,就是主備機之間的資料同步。下面介紹的資料同步方法是以網路檔案分享權限設定服務為基礎實現的,簡單易行,安全可靠,在當時時間緊、任務重、投資有限的情況下,應用效果比較理想。
Windows網路檔案分享權限設定服務
在Windows系統內容中,一台電腦可以作為伺服器向區域網路中的其它電腦(客戶機)提供“檔案分享權限設定服務”。通過這項服務,客戶機使用者能夠像訪問本地檔案一樣通過網路對伺服器上的共用檔案進行一系列操作。
當使用者通過客戶機串連到伺服器的共用位置時,他們可以:
- 開啟檔案
- 儲存檔案
- 刪除檔案
- 建立、修改和刪除檔案夾
- 執行其他任務
客戶機訪問伺服器上共用檔案位置的方法有多種,如網路位置、映射網路磁碟機等。這裡我們採用適合軟體編程實現的“UNC路徑訪問法”。
UNC (Universal Naming Convention) “通用命名慣例”,用於確定儲存在網路伺服器上的檔案位置。UNC符合“\\servername\sharename”格式,其中 servername 是伺服器名,sharename 是共用資源的名稱。目錄或檔案的 UNC 名稱可以包括共用資源名稱下的目錄路徑,格式為:\\servername\sharename\directory\filename,其中directory是目錄名,filename是共用檔案名稱。
本資料同步方法的設計思路是:當雙機間需要進行資料同步時,主機作為客戶機,利用“UNC路徑訪問法”開啟備機(伺服器)的資料檔案(共用檔案),將最新的運行資料寫入資料檔案中。這樣就能夠確保主、備機之間資料的一致性。
由於網路檔案分享權限設定服務是Windows作業系統提供的基於TCP/IP協議的標準服務,而且伺服器在提供服務前需要客戶機提供有效訪問憑據(如域的名稱、使用者名稱稱和密碼),使用者能夠進行的操作也取決於被授與權限,因此利用網路檔案分享權限設定服務,結合檔案操作、Ping等通用技術,可以實現免資料庫、安全、便捷、易維護的雙機熱備系統資料同步機制。
服務配置過程
由於網路檔案分享權限設定服務不是Windows作業系統提供的預設服務,因此需要通過以下步驟進行配置:
圖1.服務配置步驟
第一步,在雙機中安裝Windows作業系統。通常,Windows 2000或更高版本的作業系統都能夠提供網路檔案分享權限設定服務。
第二步,在雙機的作業系統中建立同樣的使用者,使用同樣的密碼,並確保該使用者對各自的共用檔案和目錄具有建立、讀、寫、修改和刪除許可權。如此設定,能夠保證客戶機順利通過伺服器的安全驗證,並訪問伺服器的共用資源。
第三步,在作業系統中安裝TCP/IP協議,並確保處於同一區域網路中的雙機能夠進行正常通訊。
第四步,在作業系統中安裝“Microsoft網路用戶端”和“Microsoft網路的檔案和印表機共用”兩個網路組件。這些組件是作業系統對外提供檔案分享權限設定服務的基礎配置。
此時配置完成,雙機已經具備了互為伺服器和客戶機的條件。
資料同步的實現
具體的雙機間資料同步操作是由運行於作業系統中的應用軟體執行的。資料同步操作通常由主機中的應用軟體發起,因此它的執行流程是:
圖2. 主機資料同步流程
在上述流程中,主機應用軟體首先“將資料寫入本機資料檔案”,其目的是保證應用軟體在遇到強制關閉等情況後不丟失運行資料,待重新啟動後能夠從本機資料檔案中獲得資料,繼續以正常方式運行。
“向備機執行Ping操作”目的是查看當時主備機之間的網路是否通暢,為後續的資料檔案操作提供保障。Ping(Packet Internet Groper,網際網路包探測器)操作是通過向目標IP地址發送ICMP(Internet Control Messages Protocol,網際網路控制報文協議)回聲請求訊息,並依據對方是否應答來判斷網路的通斷狀況。在這裡,可以將備機的IP地址寫在應用軟體的設定檔中,應用軟體在啟動階段讀取該IP地址,並作為UNC路徑訪問和Ping操作的參數使用。
執行“通過UNC路徑訪問備機的資料檔案”操作的C++代碼如下:
1 CFile NetLogFile; 2 CString strFileName; 3 strFileName.Format("\\\\%s\\c$\\StaTerm\\LOG.tmp",m_strBackUpIP); 4 5 //開啟備機資料檔案LOG.tmp 6 try 7 { 8 if (!NetLogFile.Open(strFileName, CFile::modeCreate | CFile::modeWrite )) 9 {10 TRACE0("\n無法開啟備機資料檔案LOG.tmp\n");11 return;12 }13 }14 catch ( CException* pe1 )15 {16 TRACE0("\n系統開啟備機資料檔案LOG.tmp時出錯!\n");17 pe1->Delete();18 return;19 }
上述第3行代碼就是採用UNC路徑訪問法確定備機資料檔案位置。這樣就保證了可以在第8行使用本地檔案開啟函數(CFile::Open)開啟備機上的網際網路共用資料檔案,從而降低了軟體開發的難度和複雜度。
在執行“將資料寫入備機資料檔案”操作時,主機應用軟體可以有兩種方法完成向備機的資料同步:
- 開啟備機資料檔案,將主機的資料直接寫入,關閉檔案;
- 將主機的最新資料檔案直接複製到備機的資料檔案目錄中,覆蓋備機原有資料檔案。
對於備機中啟動並執行應用軟體,一般情況下不對其原生資料檔案進行讀寫操作,避免對主機執行同步操作的影響。只有在接到雙機主備裁決模組發來的升為主機狀態的命令時,該應用軟體才會從本機資料檔案中讀取資料,並進入正常執行邏輯。由於此時的資料檔案通過前一次同步過程得到了更新,已與原主機的最新資料保持一致,因此就實現了在主備切換時雙機間資料同步的功能。
- [email protected]部落格園 -