標籤:
1.參考文獻:
使用cwRsync實現windows下檔案定時同步(備份)
檔案同步工具CwRsync的使用方法及常用命令詳解
2.背景:
當前的SCADA架構中,有1台Server,5台FE,還有1台Client。其架構如所示:
雖然叫法不同,但是他們的安裝檔案和設定檔是完全一樣的。並且大多數情況下,也建議這些伺服器上面的設定檔保持一致,這樣只需要維護一個版本的config即可,不需要個人化定義每台伺服器上面的config檔案。由此也帶來了一個新的問題,每當我在一台機器上面修改了設定檔,我還需要在其他6台機器上面做相同的修改,重複勞動非常多。由此產生了部署一套檔案同步系統的想法,只需要在一台機器上做修改,其他機器自動定時同步即可。
3.解決方案:
在網上找到一些檔案同步方案,最後決定使用cwRsync這個軟體。cwRsync是基於cygwin平台的rsync軟體包,支援windows對windows、windows對Linux、Linux對windows高效檔案同步。由於CwRsync已經整合了cygwin類庫,因此安裝的時候可以省去cygwin包。Cwrsync還整合了OpenSSH for windows,可以實現Linux 下Rsync一模一樣的操作。使用 cwRsync 來同步檔案後,只需要對一台主伺服器進行檔案修改,其他鏡像伺服器可以自動同步,包括檔案的更新、刪除、重新命名等。
cwRsync分為付費版和免費版兩種,我們只需要使用免費版即可,在官方網站上面下載cwRsync的用戶端版本和伺服器版本。
用戶端版本:cwRsync 4.0.5 Installer
伺服器版本:cwRsyncServer 4.0.5 Installer
4.安裝:
對於cwRsync的安裝沒有什麼好說的,我選擇的全部都是預設安裝,對於伺服器版本的安裝,這裡再多加一句,在安裝過程中會提示要求我們輸入Service account以及密碼,如果我們不指定的話會使用SvcCWRSYNC這個賬戶,密碼是隨機產生的,所以要記住這個密碼。但是在我後面的配置中,並沒有用到這個Service account。
5.配置:
cwRsync的架構很簡單,有一個Server和多個Client組成。安裝server版的cwRsync以後,在伺服器上面啟動cwRsync服務,然後在用戶端上面執行檔案同步命令即可實現檔案同步功能。如果我們將檔案同步命令添加到windows計劃任務當中,就可實現定義同步的功能。
5.1伺服器端配置
在cwRsync的安裝目錄下,可以找到一個rsyncd.conf的設定檔,下面我根據自己實際的業務需求來講名設定檔的修改方法,在第二節背景中我就已經講到了,我有1台Server,5台FE,1台Client。我們的SCADA系統安裝在這七台機器的相同目錄下,都是D:\xxx,然後設定檔目錄是D:\xxx\config,我要實現的目標就是:只要我修改Server這台機器的config目錄,那麼其他六台機器(5台FE和1台Client)就會自動同步相應的配置資訊。
下面我將自己伺服器端設定檔貼出來,在設定檔的下端,我們看到[config]標籤,這就是我們需要同步的config目錄,這裡需要注意的就是對於檔案目錄名稱的變更。我們看到設定檔中有一行寫著"Remember cygwin naming conventions : c:\work becomes /cygwin/c/work",也就是在windows系統下,目錄位址為c:\work的,在我們的設定檔path中,需要修改為/cygwin/c/work。同樣的,我們的當前想要同步的目錄是D:\xxx\config,那麼我就寫成path = /cygdrive/d/xxx/config。其他的配置就按照給出的模板來配置即可。
use chroot = falsestrict modes = falsehosts allow = *log file = rsyncd.logpid file = rsyncd.pid port = 8173 #預設連接埠8173 uid = 0 #不指定uid,不加這一行將無法使用任何賬戶 gid = 0 #不指定gid max connections = 10 #最大串連數10 # Module definitions# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work#[config]path = /cygdrive/d/xxx/config #表示檔案目錄read only = falsetransfer logging = yeslock file = rsyncd.lock#auth users = service-scada #認證使用者名稱#secrets file = rsync.password #認證使用者的使用者名稱和密碼儲存位置
在配置完畢以後,我們接下來就需要啟動cwRsync的服務,我們將此服務設定為自動啟動,如所示。
還有,在上面我們指定RsyncServer的連接埠是8173,我們可以通過netstat -an這個命令來檢查8173連接埠是否被監聽,如所示。
5.2用戶端配置
在安裝完cwRsync的用戶端以後,我們看到預設的安裝目錄是C:\Program Files\cwRsync,我們記下這個安裝目錄,後面會用到這個安裝目錄。
在用戶端上建立一個記事本,在記事本中輸入以下資訊:
1 c:2 cd C:\Program Files\cwRsync\bin3 rsync -av rsync://10.138.16.54:8173/config /cygdrive/d/xxx/config
然後再將此記事本重新命名為config_rsync.bat,就形成了一個批次檔。在批次檔中,之所以需要添加第1、2行,是因為在安裝cwRsync用戶端的時候,並沒有將cwRsync的程式目錄添加到path這個環境變數當中,如果在環境變數path當中添加C:\Program Files\cwRsync\bin,則不需要在批處理中添加第1、2行。
第三行"rsync -av rsync://10.138.16.54:8173/config /cygdrive/d/xxx/config"的含義是從伺服器同步config檔案,同步到本地的D:\xxx\config目錄下面。同步會以server上面的版本為準,如果在fe上面存在同名檔案會被替換。
5.3通過計劃任務用戶端定時同步檔案
前面通過批次檔來實現檔案同步還是手動操作,後面通過添加計劃任務即可實現。我們添加一個叫做rsync_scada的計劃任務,然後指定其運行指令碼是config_rsync.bat,如所示:
在排程中設定執行時間,如所示,這樣設定能夠做到每個十分鐘就能同步一次config目錄。
6.日誌查看:
對於檔案同步的日誌,只能在安裝有伺服器版cwRsync的機器上面查看。在5.1中提到了伺服器端的設定檔,其中有一行是:log file = rsyncd.log。我們在安裝目錄下就能找到 rsyncd.log這個檔案,開啟檔案我們可以看到所有的記錄。下面我摘錄部分日誌資訊
View Code 7.Windows下rsync服務無法啟動的解決方案
伺服器在意外重啟後,RsyncServer服務不能啟動,提示“本機電腦上的reyncserver服務啟動後又停止了”,方法是將安裝目錄下的rsyncd.pid檔案刪除或改名即可,再重新啟動RsyncServer服務,OK,成功了,rsyncd.pid檔案會自動重建。
8.rsync排除目錄的使用方法
需求情境:當前希望將一台server上面的一個檔案夾同步到5個client上面去,但是又不希望同步所有檔案,由個別檔案是不需要同步的,所以必須在server的設定檔中添加排除同步的檔案,這就需要用到了exclude這個參數。這個可以在client上面使用,也可以直接在server上面的進行配置。下面的例子是在server的rsyncd.conf檔案上面配置的。
案例:config檔案目錄下有test1、test2和test3這三個目錄,這三個目錄當中都有一個test.txt檔案。下面通過不同的配置資訊來實現不同的同步要求。
ENVISION——config——test1——test.txt
||———test2——test.txt
||———test3——test.txt
8.1通過exclude關鍵字實現test1目錄的例外
[config]path = /cygdrive/d/ENVISION/config#exclude from = rsync.excludeexclude = test1/read only = falsetransfer logging = yeslock file = rsyncd.lock
8.2通過exclude from關鍵字實現test2和test3目錄的例外
[config]path = /cygdrive/d/ENVISION/configexclude from = rsync.exclude#exclude = test1/read only = falsetransfer logging = yeslock file = rsyncd.lock
其中rsync.excluede檔案跟rsyncd.conf在同一目錄下,其中的檔案內容是,其中“/”非常重要。
test2/test3/
8.2排除目錄下的指定檔案
exclude和exclude from不僅僅指限制與目錄,也可以使指定的檔案名稱。
在test1目錄下添加一個檔案test2.txt,然後進行如下配置
[config]path = /cygdrive/d/ENVISION/configexclude from = rsync.excludeexclude = test1/test.txtread only = falsetransfer logging = yeslock file = rsyncd.lock
再次執行同步命令,會發現test1/test2.txt會被同步,而test1/test.txt不會被同步。
使用cwRsync實現windows下檔案定時同步【轉】