posts - 23, comments - 0, trackbacks - 0, articles - 3
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          作者: 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可以搭配rshssh甚至使用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ú)論是LinuxSolaris還是BSD上都經(jīng)過(guò)了良好的測(cè)試。此外,它在windows平臺(tái)下也有相應(yīng)的版本,比較知名的有cwRsyncSync2NAS

           

            Rsync的基本特點(diǎn)如下:

           

            1.可以鏡像保存整個(gè)目錄樹(shù)和文件系統(tǒng);

           

            2.可以很容易做到保持原來(lái)文件的權(quán)限、時(shí)間、軟硬鏈接等;

           

            3.無(wú)須特殊權(quán)限即可安裝;

           

            4.優(yōu)化的流程,文件傳輸效率高;

           

            5.可以使用rcpssh等方式來(lái)傳輸文件,當(dāng)然也可以通過(guò)直接的socket連接;

           

          6.支持匿名傳輸。

           

           

           

          1.2 核心算法

           

            假定在名為αβ的兩臺(tái)計(jì)算機(jī)之間同步相似的文件AB,其中α對(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)SRCDES路徑信息都不包含有單個(gè)冒號(hào)":"分隔符時(shí)就啟動(dòng)這種工作模式。

           

            2)使用一個(gè)遠(yuǎn)程shell程序(rshssh)來(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程序(rshssh)來(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

          F:/data/www

          備份服務(wù)器

          IP 192.168.0.101

          F:/data/www

          實(shí)戰(zhàn):

          1http://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)模式。

           

          1http://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 = inburstsecrets 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推薦




          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 兰溪市| 灵山县| 南投县| 荥经县| 逊克县| 新宾| 江安县| 赣榆县| 金堂县| 垣曲县| 玉溪市| 融水| 怀来县| 上虞市| 四平市| 罗城| 炉霍县| 鄂州市| 营口市| 图们市| 灵丘县| 阿勒泰市| 长葛市| 黑河市| 凤台县| 阿拉善左旗| 若尔盖县| 邻水| 天津市| 麻城市| 水富县| 仙居县| 洛扎县| 丰镇市| 青神县| 石景山区| 乾安县| 济南市| 肥城市| 宿迁市| 乐业县|