其于window系統(tǒng)的Rsync同步實(shí)戰(zhàn)
Posted on 2008-08-18 17:04 beauty9235 閱讀(470) 評(píng)論(0) 編輯 收藏作者: beauty9235 鏈接:http://beauty9235.javaeye.com/blog/229634 發(fā)表時(shí)間: 2008年06月23日
聲明:本文系JavaEye網(wǎng)站發(fā)布的原創(chuàng)博客文章,未經(jīng)作者書(shū)面許可,嚴(yán)禁任何網(wǎng)站轉(zhuǎn)載本文,否則必將追究法律責(zé)任!
其于window系統(tǒng)的同步實(shí)戰(zhàn)
1. 遠(yuǎn)程數(shù)據(jù)同步工具Rsync介紹
1.1 軟件簡(jiǎn)介
Rsync是一個(gè)遠(yuǎn)程數(shù)據(jù)同步工具,可通過(guò)LAN/WAN快速同步多臺(tái)主機(jī)間的文件。Rsync本來(lái)是用以取代rcp的一個(gè)工具,它當(dāng)前由 rsync.samba.org維護(hù)。Rsync使用所謂的“Rsync演算法”來(lái)使本地和遠(yuǎn)程兩個(gè)主機(jī)之間的文件達(dá)到同步,這個(gè)算法只傳送兩個(gè)文件的不同部分,而不是每次都整份傳送,因此速度相當(dāng)快。運(yùn)行Rsync server的機(jī)器也叫backup server,一個(gè)Rsync server可同時(shí)備份多個(gè)client的數(shù)據(jù);也可以多個(gè)Rsync server備份一個(gè)client的數(shù)據(jù)。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server會(huì)打開(kāi)一個(gè)873的服務(wù)通道(port),等待對(duì)方Rsync連接。連接時(shí),Rsync server會(huì)檢查口令是否相符,若通過(guò)口令查核,則可以開(kāi)始進(jìn)行文件傳輸。第一次連通完成時(shí),會(huì)把整份文件傳輸一次,下一次就只傳送二個(gè)文件之間不同的部份。
Rsync支持大多數(shù)的類(lèi)Unix系統(tǒng),無(wú)論是Linux、Solaris還是BSD上都經(jīng)過(guò)了良好的測(cè)試。此外,它在windows平臺(tái)下也有相應(yīng)的版本,比較知名的有cwRsync和Sync2NAS。
Rsync的基本特點(diǎn)如下:
1.可以鏡像保存整個(gè)目錄樹(shù)和文件系統(tǒng);
2.可以很容易做到保持原來(lái)文件的權(quán)限、時(shí)間、軟硬鏈接等;
3.無(wú)須特殊權(quán)限即可安裝;
4.優(yōu)化的流程,文件傳輸效率高;
5.可以使用rcp、ssh等方式來(lái)傳輸文件,當(dāng)然也可以通過(guò)直接的socket連接;
6.支持匿名傳輸。
1.2 核心算法
假定在名為α和β的兩臺(tái)計(jì)算機(jī)之間同步相似的文件A與B,其中α對(duì)文件A擁有訪問(wèn)權(quán),β對(duì)文件B擁有訪問(wèn)權(quán)。并且假定主機(jī)α與β之間的網(wǎng)絡(luò)帶寬很小。那么rsync算法將通過(guò)下面的五個(gè)步驟來(lái)完成:
1.β將文件B分割成一組不重疊的固定大小為S字節(jié)的數(shù)據(jù)塊。最后一塊可能會(huì)比S 小。
2.β對(duì)每一個(gè)分割好的數(shù)據(jù)塊執(zhí)行兩種校驗(yàn):一種是32位的滾動(dòng)弱校驗(yàn),另一種是128位的MD4強(qiáng)校驗(yàn)。
3.β將這些校驗(yàn)結(jié)果發(fā)給α。
4.α通過(guò)搜索文件A的所有大小為S的數(shù)據(jù)塊(偏移量可以任選,不一定非要是S的倍數(shù)),來(lái)尋找與文件B的某一塊有著相同的弱校驗(yàn)碼和強(qiáng)校驗(yàn)碼的數(shù)據(jù)塊。這項(xiàng)工作可以借助滾動(dòng)校驗(yàn)的特性很快完成。
5.α發(fā)給β一串指令來(lái)生成文件A在β上的備份。這里的每一條指令要么是對(duì)文件B經(jīng)擁有某一個(gè)數(shù)據(jù)塊而不須重傳的證明,要么是一個(gè)數(shù)據(jù)塊,這個(gè)數(shù)據(jù)塊肯定是沒(méi)有與文件B的任何一個(gè)數(shù)據(jù)塊匹配上的。
1.3 命令語(yǔ)法
rsync的命令格式可以為以下六種:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
對(duì)應(yīng)于以上六種命令格式,rsync有六種不同的工作模式:
1)拷貝本地文件。當(dāng)SRC和DES路徑信息都不包含有單個(gè)冒號(hào)":"分隔符時(shí)就啟動(dòng)這種工作模式。
2)使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將本地機(jī)器的內(nèi)容拷貝到遠(yuǎn)程機(jī)器。當(dāng)DST路徑地址包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。
3)使用一個(gè)遠(yuǎn)程shell程序(如rsh、ssh)來(lái)實(shí)現(xiàn)將遠(yuǎn)程機(jī)器的內(nèi)容拷貝到本地機(jī)器。當(dāng)SRC地址路徑包含單個(gè)冒號(hào)":"分隔符時(shí)啟動(dòng)該模式。
4)從遠(yuǎn)程rsync服務(wù)器中拷貝文件到本地機(jī)。當(dāng)SRC路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。
5)從本地機(jī)器拷貝文件到遠(yuǎn)程rsync服務(wù)器中。當(dāng)DST路徑信息包含"::"分隔符時(shí)啟動(dòng)該模式。
6)列遠(yuǎn)程機(jī)的文件列表。這類(lèi)似于rsync傳輸,不過(guò)只要在命令中省略掉本地機(jī)信息即可。
主服務(wù)器
IP 192.168.0.100
備份服務(wù)器
IP 192.168.0.101
實(shí)戰(zhàn):
1、http://rsync.samba.org/ 下載cwRsync客戶端(cwRsync)和服務(wù)器端(cwRsyncServer)。
2、服務(wù)器端安裝:采用默認(rèn)選項(xiàng)安裝。
安裝后,服務(wù)默認(rèn)為手動(dòng)啟動(dòng)模式,到“管理工具/服務(wù)管理”里,啟動(dòng)“RsyncServer”服務(wù),并修改“RsyncServer”為自動(dòng)啟動(dòng)模式。
1、http://rsync.samba.org/ 下載cwRsync客戶端(cwRsync)和服務(wù)器端(cwRsyncServer)。
安裝的過(guò)程很簡(jiǎn)單,也很順利,從 cwRsync 網(wǎng)站上下載的 server and client ,都安裝了一下,不過(guò)后來(lái)發(fā)現(xiàn),其實(shí)是不需要安裝 client 的,只要 server 就可以了,server 包括了 client 的功能。安裝完 server 后,會(huì)在 service 中增加 Rsync 和 ssh 服務(wù)。
服務(wù)器端安裝:采用默認(rèn)選項(xiàng)安裝。
安裝后,服務(wù)默認(rèn)為手動(dòng)啟動(dòng)模式,到“管理工具/服務(wù)管理”里,啟動(dòng)“RsyncServer”服務(wù),并修改“RsyncServer”為自動(dòng)啟動(dòng)模式
2、配置主服務(wù)器
配置了一下 rsyncd.conf
use chroot = false
strict modes = false
hosts allow = *
log file = rsyncd.log
pid file = rsyncd.pid
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[test]
path = /cygdrive/c/work
read only = false
transfer logging = yes
只是將 [test] 中的 path 改成了我本機(jī)的備份目錄
[www]
path = /cygdrive/F/data/www
read only = false
transfer logging = yes
3、備分服務(wù)器數(shù)據(jù)同步
因?yàn)橹皇亲詈?jiǎn)單的數(shù)據(jù)同步,所以就不使用 ssh 了,直接啟動(dòng) rsync 服務(wù)就可以了。然后按照 usage 上面教的。
rsync -av /cygdrive/F/data/www 192.168.0.100::www
完成了數(shù)據(jù)的同步工作,一切順利。順便說(shuō)一下,/cygdrive/d 是安裝完 cwRsync ,會(huì)自動(dòng)將系統(tǒng)上所有的盤(pán) mount 成 /cygdrive/x ,x 表示盤(pán)符,小寫(xiě)的,并把安裝目錄 mount 成 / 了。
這樣我們實(shí)現(xiàn)了從主服務(wù)器到備分服務(wù)器的數(shù)據(jù)同步
下一步我們結(jié)合windows的任務(wù)調(diào)度來(lái)實(shí)現(xiàn)這個(gè)批處理文件,取名為XXX.cmd
rsync -avr --ignore-errors --force 192.168.0.100::www /cygdrive/F/data/wwwroot
test.bat
---------------------------------------------------------------------------------------------
@echo off set path=%path%;C:\Program Files\cwRsyncServer\bin; date /t >> F:\syn.txt time /t >> F:\syn.txt rsync -avr --ignore-errors --force --exclude="/tmp/" --delete 192.168.0.103::test /cygdrive/F/temp >> F:\syn.txt date /t >> F:\syn.txt time /t >> F:\syn.txt echo . echo . echo . remote synchronous over echo . echo .
rem pause
---------------------------------------------------------------------------------------------
linux中安全性說(shuō)明
一:服務(wù)端rsyncd.conf文件配置
uid = nobody
gid = nobody
use chroot = no # 不使用chroot
max connections = 4 # 最大連接數(shù)為4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log # 日志記錄文件
[inburst] # 這里是認(rèn)證的模塊名,在client端需要指定
path = /home/inburst/python/ # 需要做鏡像的目錄
comment = BACKUP CLIENT IS SOLARIS 8 E250
ignore errors # 可以忽略一些無(wú)關(guān)的IO錯(cuò)誤
read only = yes # 只讀
list = no # 不允許列文件
hosts allow=172.25.43.57 #允許連接IP
auth users = inburst # 認(rèn)證的用戶名,如果沒(méi)有這行,則表明是匿名
secrets file = /etc/inburst.pas # 認(rèn)證文件名
注:
為安全考慮,在設(shè)置服務(wù)端rsyncd.conf模塊時(shí),最好加上auth users = inburst,secrets file = /etc/inburst.pas,密碼寫(xiě)到一個(gè)文件中inburst.pas。
執(zhí)行命令時(shí):rsync -avrp /test/ [email=inburst@172.25.43.158::test]inburst@172.25.43.158::test[/email] --password-file=inburst.pas。
二:客戶端腳本
rsync -avrp /test/ [email=administrator@172.25.43.58::test]administrator@172.25.43.58::test[/email] --password-file=1234567
(表示將客戶端test目錄下文件備份到服務(wù)器test模塊下。如果將/test/放后面,表示將服務(wù)器test模塊下目錄備份帶客戶端/test/下。)
選項(xiàng)說(shuō)明:
-v, --verbose 詳細(xì)模式輸出
-q, --quiet 精簡(jiǎn)輸出模式
-c, --checksum 打開(kāi)校驗(yàn)開(kāi)關(guān),強(qiáng)制對(duì)文件傳輸進(jìn)行校驗(yàn)
-a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD
-r, --recursive 對(duì)子目錄以遞歸模式處理
-R, --relative 使用相對(duì)路徑信息
其他參數(shù)可以查看rsync相關(guān)手冊(cè)。
本文的討論也很精彩,瀏覽討論>>
JavaEye推薦