使用cwRsync實現windows下文件定時同步


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 = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid 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 = false
transfer logging = yes
lock 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\bin
3 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這個文件,打開文件我們可以看到所有的記錄。下面我摘錄部分日志信息

2013/10/10 15:40:38 [2316] connect from BJCGNSCF01 (10.138.16.55)
2013/10/10 15:40:39 [2316] rsync on config/ from bjcgnscf01 (10.138.16.55)
2013/10/10 15:40:39 [2316] building file list
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () config.xml 438246
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () config1.xml 438161
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () process-test.xml 20339
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_AUML.txt 8178
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BPCG.txt 4453
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BRBA_SE.txt 4373
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_BRBA_VS.txt 4340
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_DEBT.txt 7114
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_LWZA.txt 4462
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMCH.txt 4822
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMDS.txt 7531
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMFR.txt 7104
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMHJ.txt 4956
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMSY_VS.txt 4184
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_NMXQ.txt 4340
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_PI.txt 50574
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_SCDA.txt 4960
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_SDSG.txt 7531
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TPSA.txt 4466
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TSLW.txt 4791
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_TWSA.txt 4466
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_XKHA.txt 4791
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_XZDA.txt 4952
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_OPC_ZJCA.txt 4462
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () fe_sys/wtg_template_zjc.txt 43642
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/alarm_tab_define.sys 141
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/his_start_month.sys 8
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/pointvalue_10m.sys 255
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/system - 副本.sys 138
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/system.sys_bak 269
2013/10/10 15:40:39 [2316] send bjcgnscf01 [10.138.16.55] config () scada_sys/version.sys 5
2013/10/10 15:40:40 [2316] sent 580665 bytes  received 5217 bytes  total size 4120913
#cwRsync只同步增量文件,當server端沒有新增或者刪除文件時,客戶端的目錄頁不會發生變化
2013/10/10 15:50:16 [2252] connect from BJCGNSCF01 (10.138.16.55)
2013/10/10 15:50:17 [2252] rsync on config/ from bjcgnscf01 (10.138.16.55)
2013/10/10 15:50:17 [2252] building file list
2013/10/10 15:50:17 [2252] sent 2420 bytes  received 125 bytes  total size 4120913
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.exclude
exclude = test1/
read only = false
transfer logging = yes
lock file = rsyncd.lock

8.2通過exclude from關鍵字實現test2和test3目錄的例外

[config]
path = /cygdrive/d/ENVISION/config
exclude from = rsync.exclude
#exclude = test1/
read only = false
transfer logging = yes
lock file = rsyncd.lock

其中rsync.excluede文件跟rsyncd.conf在同一目錄下,其中的文件內容是,其中“/”非常重要。

test2/
test3/

8.2排除目錄下的指定文件

exclude和exclude from不僅僅指限制與目錄,也可以使指定的文件名。

在test1目錄下添加一個文件test2.txt,然后進行如下配置

[config]
path = /cygdrive/d/ENVISION/config
exclude from = rsync.exclude
exclude = test1/test.txt
read only = false
transfer logging = yes
lock file = rsyncd.lock

再次執行同步命令,會發現test1/test2.txt會被同步,而test1/test.txt不會被同步。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM