天天看點

LINUX同步軟體rsync原理

Linux系統下如何使用rsync進行資料同步 釋出時間:2008.01.30 06:33     來源:賽迪網    作者:sixth首先安裝Rsync,比如在Redhat Fedora Linux上或者RHEL AS3上: rpm -ivh rsync-2.5.7-5.3E.i386.rpm 安裝完成。 rsync用戶端和伺服器端都是同一個執行檔案,隻不過加的參數不一樣。 例如,伺服器A是192.168.0.100,伺服器B是192.168.0.101,例如将101上的/www/downloads/new目錄下的檔案同步到192.168.0.100的/www/download目錄下,則100上運作rsync作為伺服器端,101做為用戶端。 首先把192.168.0.100伺服器端的配置檔案建立起來。 vi /etc/rsyncd.conf 内容如下: uid = nobody gid = nobody use chroot = yes max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [downloads] path = /www/downloads/ ignore errors read only = false list = false hosts allow = 192.168.0.101/24 hosts deny = 0.0.0.0/32 auth users = backup secrets file = /etc/rsyncd.pwd 找個配置檔案中,uid和gid指明了運作身份,chroot表示連接配接後自動切換目錄,read only=false是允許别的用戶端向本機的伺服器端上傳。host allow和deny是限制連接配接位址。auth user是認證使用者名,secrets file = /etc/rsyncd.pwd是表示認證使用者名的時候到這裡讀取密碼。 接下來編輯密碼檔案: vi /etc/rsyncd.pwd backup:123456 設定密碼檔案權限700:(權限不對會登陸不上) chmod 700 /etc/rsyncd.pwd 然後啟動rsync服務: /usr/bin/rsync --daemon 把rsync加入自動啟動腳本,開機後自動啟動: echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local 注意一下iptables必須允許rsync的873端口被連接配接。 現在到192.168.0.101的用戶端上,指令格式如下: rsync [-參數] 源位址路徑 目标位址路徑 例如将101上的/www/downloads/new目錄下的檔案同步到192.168.0.100的/www/downloads目錄中。 則建立執行腳本: vi /root/rsync.sh rsync -vrtL --progress \ /www/downloads/new/* \ [email protected]::downloads \ --password-file=/root/rsync.pwd -v參數表示顯示輸出結果,r表示保持屬性,t表示保持時間,L表示軟link視作普通檔案。 建立用戶端的密碼檔案: vi /root/rsync.pwd 123456 注意:用戶端的密碼腳本不帶使用者名。 設定密碼檔案權限700:(權限不對會登陸不上) chmod /root/rsync.pwd 将用戶端腳本加入定期任務: echo "00 3 * * * root /usr/prima/etc/rsync.sh" >> /etc/crontab 則每天淩晨3點運作同步。 現在可以直接運作 /root/rsync.sh 觀看效果。 簡單的rsync配置完成。

<b>Rsync簡介    rsync-2.6.8-1.el4.rf.i386.rpm</b>

rsync是一個遠端資料同步工具,可通過LAN/WAN快速同步多台主機間的檔案。 rsync 本來是用以取代 rcp 的一個工具, 它目前是由 rsync.samba.org 維護. rsync 使用所謂的 "rsync 演算法", 提供一個非常快速的檔案傳輸方法, 使 local 和遠端二部主機之間的檔案達到同步, 它主要是傳送二個檔案的不同部份, 而非每次都整份傳送, 是以速度相當地快. 運作rsync server的機器也就是backup server,1台rsync server可同時備份多個client的資料;也可以多個rsync備份1個client的資料。 rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式。 Rsync server會打開一個 873 的服務通道(port), 等待對方 rsync 連接配接. 連接配接時, rsync Server 會檢查密碼是否相符, 若通過密碼查核, 則開始進行檔案傳輸. 第一次連通完成時, 會把整份檔案傳輸一次, 下一次就隻傳送二個檔案之間不同的部份.

Rsync client可以是類unix主機也可以是windows主機(需配合Sync2NAS使用)。

基本特色1。可以鏡像儲存整個目錄樹和檔案系統。 2。可以很容易做到保持原來檔案的權限、時間、軟硬連結等等。 3。無須特殊權限即可安裝。 4。優化的流程,檔案傳輸效率高。 5。可以使用rcp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連接配接。 6。支援匿名傳輸。

rsync執行個體用法- -                                      

<a href="http://batc.bao.ac.cn/cgi-bin/leobbs/cgi-bin/topic.cgi?forum=2&amp;topic=7&amp;show=0" target="_blank">http://batc.bao.ac.cn/cgi-bin/leobbs/cgi-bin/topic.cgi?forum=2&amp;topic=7&amp;show=0</a>

vi /etc/xinetd.d/rsync

disable = yes

改成

disable = no

rsyncd.conf 是rsyncd的config檔案

vi /etc/rsyncd.conf

#uid = nobody

#gid = nobody

use chroot = yes

max connections = 4

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

      [compshop]

      path = /home/sites/compshop

      auth users = compshop

      uid = compshop

      gid = compshop

      secrets file = /etc/rsyncd.secrets

      read only = no

      [datafeed]

      path = /home/sites/datafeed

      auth users = datafeed

      uid = datafeed

      gid = datafeed

      [smtemplates]

      path = /home/sites/smtemplates

      auth users = smtemplates

      uid = smtemplates

      gid = smtemplates

      [smarterv2]

      path = /home/sites/smarterv2

      auth users = smarterv2

      uid = smarterv2

      gid = smarterv2

rsyncd.secrets是rsyncd的密碼檔案,裡面是寫使用者名和密碼,就是linux的使用者名和密碼

vi /etc/rsyncd.secrets

compshop:any

datafeed:any

smtemplates:any

smarterv2:any

以上是伺服器端的配置,開了這個服務以後,端口是873

以下是客服端的配置檔案,是在另外一台電腦上的。檔案名是可以自己改的。

vi /home/sites/sites_rsyncd

#!/bin/bash

rsync -tvzrp --progress --password-file=/home/sites/rsyncd.secrets --delete --exclude

chmod 744 /home/sites/sites_rsyncd

vi /home/sites/rsyncd.secrets

any

chmod 600 /home/sites/rsyncd.secrets

三、rsync指令的用法

  在配置完rsync伺服器後,就可以從用戶端發出rsync指令來實作各種同步的操

作。rsync有很

多功能選項,下面就對介紹一下常用的選項:

  rsync的指令格式可以為:

  1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

  2. rsync [OPTION]... [USER@]HOST:SRC DEST

  3. rsync [OPTION]... SRC [SRC]... DEST

  4. rsync [OPTION]... [USER@]HOST::SRC [DEST]

  5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

  6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

  rsync有六種不同的工作模式:

  1. 拷貝本地檔案;當SRC和DES路徑資訊都不包含有單個冒号":"分隔符時就啟動這

種工作模式。

  2.使用一個遠端shell程式(如rsh、ssh)來實作将本地機器的内容拷貝到遠端機器

。當DST

路徑位址包含單個冒号":"分隔符時啟動該模式。

  3.使用一個遠端shell程式(如rsh、ssh)來實作将遠端機器的内容拷貝到本地機器

。當SRC

位址路徑包含單個冒号":"分隔符時啟動該模式。

  4. 從遠端rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔符時啟動

該模式。

  5. 從本地機器拷貝檔案到遠端rsync伺服器中。當DST路徑資訊包含"::"分隔符時啟

動該模式。

  6. 列遠端機的檔案清單。這類似于rsync傳輸,不過隻要在指令中省略掉本地機信

息即可。

  下面以執行個體來說明:

  v詳細提示

  a以archive模式操作,複制目錄、符号連接配接

  z壓縮

  u隻進行更新,防止本地新檔案被重寫,注意兩者機器的時鐘的同時

  -progress指顯示

  以上指令是保持客戶機192.168.100.90上的/home/terry目錄和rsync伺服器上的terry目

錄同

步。該指令執行同步之前會要求你輸入terry賬号的密碼,這個賬号是我們前面

在rsyncd.secrets

檔案中定義的。如果想将這條指令寫到一個腳本中,然後定時執行它的話,可以使

用--password-file

選項,具體指令如下:

  # rsync -vazu -progress --password-file=/etc/rsync.secret

  要使用--password-file選項,就得先建立一個存放密碼的檔案,這裡指定

為/etc/rsync.secret。

其内容很簡單,如下:

  terry:12345

  同樣要修改檔案屬性如下:

  # chmod 600 /etc/rsyncd.secrets

  四、利用rsync保持Linux伺服器間的檔案同步執行個體

  現在假設有兩台Linux伺服器A(192.168.100.21)和B(192.168.100.90),伺服器A中的

/home/terry和伺服器B中的/home/terry這兩個目錄需要保持同步,也就是當伺服器A中文

件發生

改變後,伺服器B中的檔案也要對應去改變。

  我們按上面的方法,在伺服器A上安裝rsync,并将其配置為一台rsync伺服器,并

将/home/terry

目錄配置成rsync共享出的目錄。然後在伺服器B上安裝rsync,因為B隻做用戶端,是以

無需配置。

然後在伺服器B,建立以下腳本:

  #!/bin/bash

  /usr/loca/rsync/bin/rsync -vazu -progress    --delete

  将這個腳本儲存為AtoB.sh,并加上可執行屬性:

  # chmod 755 /root/AtoB.sh

  然後,通過crontab設定,讓這個腳本每30分鐘運作一次。執行指令:

  # crontab -e

  輸入以下一行:

  0,30 * * * *    /root/AtoB.sh

  儲存退出,這樣伺服器B每個小時的0分和30分時都會自動運作一

次AtoB.sh,AtoB.sh是負責

保持伺服器B和伺服器A同步的。這樣就保證了伺服器A的所有更新在30鐘後,伺服器B

也一樣取得了和伺服器A一樣的最新的資料。