被發展用來取代rcp
差異性快速遠端同步備份工具—rsync

2009-10-26
備份規劃是資訊系統建置中相當重要的一環,往往也是資訊人員最不敢掉以輕心的工作。從事資訊人員的朋友都深知,備份是一件令人又愛又恨的作業項目。愛的是只要規劃得宜,就可以高枕無憂,輕輕鬆鬆完成備份;恨的是規劃不當,三天兩頭頻出狀況,令人頭痛萬分!
本文所介紹的rsync,是一個非常好用的備份工具,其簡便的操作加上強大的功能,廣受喜愛與採用。最重要的是它是免費的開放源工具!相信可以成為讀者在挑選備份工具的選擇之一。

關於rsync

rsync採用GPL授權,是「www.samba.org」下的專案之一,目前由Wayne Davison維護。它原本是被發展來取代rcp的一個工具,採用所謂的「rsync演算法」,提供檔案在本地端或遠端電腦間快速同步的功能,而且只傳送異動的部分,而非整份都傳送。如此可以提升檔案同步的效率,進而達到快速同步遠端檔案的目的。  

因為rsync具備了差異性快速遠端同步的特性,並可完整保存所有的檔案資訊、目錄結構、檔案權限等資訊,更支援匿名同步功能和多種傳輸方式(rsh、ssh、socket),所以rsync常被採用做為備份(backup)或鏡像(mirror)的工具。 除此之外,rsync的安裝相當簡便,不需要特定權限即可安裝,且支援多種作業系統,這讓rsync更容易部署至各種備份計畫之中。  

部署架構  

rsync採用主從式架構,在應用上可分為PUSH和PULL兩種主要模式,以因應不同的環境因素,進而達到部署的目的。  

PULL模式  

在同一網段的環境下,由備份主機向伺服器進行同步並將資料備份過來以完成備份工作。這種模式是最普遍被採用的部署方式。

如上頁圖示,由備份主機啟動備份工作,向被備份端要求備份。可將備份時的負載大部分由備份主機承受。當然,PULL模式也支援跨網段或遠端進行同步備份工作,如下圖。

PUSH模式

PUSH模式的執行方式剛好與PULL模式恰恰相反。如下圖所示,在同一網段的環境下,由伺服器主動發出同步要求並將資料同步至備份主機上,以完成備份的工作。

在實務上,這種模式通常被採用於較特殊的環境下,例如伺服器被部署在防火牆內且無法由外部連入,因此必須改由伺服器主動將資料送至備份主機上。(如下圖)

這並不表示PUSH模式只能用在特定情況下,只是在一般的情況下使用PULL模式會比PUSH模式來得有效率,且較不影響伺服器的執行效能。

實際操作

在認識rsync的基本部署概念後,接著不妨來實際演練一下,讓讀者有更深刻的體會。

本篇文章採用典型的PULL模式做為示範部署架構。因此,需要在伺服器上安裝並設定rsync的daemon(server),而備份主機上則只須安裝及設定rsync的client即可。詳述如下:
● 檔案傳輸伺服器(被備份對象)
● 備份主機(執行備份者)
● 作業系統均為GNU Debian/Linux 5
● 在同一網路區段下(192.168.20/24)

安裝rsync

rsync的安裝方法在不同的作業系統上略有差異,但其使用方式卻無二致,故在此略過不同版本的安裝說明,請讀者自行參考所使用系統的套件管理方式來進行安裝。

由於Debian的套件管理系統相當方便、易用,且會自動處理套件的相依性,因此只須執行下列指令即可完成rsync的安裝。

# apt-get install rsync

設定rsync

關於rsync的設定,以下分成「伺服器」和「備份主機」兩部分來加以說明。

伺服器

安裝完成rsync之後,編輯「/etc/rsyncd.conf」並修改對應設定。基本上,需要注意的是自行定義的部分,可以參考下述設定內容並改成符合自身需求的設定值。修改之後,再存檔離開。

# sample rsyncd.conf con_guration _le # GLOBAL OPTIONS
#motd _le=/etc/motd #log _le=/var/log/rsyncd
# for pid _le, do not use /var/run/rsync.pid if # you are going to run rsync out of the init.d script.
pid _le=/var/run/rsyncd.pid #syslog facility=daemon
#socket options= # MODULE OPTIONS
[ftp] comment = FTP archive
path = /home/ftp use chroot = no
# max connections=2 lock _le = /var/lock/rsyncd
# the default for read only is yes... read only = yes
list = yes # uid = nobody
# gid = nogroup uid = root
gid = root # exclude =
# exclude from = # include =
# include from = # auth users = backup
# secrets _le = /etc/rsyncd.secrets strict modes = yes
# hosts allow = # hosts deny =
ignore errors = no ignore nonreadable = yes
transfer logging = no # log format = timeout = 600
refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso
*.bz2 *.tbz

請注意!rsync預設為允許匿名登入進行同步。如果要取消匿名登入的話,可以設定下述項目並指定使用者及其密碼。

auth users = backup
secrets _le = /etc/rsyncd.secrets

並在「/etc」目錄內建立rsyncd.secrets檔案,其格式如下:
account:password

完成以上的動作之後,執行「/etc/init.d/rsyncd start」啟動rsyncd即可。若有變更任何設定,則執行「/etc/init.d/rsyncd restart」指令重新啟動rsyncd。

備份主機

在備份主機上完成rsync安裝後,要做的動作就很簡單了!只需要在系統中加入cron job,指定時間執行備份指令即可。

30 0,12 * * * rsync -avHS --delete user@192.168.
20.2::ftp srv/storage 2>&1 > /dev/null/

相關參數如下:
-a:歸檔模式,相當於-rlptgoD(但不含-H、-A、-X)
-v:顯示執行紀錄
-H:保留檔案的連結(hard link)
-S:採用有效率方式處理較鬆散的檔案 -delete:從備份目的資料夾中刪除多餘或已不存在的檔案

詳細參數請參考rsync的man page,或直接在網路上查詢即可獲得詳盡的說明,限於篇幅,本文不再贅述。

進階使用

如果讀者所採用的伺服器具備sshd的服務,則可以用更簡單的方式來完成備份工作。

由於rsync本身支援rsh、ssh和socket等方式進行連線,因此只要在伺服器上提供ssh連線服務(通常是UNIX-like作業系統),便不需要安裝rsync daemon,直接透過ssh連線和現有使用者帳號(另外建立給備份專用的帳號當然會更好),即可完成備份設定。

首先,在備份主機上產生一組認證金鑰,當作伺服器上使用者認證之用。

# cd /.ssh
# ssh-keygen -t rsa -b 2048

這樣一來,會在使用者家目錄下的ssh資料夾中產生一個id rsa.pub的認證金鑰。

然後,將該金鑰檔案傳送至伺服器上的使用者帳號目錄下的「.ssh」資料夾中,並更名為「authorized keys2」。請確認其存取權限為該使用者可讀、可寫,或者執行下述指令來設定檔案存取權限。

# chmod 600 /.ssh/authorized keys2

這樣就完成了使用者免密碼登入的特殊設定。然後,同樣地再到備份主機上加入cron job,並加入下列命令:

30 0,12 * * * rsync -avHS --delete --rsh="ssh -l user"
 192.168.20.2:home/ftp /srv/storage 2>&1 > /dev/null/

如此便完成透過ssh連線進行同步備份的設定。這樣是否更為簡單、方便呢?

結語

rsync的兩種主要部署模式孰優孰劣,不能一概而論,主要還是要看有沒有符合部署的條件或需求而已。而這個輕巧、容易上手的開放源碼工具,雖然提供的部署模式看起來很簡單,但只要稍加規劃、運用,其實就可以很輕鬆地做出二代、甚至是三代的本地備份或是異地備份的架構。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!