1. 程式人生 > >使用cwRsync實現windows下文件定時同步

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

指定 停止 手動 如果 直接 pos 文件 rsync clu

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這個文件,打開文件我們可以看到所有的記錄。下面我摘錄部分日誌信息

技術分享圖片 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不會被同步。

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