天天看點

采用 rsync 實作遠端備份

使用 rsync (全自動網絡備份法)

一. 簡介

rsync 本來是用以取代 rcp 的一個工具, 它目前是由 rsync.samba.org 維護.

rsync 使用所謂的 "rsync 算法", 提供一個非常快速的檔案傳輸方法, 使 local 和遠端二部主機之間的檔案達到同步, 它主要是傳送二個檔案的異動部份, 而非每次都整份傳送, 是以速度相當地快.

由于 rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式, 是以許多人拿 rsync 當做一個優異的備份工具來使用. (拿來 update ISO 檔也很好用)

本文将簡單介 紹運用 rsync 備份網絡主機檔案的基本方法, 供各位夥伴參考.

rsync 有 6 種不同的用法, 如 local 拷貝備份, local 檔案藉由 rsh/ssh 傳送至遠方主機.... 在此我們主要介紹 rsync 的 daemon 模式.

首先, 先給個簡單的定義: 如果一台主機跑 rsync daemon 模式, 我們就稱這台機器為一 rsync Server, 或者說這台主機是一台備份主機( Backup Server).

備份主機會開 啟一個 873 的服務信道(port), 等待對方 rsync 連接配接.

連接配接時, rsync Server 會檢查密碼是否相符, 若通過密碼查核, 則開始進行檔案傳輸.

第一次連通 完成時 , 會把整份檔案傳輸一次 , 下一次就隻傳送二個檔案之間異動的部份 .

藉由上述方法, 我們可以設立多部備份主機, 使網絡主機上重要的檔案能分散至數部主機中, 以分散風險.

一旦完成備份, 我們可以對這些備份主機再做進一步的儲存動作, 如使用 tar 或 Ghost , 把檔案備份到更穩固,更能長久儲存的裝置上, 如 MO 或 燒錄裝置.

以上, 便是整個運作的想法, 底下, 我們來加以實作.

二. 安裝法

rsync 目前最新版是 2.5.5, 可以到 rsync.samba.org 下載下傳 .

安裝 rsync 十分簡單, 以下這道指令即可搞定:

./configure && make && make install

若您使用 rpm 套件, 隻要下 rpm -ivh rsync*.rpm 即可

它的設定檔案 位置在 /etc/rsyncd.conf

其實 RedHat / Mandrake 等 Linux 套件, 預設值都已幫各位安裝好 rsync 了.

三. 設定 rsync server: (假設這台主機名稱為 192.168.0.2)

rsync server 端要設定以下四項:

  1. 規劃建立備份目錄區
  2. 設定: /etc/xinetd.d/rsync
  3. 設定: /etc/rsyncd.conf
  4. 設定: 密碼檔案

依次說明如下:

1. 規劃建立備份目錄區:

建議您準備一 個容量較大且獨立的分割區, 并在其中開好備份目錄, 如此 /bk/server

2. 設定 /etc/xinetd.d/rsync, 簡單模闆如下:

#       
allows crc checksumming etc.
      
        
disable = no
      
        
socket_type     
= stream
      
        
wait            
= no
      
        
user            
= root
      
        
server          
= /usr/bin/rsync
      
        
server_args     
= --daemon
      
        
log_on_failure  
+= USERID
      

然後下 service xinetd restart, 使上述設定生效.

上述, 主要是要打開 rsync 這個 daemon, 一旦有 rsync client 要連接配接時, xinetd 會把它轉介給 rsyncd (跑 port 873).

3. 設定 /etc/rsyncd.conf :

以下區塊, 代表開放給某一台 rsync client 主機的設定, 簡單模闆如下:

.

以下模闆, 代表二個主機 web備份伺服器 及 tomcat備份伺服器 欲備份進來:

    
auth users = dev
      
    
uid = root
      
    
gid = root
      
    
secrets file = /etc/rsyncd.secrets
      
    
read only = no
      
    
[tomcat]
      
    
comment = tranlate tomcat from 158
      
    
auth users = dev
      
    
uid = root
      
   
 
gid = root
      
    
secrets file = /etc/rsyncd.secrets
      

比較重要的解 釋:

[www] 代表欲備份的子產品

comment代表欲備份的主機代号, 名稱可自訂.

path 用來設定備份檔案要存放在那一個目錄? 請先用 mkdir 開設好, 名稱可自訂.

auth users 代表授權的帳号, 名稱可自訂.

secrets file 代表儲存帳号密碼的密碼檔案, 其放置的路徑檔案名.

當然, 這台備份主機, 可以容納許多 rsync client 連接配接, 隻要在 rsyncd.conf 中設妥對應的區塊即可

      

4. 設定密碼檔案:

rsyncd.secrets 的内容很簡單, 格式為 帳号:密碼

如以下例子:

dev:123456

注意! 上述設定隻是一個範例, 請務必自訂一組, 千萬不要直接套用.

接下來, 要将 rsyncd.secrets 這個密碼檔案的檔案屬性設為 root 擁有, 且權限要設為 600, 否則無法備份成功!

是以, 請下:

  • chown root.root rsyncd.secrets
  • chmod 600 rsyncd.secrets

至此, rsync server 這端已設定完成, 若欲檢視備份記錄, 可參考 /var/log/rsyncd.log 這個檔案.

接下來是 client 端(即欲備份的網絡主機) 的設定.

四. 設定 rsync client (假設這台主機 IP 為 : 192.168.0.3)

步驟:

  1. 設定密碼檔案
  2. 測試 rsync 執行指令
  3. 将 rsync 指令放入工作排程 (crontab)

另外, 假設 192.168.0.2 這台主機是網絡主機, 今打算把 /usr/local/apache 這個目錄加以備份至 backup server 192.168.0.3),

1. 假設把密碼檔案放在 /root/rsyncd.secrets, 内容隻要含有密碼一行即可:

123456

注意: rsyncd.secrets 的權限屬性必須設為 600

2. 測試指令是否可以成功?

/usr/bin/rsync –vzrtopg --password-file=/root/rsyncd.secrets r[email protected]::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT

若出現傳輸目 錄檔案的畫面, 即表示測試成功.

3. 置入工作排程, 假設每天淩晨 5 點開始備份:

crontab -u root -e

0 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets r[email protected]::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT

若您有其它目 錄(如 /www)要備份, 則如法泡制:

20 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets [email protected]::www /usr/local/apache2/htdocs/www

若您覺得備份 一台 Backup Server 不夠, 可再按上述方法, 自行增加任意多台 Backup Server, 以分散風險!

像這樣把備份 的工作全部自動化, 真是輕松愉快, 大大地減低備份工作煩人的壓力!!

五. 安全性:

建議使用 ipchains 或 iptables 指令, 來限制 rsync client 的聯機範圍, 例子如下:

ipchains -A input -p tcp -s ! 192.168.0.3 --dport 873 -j DENY

iptables -A INPUT -p tcp -s ! 192.168.0.3 --dport 873 -j DROP

如此, 隻有 192.168.0.3 這個 client IP 能連入這台 rsync server.

ipchains 及 iptables 的用法, 可參考CU裡的教程。

PS:另外 rsync 可以結合 ssh 或 ssh2, 使安全性更加提高. 詳情請自行查閱 rsync / ssh / ssh2 的 manpage.

具體步驟如 下:

在 A上生成隐藏檔案夾/root/.ssh ,在裡面生成密鑰對

]#cd /root/.ssh

]#ssh-keygen -d

Generating public/private dsa key pair.

Enter file in which to save the key (/root/.ssh/id_dsa):

Enter passphrase (empty for no passphrase): <-- 此處不打passphrase..下次才不會詢問password

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_dsa.

Your public key has been saved in /root/.ssh/id_dsa.pub.

The key fingerprint is:

11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66 [email protected]

]#

2. 在/root/.ssh内已經生成id_dsa與id_dsa.pub(分别為私鑰和公鑰)

]#scp id_dsa.pub B的IP:/root/.ssh/authorized_keys

B伺服器要求輸入登入密碼驗證身份,成功後在B server的/root/.ssh目錄裡面生成authorized_keys(公鑰)

測試:在A上輸入 ssh B的IP A可以無需密碼驗證就登入進B(不過這樣的安全性很差)

然後的備份就簡單了:

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

  #!/bin/bash

/usr/bin/rsync - vzrtopg -e ssh --progress --delete  192.168.0.2 :/usr/local/tomcat-5.0.28/webapps/ROOT/  /usr/local/tomcat-5.0.28/webapps/ROOT/

六. 參考檔案:

rsync 的一些備份妙法, 請參考: http://rsync.samba.org/examples.html

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傳輸,不過隻要在指令中省略掉本地機資訊即可。

rsync 的教學檔案: A Tutorial on Using rsync

rsync 的 FAQ (具 體看 man rsync )

七. 在我配置的過程出現的一些錯誤,和大家分享一下

1.

@ERROR: auth failed on module xxxxx

A: 這是因為密碼設錯了, 無法登入成功, 請再檢查一下 rsyncd.secrets 中的密碼設定, 二端是否一緻?

2.

password file must not be other-accessible

continuing without password file

Password:

A: 這表示 rsyncd.secrets 的檔案權限屬性不對, 應設為 600

請下 chmod 600 rsyncd.secrets

3.

@ERROR: chroot failed

rsync: connection unexpectedly closed (75 bytes read so far)

      
rsync error: error in rsync protocol data stream (code 12) at io.c(150)

      

A: 這通常是您的 rsyncd.conf 中

的 path 路徑所設的那個目錄并不存在所緻.

請先用 mkdir 開設好備份目錄.

4. Q: 出現以下這個訊息 , 是怎麼一回事 ?

rsync: failed to connect to 61.140.243.160: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(94)

A:這通常是你的防火牆問題

/etc/init.d/iptables stop 然後在試試看看

随後記得設定你的iptables 然後把防火牆打開