posts - 23, comments - 0, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          其于window系統的Rsync同步實戰

          Posted on 2008-08-18 17:04 beauty9235 閱讀(470) 評論(0)  編輯  收藏

          作者: beauty9235  鏈接:http://beauty9235.javaeye.com/blog/229634  發表時間: 2008年06月23日

          聲明:本文系JavaEye網站發布的原創博客文章,未經作者書面許可,嚴禁任何網站轉載本文,否則必將追究法律責任!

           

          其于window系統的同步實戰

          1. 遠程數據同步工具Rsync介紹

          1.1 軟件簡介

           

          Rsync是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。Rsync本來是用以取代rcp的一個工具,它當前由 rsync.samba.org維護。Rsync使用所謂的“Rsync演算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。運行Rsync server的機器也叫backup server,一個Rsync server可同時備份多個client的數據;也可以多個Rsync server備份一個client的數據。

           

            Rsync可以搭配rshssh甚至使用daemon模式。Rsync server會打開一個873的服務通道(port),等待對方Rsync連接。連接時,Rsync server會檢查口令是否相符,若通過口令查核,則可以開始進行文件傳輸。第一次連通完成時,會把整份文件傳輸一次,下一次就只傳送二個文件之間不同的部份。

           

            Rsync支持大多數的類Unix系統,無論是LinuxSolaris還是BSD上都經過了良好的測試。此外,它在windows平臺下也有相應的版本,比較知名的有cwRsyncSync2NAS

           

            Rsync的基本特點如下:

           

            1.可以鏡像保存整個目錄樹和文件系統;

           

            2.可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;

           

            3.無須特殊權限即可安裝;

           

            4.優化的流程,文件傳輸效率高;

           

            5.可以使用rcpssh等方式來傳輸文件,當然也可以通過直接的socket連接;

           

          6.支持匿名傳輸。

           

           

           

          1.2 核心算法

           

            假定在名為αβ的兩臺計算機之間同步相似的文件AB,其中α對文件A擁有訪問權,β對文件B擁有訪問權。并且假定主機αβ之間的網絡帶寬很小。那么rsync算法將通過下面的五個步驟來完成:

           

            1.β將文件B分割成一組不重疊的固定大小為S字節的數據塊。最后一塊可能會比S 小。

           

            2.β對每一個分割好的數據塊執行兩種校驗:一種是32位的滾動弱校驗,另一種是128位的MD4強校驗。

           

            3.β將這些校驗結果發給α

           

            4.α通過搜索文件A的所有大小為S的數據塊(偏移量可以任選,不一定非要是S的倍數),來尋找與文件B的某一塊有著相同的弱校驗碼和強校驗碼的數據塊。這項工作可以借助滾動校驗的特性很快完成。

           

            5.α發給β一串指令來生成文件Aβ上的備份。這里的每一條指令要么是對文件B經擁有某一個數據塊而不須重傳的證明,要么是一個數據塊,這個數據塊肯定是沒有與文件B的任何一個數據塊匹配上的。

           

           

           

          1.3 命令語法

           

           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]

           

            對應于以上六種命令格式,rsync有六種不同的工作模式:

           

            1)拷貝本地文件。當SRCDES路徑信息都不包含有單個冒號":"分隔符時就啟動這種工作模式。

           

            2)使用一個遠程shell程序(rshssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號":"分隔符時啟動該模式。

           

            3)使用一個遠程shell程序(rshssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號":"分隔符時啟動該模式。

           

            4)從遠程rsync服務器中拷貝文件到本地機。當SRC路徑信息包含"::"分隔符時啟動該模式。

           

            5)從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啟動該模式。

           

            6)列遠程機的文件列表。這類似于rsync傳輸,不過只要在命令中省略掉本地機信息即可。

           

          主服務器

          IP 192.168.0.100

          F:/data/www

          備份服務器

          IP 192.168.0.101

          F:/data/www

          實戰:

          1http://rsync.samba.org/ 下載cwRsync客戶端(cwRsync)和服務器端(cwRsyncServer)。

           

          2、服務器端安裝:采用默認選項安裝。

          安裝后,服務默認為手動啟動模式,到“管理工具/服務管理”里,啟動“RsyncServer”服務,并修改“RsyncServer”為自動啟動模式。

           

          1http://rsync.samba.org/ 下載cwRsync客戶端(cwRsync)和服務器端(cwRsyncServer)。

           

          安裝的過程很簡單,也很順利,從 cwRsync 網站上下載的 server and client ,都安裝了一下,不過后來發現,其實是不需要安裝 client 的,只要 server 就可以了,server 包括了 client 的功能。安裝完 server 后,會在 service 中增加 Rsync ssh 服務。

           

          服務器端安裝:采用默認選項安裝。

           

          安裝后,服務默認為手動啟動模式,到“管理工具/服務管理”里,啟動“RsyncServer”服務,并修改“RsyncServer”為自動啟動模式

           

          2、配置主服務器

          配置了一下 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 改成了我本機的備份目錄

           

          [www]

          path = /cygdrive/F/data/www

          read only = false

          transfer logging = yes

           

          3、備分服務器數據同步

           

          因為只是最簡單的數據同步,所以就不使用 ssh 了,直接啟動 rsync 服務就可以了。然后按照 usage 上面教的。

           

          rsync -av /cygdrive/F/data/www 192.168.0.100::www

           

          完成了數據的同步工作,一切順利。順便說一下,/cygdrive/d 是安裝完 cwRsync ,會自動將系統上所有的盤 mount /cygdrive/x x 表示盤符,小寫的,并把安裝目錄 mount / 了。

          這樣我們實現了從主服務器到備分服務器的數據同步

           

          下一步我們結合windows的任務調度來實現這個批處理文件,取名為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中安全性說明

           

          一:服務端rsyncd.conf文件配置

          uid = nobody

          gid = nobody

          use chroot = no # 不使用chroot

          max connections = 4 # 最大連接數為4

          pid file = /var/run/rsyncd.pid

          lock file = /var/run/rsync.lock

          log file = /var/log/rsyncd.log # 日志記錄文件

          [inburst] # 這里是認證的模塊名,在client端需要指定

          path = /home/inburst/python/ # 需要做鏡像的目錄

          comment = BACKUP CLIENT IS SOLARIS 8 E250

          ignore errors # 可以忽略一些無關的IO錯誤

          read only = yes # 只讀

          list = no # 不允許列文件

          hosts allow=172.25.43.57 #允許連接IP

          auth users = inburst # 認證的用戶名,如果沒有這行,則表明是匿名

          secrets file = /etc/inburst.pas # 認證文件名

           

          注:

          為安全考慮,在設置服務端rsyncd.conf模塊時,最好加上auth users = inburstsecrets file = /etc/inburst.pas,密碼寫到一個文件中inburst.pas

          執行命令時: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目錄下文件備份到服務器test模塊下。如果將/test/放后面,表示將服務器test模塊下目錄備份帶客戶端/test/下。)

          選項說明:

          -v, --verbose 詳細模式輸出

          -q, --quiet 精簡輸出模式

          -c, --checksum 打開校驗開關,強制對文件傳輸進行校驗

          -a, --archive 歸檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬性,等于-rlptgoD

          -r, --recursive 對子目錄以遞歸模式處理

          -R, --relative 使用相對路徑信息

          其他參數可以查看rsync相關手冊。

           

           


          本文的討論也很精彩,瀏覽討論>>


          JavaEye推薦




          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 开原市| 双桥区| 正镶白旗| 龙泉市| 隆尧县| 罗甸县| 新和县| 鄢陵县| 肥城市| 九寨沟县| 雅安市| 双流县| 陆河县| 永州市| 会同县| 五华县| 新建县| 衢州市| 沽源县| 武胜县| 尼木县| 寿宁县| 崇信县| 汝城县| 抚远县| 通渭县| 阜南县| 江北区| 顺平县| 南城县| 南江县| 精河县| 同江市| 许昌县| 岑溪市| 乐都县| 亚东县| 万山特区| 双桥区| 蓬溪县| 成都市|