LinuxTools---Rsync---原理及其應用(一)

rsync遠程同步

rsync(Remote Sync)是一個Unix/linux系統下的文件同步和傳輸工具。Rsync通過“rsync算法”提供了一個客戶機和遠程文件服務器的文件同步的快速方法。每次只傳送兩個文件的不同部分(即支持增量備份),而不是每次都整份傳送

rsync包括如下的一些特性:

能更新整個目錄樹和文件系統;
有選擇性的保持符號鏈鏈、硬鏈接、文件屬性、權限、設備以及時間等;

傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用。
能用rsh、ssh或直接端口做爲傳輸端口;
支持匿名rsync同步文件,是理想的鏡像工具;

Rsync可以通過rshssh使用,也能以daemon模式去運行,在以daemon方式運行時Rsync server會打開一個873端口,等待客戶端去連接。

Rsync的官方站點位於http://rsync.samba.org

rsync服務器架設比較簡單,可能我們安裝好rsync後,並沒有發現配置文件,以及rsync服務器啓動程序,因爲每個管理員可能對rsync用途不一樣,所以一般的發行版只是安裝好軟件就完事了,讓管理員來根據自己的用途和方向來自己架設rsync服務器;因爲這個rsync應用比較廣,能在同一臺主機進行備份工作,還能在不同主機之間進行工作。在不同主機之間的進行備份,是必須架設rsync服務器的。

在遠程同步任務中,負責發起rsync同步操作的客戶機稱爲發起端,而負責響應來自客機的rsync同步操作的服務器稱爲備份源。在下行同步(下載)中,備份源負責提供文檔的原始位置,發起端應對該位置具有讀取權限;在上行同步(上傳)中,備份源負責提供文檔的目標位置,發起端應對該位置具有寫入權限。如下圖所示:

wKioL1M3_vvDBc2CAAELsV0vb5w993.jpg

使用rsync同步工具時,備份源既可以是SSH服務器,也可以是以服務器模式運行的rsync程序,下面分別講解配置SSH備份源、rsync備份源的方法。

(本文以CentOSL6.5_x86_64系統中的rsync-3.0.6-9.el6_4.1.x86_64爲例)

wKiom1M3_2STdw7PAABdMdg7Iyc244.jpg

1.配置SSH備份源

使用SSH協議的好處是能夠基於更安全的遠程連接,增強備份的保密性。這種方式的備份源最容易配置,只要確認源文件夾的位置,並準備一個備份操作用戶即可,以服務A(備份源)爲例,若要將網站目錄/var/www/html作爲備份源,允許用戶rget做下行備份,用戶rput做上行備份,操作步驟如下:


在備份源服務器(IP地址爲:172.16.41.4)上新建備份用戶rgetrput,分別用來實現下載、上傳操作:

wKioL1M3_z-zCBu-AAFyqTw7MVQ528.jpg


確認sshd服務正常運行,且允許用戶rgetrput能訪問ssh服務器。在/etc/ssh/sshd_config文件中添如下配置項,只允許rgetrput能遠程登錄ssh服務器。並重啓sshd服務,確保修改生效。

wKiom1M3_2jBtff5AAAVBHtsSG4290.jpg


wKioL1M3_0KCyOGvAABbjJROngI852.jpg


調整備份源所提供文檔所在目錄的權限(如/var/www/html目錄),使rget用戶有權讀取、rput用戶有權寫入。在linux系統中,正常創建的目錄權限爲755,文件權限爲644,因此對於rget用戶來說,默認權限已經滿足下行備份的要求。

wKiom1M3_2uCOwODAAB-Dy3I0S8554.jpg


但是對於rput用戶來說,要能夠寫入纔有權限做上行備份,建議使用ACL訪問控制機制設置用戶rput/var/www/html的寫入權限。

wKiom1M3_26BqxBIAAHVcvbI9TU309.jpg

其中”-R”選項表示遞歸操作,”-m”選項表示修改權限,default表示在html/目錄新建的文檔用戶rput也具有rwx權限。當需要清除所設置的ACL屬性時,setfacl命令的-x-b選項,分別表示用來個別刪除和全部刪除。到此SSH備份源配置完畢。

有了備份源服務器以後,就可以使用rsync工具來執行遠程同步了。本文講解的備份操作均在客戶機(發起端,IP爲:172.16.41.3)執行。實際上備份源與發起端可以是同一臺主機,其效果相當於本地備份而不是異地備份。

rsync命令的基本用法:

格式:rsync【選項】 源文件 目標文件

常見的選項:

-a,--archive歸檔模式,表示以遞歸的方式傳輸文件,並且保持文件屬性,等同於-rlptgoD

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

-l,--links表示拷貝鏈接文件

-p , --perms表示保持文件原有權限

-t , --times表示保持文件原有時間

-g , --group表示保持文件原有屬用戶組

-o , --owner表示保持文件原有屬主

-D , --devices表示塊設備文件信息

-z , --compress表示壓縮傳輸

-H表示硬連接文件

-A保留ACL屬性信息

-P顯示傳輸進度

-u, --update僅僅進行更新,也就是跳過所有已經存在於目標位置,並且文件時間晚於要備份的文件。(不覆蓋更新的文件)

--port=PORT指定其他的rsync服務端口

--delete刪除那些目標位置有而原始位置沒有的文件

--password-file=FILEFILE中得到密碼
--bwlimit=KBPS
限制I/O帶寬,KBytes /second

--filter-文件名”需要過濾的文件

--exclude=:需要過濾的文件

-v顯示同步過程的詳細信息


rsync備份操作示例:

下行同步SSH備份源:

將服務器172.16.41.4中的/var/www/html文件夾與客戶機(172.16.41.3)本地的/wwwroot文件夾進行同步,保持文件權限和屬性、軟/硬鏈接、ACL屬性、刪除/wwwroot目錄中多餘的文件,並在傳輸過程中進行壓縮。


確保備份源服務器中/var/www/html目錄下有文件:

wKioL1M3_0jgCxJSAACLToFuN7c094.jpg


在客戶機本地創建目標目錄:

wKiom1M3_3CxBW4dAAAs0PjmcQM045.jpg


在客戶機上執行rsync命令實現下行同步。

wKioL1M3_0rjOl0hAAEwtauvvaQ093.jpg


驗證同步結果:

wKiom1M4ARDwaKO3AAB7xgJRjAY465.jpg


上行同步SSH備份源:

將客戶機中的/usr/share/doc/HTML/目錄中的內容上傳同步到SSH服務器的/var/www/html目錄下,由於備份用戶rput並非root用戶,因此”-g””-o”等選項將無法使用。

wKioL1M4AOrCAhXTAAGouuO_B_g810.jpg


驗證結果:在172.16.41.4主機上顯示/var/www/html目錄下的列表

wKiom1M4ARSyx5X2AACweDjFyGE428.jpg


編寫rsync備份腳本:

實際生產環境中的備份工作通常是按計劃重複執行的,例如每晚上2點30分對服務器網站目錄做一次下行同步,定期任務可以交給 crond服務來完成,而實際的備份操作則可以寫到shell腳本中。

由於計劃備份中的腳本在後臺執行,無法根據提示來輸入密碼,因此編寫rsync備份腳本時如何解決交互驗證的問題就成爲關鍵所在。

SSH備份源的無交互驗證:

對於SSH服務器來說,採用密鑰驗證是避免交互式登錄的最佳方法,只要在客戶機中創建無私鑰短語的密鑰對,然後將公鑰文件分發給服務器中的備份用戶,就可以實現無密碼自動登錄了。

在客戶機上創建密鑰對:

wKioL1M4A-PTVNZAAAJNWYCarYw341.jpg


將公鑰文件分發給服務器:

wKiom1M4BA2xaCFlAAAwq7pxN9I580.jpg


在客戶機測試SSH的密鑰驗證:

wKioL1M4AHrTY5UbAAB6HXlOKFE862.jpg


成功實現免交互自動登錄後,再次使用rsync訪問SSH備份源時,也就不再提示需要密碼驗證了,注意,執行腳本的必須是在客戶機中創創建密鑰對的用戶。


編寫SSH備份源的shell腳本:

wKioL1M4BXjyEyXPAAAz0Dw6yWc520.jpg


腳本內容如下:

wKiom1M4ARvxUNOdAACWokYm_6M414.jpg


對建好的備份腳本設置適當權限:

wKioL1M4AHziiLouAABEiECxHe8027.jpg


創建crond計劃任務:wKiom1M4AKXT8gMjAABdemHnKNU052.jpg


至此SSH備份源的rsync遠程備份搭建完畢。

由於篇幅偏長影響閱讀質量,故下篇博文接着介紹有關rsync備份源的方法




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章