cwRsync檔案同步
眾所周知,Linux系統可以用rsync來實現檔案或目錄的同步,windows系統下也一樣可以。我們現在就用cwRsync來實現windows server 2008系統下的檔案同步。
一、系統環境
作業系統:Windows server 2008 R2
更新源伺服器:192.168.0.108
目的伺服器:192.168.0.132
服務端:cwRsyncServer_4.1.0_Installer
客戶端:cwRsync_4.1.0_Installer
二、更新源伺服器安裝配置(cwRsync服務端)
1. 雙擊cwRsyncServer_4.1.0_Installer.exe開啟安裝介面,然後就一路下一步,安裝cwRsync服務端預設有一個管理員帳戶SvcCWRSYN,可自行設定使用者名稱和密碼。
2. 修改RsyncServer的配置檔案(C:\Program Files (x86)\ICW\rsyncd.conf)
- use chroot = false #不使用chroot
- strict modes = false #靜態模式
- hosts allow = * #配置全域性哪些IP可以訪問
- log file = rsyncd.log #log檔名,可以指定路徑
- pid file = rsyncd.pid
- port = 8173 #預設埠873
- uid = 0 #不指定uid,不加這一行將無法使用任何賬戶
- gid = 0 #不指定gid
- max connections = 10 #最大連線數10
- lock file = rsyncd.lock
- # Module definitions
- # Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
- #
- [test]
- path = /cygdrive/f/xuad #需要同步的路徑(F:\xuad目錄)
- read only = false #只讀許可權
- transfer logging = yes #記錄傳輸日誌
- ignore errors #忽略無關的IO錯誤
- list = no #不列檔案表
- hosts allow = 192.168.0.132/255.255.255.0 #允許訪問的IP地址
- hosts deny = * #不允許hosts allow以外的任何IP訪問
3. 安裝完成後,在“服務”裡面就可以看到cwRsync對應的服務了,安裝完成後需要手動啟動該服務。將RsyncServer的啟動方式設定成自動,然後啟動該服務。注:針對需要同步的目錄,別忘記給SvcCWRSYNC使用者讀取的許可權。
4. 用netstat –anp tcp檢視8173埠是否已監聽,在客戶端伺服器telnet 192.168.0.108 8173看埠是否已通。
三、目的伺服器安裝配置(cwRsync客戶端)
1. 雙擊cwRsync_4.1.0_Installer.exe開啟安裝介面,然後一路下一步,直到安裝完成。
2. 手動測試同步
在路徑C:\Program Files\cwRsync\bin下輸入rsync.exe -avzP --progress –delete rsync://192.168.0.108:8173/test /cygdrive/f/xuad,出現如下圖資訊說明同步成功。
引數說明
-a 引數,相當於-rlptgoD,
-r 是遞迴
-l 是連結檔案,意思是拷貝連結檔案;
-p 表示保持檔案原有許可權;
-t 保持檔案原有時間;
-g 保持檔案原有使用者組;
-o 保持檔案原有屬主;
-D 相當於塊裝置檔案;
-z 傳輸時壓縮;
-P 傳輸進度;
-v verbose,詳細模式輸出;
-u是隻同步已經更新的檔案,避免沒有更新的檔案被重複更新一次,不過要注意兩者機器時鐘的同步;
--progress 顯示備份過程;
--delete 刪除那些DST中SRC沒有的檔案,用作同步檔案用;
3.定時自動更新配置
(1)編寫rsync.bat批處理指令碼
- @echo off
- set rsynclog="C:\rsynclog\rsync.log"
- set nowtime=%date:~0,10% %time%
- echo %nowtime% >> %rsynclog%
- cd /d C:\"Program Files"\cwRsync\bin
- rsync.exe -avzPu --progress --delete rsync://192.168.0.108:8173/test /cygdrive/c/xuad >> %rsynclog%
- @echo -------------------------------------------------- >> %rsynclog%
- @echo. >> %rsynclog%
(2)設定計劃任務(每5分鐘同步一次)
開始-管理工具-任務計劃程式
右擊“任務計劃程式本地”,開啟建立任務介面。輸入姓名(任務名稱),選擇啟動任務的帳戶,選中“不管使用者是否登入都要執行”。
點選“觸發器”-“新建”,開啟新建觸發器介面。按下圖進行設定,每5分鐘同步一次。
點選“操作”-“新建”,開啟新建操作介面。按下圖進行設定,選擇之前編輯好的bat指令碼,然後“確定”。
“條件”和“設定”均使用預設設定,然後“確定”,輸入執行此任務的使用者帳戶的密碼,點選“確定”,建立任務計劃完成。
四、測試中出現的錯誤
1. 命令輸入錯誤
紅框標記出來的地方應該是rsyncd.conf檔案裡的模組名,而不是同步目錄名。
2.防火牆阻止了此埠
需要在防火牆的入站規則裡新增一條允許此埠的規則。
五、重要說明
對於多臺伺服器做檔案同步,最好是連同資料備份一起做了。舉個例子:有A、B、C、D四臺伺服器,需要保證四臺伺服器一個或多個目錄的資料一致性,也就是 BCD需要從A上同步一個或多個目錄的資料,那麼A就是更新源伺服器,BCD就是目的伺服器。現在有個問題,當A的資料出現問題或丟失,那麼BCD三臺的 資料都會出現問題並且丟失,為了保證A的資料一定是正確的,我們在更新A伺服器之前,就要先對A做資料備份。下面是個簡單的bat指令碼,可以實現資料的自 動備份並上傳至FTP伺服器,可以把它加入到任務計劃裡面定期執行它。
Backup.bat指令碼內容如下:
- @echo off
- set today=%date:~0,10%
- set nowh=%time:~0,2%
- set nowtime=%date:~0,10% %time%
- set rar="c:\Program Files\WinRAR\rar.exe"
- set ftplist="E:\baklog\ftpls.txt"
- set baklog="E:\baklog\backup.log"
- set FtpSrv=192.168.0.109
- set FtpPort=21
- set FtpUser=bak
- set FtpPwd=bak1q2w3e
- echo %nowtime% >> %baklog%
- ::Rar files
- %rar% a E:\backup\backup_%today%_%nowh%.rar F:\xuad >> %baklog%
- ::Upload files by ftp
- echo open %FtpSrv% %FtpPort% > %ftplist%
- echo user %FtpUser% %FtpPwd% >> %ftplist%
- echo cd backup >>%ftplist%
- echo bin >> %ftplist%
- echo prompt >> %ftplist%
- echo lcd E:\backup >>%ftplist%
- echo Put backup_%today%_%nowh%.rar >> %ftplist%
- echo quit >> %ftplist%
- echo bye >> %ftplist%
- ftp -n -s:%ftplist% >> %baklog%
- echo. > %rarlist%
- @echo -------------------------------------------------- >> %baklog%
- @echo. >> %baklog%