Windows 文件同步方案討論

在日常運維工作中,經常會遇到這樣的情況:我們需要在無人值守的情況下完成文件、文件夾的同步過程,已實現週期性的備份,避免單點故障。本研究實現了本地Windows主機與遠程Windows主機,本地Windows主機與遠程Linux主機目錄的定時自動同步。實驗在Windows2003,REHL5.4下實驗通過。

一、軟件準備

Linux下有rsync,Windows下也有類似的軟件,就是cwRsync,此軟件分爲服務器端/客戶端。目前最新版本爲:4.04版,cwRsyncServer_4.0.4_Installer,cwRsync_4.0.4_Installer。

cwRsync打包了Rsync和Cygwin,使用cwRsync可以進行快速的遠程備份和同步。Rsync使用了Rsync算法,通過它可以非常快的進行遠程文件的同步。這種算法只需要在鏈路上傳遞文件不同的部分,而不需要提前在一端準備好文件所有版本的。乍一看這似乎是不可能的,因爲計算兩個文件之間的不同,通常需要本地訪問的這兩個文件。

Rsync通常使用ssh進行數據通訊,安裝它不需要任何特殊權限,但是你必須有一個可以運行ssh軟件系統。

作爲選擇,rsync可以運行在守護進程模式,監聽一個socket端口。這通常是用於公共文件的分發,雖然身份驗證和訪問控制是可利用的。Cygwin是一個Windows下類linux系統環境。它由一個DLL(cygwin1.dll),模擬大量的Linux API功能,以及工具的集合。

詳細情況可通過http://itefix.no/cwrsync/瞭解。

二、初始化安裝

cwRsync支持多種平臺:client – NT/2000/XP/2003/Vista/7,Server – NT/2000'/2003/2008/Vista/7.

cwRsync已一個zip壓縮包包含一個Windows下安裝程序形式發佈。解壓下載文件,運行cwRsync_x.x.x_Installer.exe或者cwRsync_Server_x.x.x_Installer.exe(服務器版):

  1. 歡迎頁面,點擊“Next”進入 。
  2. 查看License協議。
  3. 根據安裝包的不同選在安裝組件:客戶端安裝包有一個可選項(Secure Channel Wrapper & Wizard),它做一個簡單的工作,安裝一個安全的連接方式與服務器端程序。
  4. 指定一個安裝路徑。
  5. 指定一個服務器的賬戶(僅服務器端程序)。
  6. 安裝開始。可以點擊“Details”按鈕,查看更多關於安裝的詳細信息。

OK,cwRsync已經安裝成功。

cwRsync服務器端,需要根據需要修改配置文件。安裝過程中會自動創建SvcCWRSYNC用戶,所屬user組。如果定義了上傳模塊,則必須保證cwRsync server有正確的權限可以訪問目錄。可以通過開始菜單程序快速訪問此配置文件。

cwRsync Server會安裝爲WINDOWS服務,啓動參數爲:--config rsyncd.conf --daemon --no-detach。默認自動啓動。

三、實驗環境

服務端(需要背同步的數據所在的服務器):192.168.1.10

客戶端(需要將數據同步的服務器):192.168.1.20

需要被同步的數據:d:/resource

需要同步到d:/back/resource

Server:

修改rsyncd.conf

1: uid = 0 2: gid = 0 3: use chroot = false 4: strict modes = false 5: hosts allow = * 6: log file = rsyncd.log 7:   8: # Module definitions 9: # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work 10: # 11: [RESOURCE] 12: path = /cygdrive/d/resource 13: read only = false 14: transfer logging = yes 15:  
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
打開命令行窗口,然後執行: net start RsyncServer。服務器端準備完成。

Client:

打開命令行窗口,然後執行:rsync -avz 192.168.1.10::RESOURCE /cygdrive/e/back/resource

注意:如果剛剛沒有把cwrsync的安裝目錄添加到windows的path變量中,系統是無法執行rsync命令的。添加方法,例如我把cwrsync的客戶端安裝在D:\Program Files\cwRsync,則需要把D:\Program Files\cwRsync\bin這個路徑添加到windows的系統path變量中。添加之後需要重新打開cmd命令行窗口纔可以執行上面的命令。

Bat腳本編寫:

1: @ECHO OFF 2: REM ***************************************************************** 3: REM 4: REM CWRSYNC.CMD - Batch file to start rsync command (s). 5: REM 6: REM By David.Jin 7: REM ***************************************************************** 8: SETLOCAL 9: SET STIME=%date:~0,10% %time:~0,8% 10: SET CWRSYNCHOME=%PROGRAMFILES%\RSYNC 11: SET CWOLDPATH=%PATH% 12: SET PATH=%CWRSYNCHOME%\BIN;%PATH% 13: rsync -avz 192.168.1.10::RESOURCE /cygdrive/e/back/resource 14: SET ETIME=%date:~0,10% %time:~0,8% 15: ECHO 腳本開始時間: %STIME% 16: ECHO 腳本結束時間:%ETIME% 17: PAUSE

將該腳本保存爲bat文件,使用windows自帶計劃任務就可以進行定期的服務器間文件同步。

總結:此方法對於正常情況下的Windows服務器間文件定期同步是非常有效的解決方案。但是對於大量小文件的同步性能上沒有官方介紹那麼出色。經常會出現各種main.c錯誤。從筆者這裏也無法得到準確的回答。不過筆者確實多次查閱了rsync mail list,可以非常明確的說:使用ssh協議進行文件同步,程序運行會更加穩定,同時性能消耗較大,同步效率降低。

遇見問題時,祝你好運。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章