配置rsync遠程數據同步服務詳解

rsync是一個開源的快速備份工具,能夠在不一樣主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且採用優化的同步算法,傳輸前執行壓縮,所以很是適合於異地備份,鏡像服務器等應用。
php

rsync的官方爲http://rsync.samba.org,能夠去官網下載最新版本的rsync。系統默認就已經安裝好了rsync軟件了,若是沒裝的可使用yum或rpm安裝便可。html

[root@localhost /]#rpm -q rsync
rsync-3.0.6-5e16_0.i686

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

084608455.jpg

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


1、配置SSH備份源vim

一、建立備份用戶rget,rput分別用來下載,上傳。安全

[root@localhost /]#useradd rget
[root@localhost /]#passwd rget
[root@localhost /]#useradd rput
[root@localhost /]#passwd rput

二、確認sshd服務正常運行,容許用戶rget,rput訪問。bash

[root@localhost /]#vim /etc/ssh/sshd_config
...//省略部份內容
UseDNS no
AllowUsers rget rput   //啓用此行,值容許用戶rget和rput使用sshd服務。
[root@localhost /]#service sshd start

三、調整同步目錄的權限,使rget有讀取權限、rput有寫入權限。服務器

這裏做者以網站根目錄爲例,講解如何設置rsync備份源的權限設置。併發

在linux文件系統中,正常建立的目錄權限爲755,文件權限爲644,所以對於rget用戶來講,默認權限已經知足下行備份的要求了。可是對於rput用戶來講,要可以寫入纔有權限作上行備份。建議將目錄的屬主修改成備份用戶;另外,爲了避免影響網站服務器對相關目錄的訪問,須要爲WEB服務的運行用戶指定額外的權限。這時就須要使用「setfacl」了,有關於「setfacl」的詳細文檔請自行查閱相關文檔,做者這裏只作簡單的介紹。ssh

[root@localhost /]#chown -R rput:rput /var/www/html
[root@localhost /]#setfacl -R -m user:daemon:rwx /var/www/html //設置ACL

「setfacl」命令經常使用的參數解釋以下:

-R:表示遞歸操做

-m:指定用戶以及設置的權限

-x:刪除某一項ACL屬性

-b:刪除全部的ACL屬性

若是但願創建的文件,子目錄也具備相同的ACL屬性,則應爲指定目錄設置默認ACL屬性,即在「setfacl」權限模式中添加「default」參數。查看已設置好的ACL可使用「getfacl」命令。

[root@localhost /]#setfacl -m default:user:daemon:rwx /var/www/html //設置默認ACl
[root@localhost /]#getfacl /var/www/html //查看設置好的ACL


2、配置rsync備份源

rsync不只僅用做遠程同步發起端(客戶端),也能夠做爲守護進程運行,爲其餘客戶機提供備份源。配置rsync備份源須要創建配置文件rsync.conf,建立備份帳號。而後將rsync程序以「--daemon」選項運行。

一、建立rsync.conf配置文件

[root@localhost /]#vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes                                   //禁錮在源目錄
address = 192.168.1.10                             //指定監聽地址
port = 873                                         //指定監聽的端口
log file = /var/log/rsyncd.kog                     //存放日誌的位置
pid file = /var/run/rsyncd.pid                     //存放PID文件的位置
host allow = 192.168.1.0                           //容許訪問的客戶機地址
[wwwroot]                                          //共享模塊名稱
path = /var/www/html                               //源目錄的實際路徑
comment = Document Root of file.benet.com
read only = yes                                    //是否爲只讀
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z   //同步不壓縮的類型
auth users = backup                                //受權用戶
secrets file = /etc/rsyncd_users.db                //存放用戶的數據文件

基於安全性考慮,對於rsync的備份源最好僅容許只讀方式作下行同步,若確實須要作上行同步時,建議改用SSH備份源。另外,下行備份能夠採用匿名的方式,只要將其中的「autusers」和「secretsfile」配置記錄去掉就能夠了。

二、建立備份用戶的數據文件

根據上一步的設置,建立帳號的數據文件,添加一行用戶記錄,以冒號分。列如:用戶名爲「backup」,密碼爲「pwd@back」。因爲帳號信息採用明文存放,所以應調整文件權限,避免帳號信息泄露。

[root@localhost /]#vim /etc/rsync_users.db
backup:pwd@back
[root@localhost /]#chmod 600 /etc/rsync_users.db

與配置SSH備份源相似,備份用戶backup也須要對源目錄/var/www/html/有相應的讀取權限。實際上只要other組有讀取權限就能夠了。

三、啓動rsync服務程序

執行「rsync--daemon」命令就能夠啓動rsync服務,以獨立監聽服務的方式運行。若要關閉rsync服務,能夠採起kill進程的方式。

[root@localhost /]#rsync --daemon
[root@localhost /]#netstat -anpt | grep rsync
tcp    0    0 192.168.1.10:873    0.0.0.0:*    LISTEN    21182/rsync
[root@localhost /]#kill $(cat /var/run/rsync.pid)

四、將rsync進程交給超級服務xinetd管理

考慮到異地備份的特殊性,一般並不須要全天不間斷運行,最好是在有客戶練接的時候才啓用。所以可將rsync交給超級服務xinetd管理,只要修改相應配置並啓動xinetd服務,就能夠提供rsync服務了。

[root@localhost /]#yum -y install xinetd     //安裝xinetd軟件包
[root@localhost /]#service xinetd start      //啓動xinetd服務
[root@localhost /]#vim /etc/xinetd.d/rsync
service rsync
{
disable = no                            //將原有的yes改成no
...//省略部份內容
server            = /usr/bin/rsync
server_args       = --daemon            //確認有--daemon服務選項
log_no_failure    += USERID
}


3、客戶端使用rsync備份工具

有了備份源服務器之後,就可使用rsync工具來執行遠程同步了。如今咱們就在客戶端執行備份命令。

一、rsync命令的基本用法

[root@localhost/]#rsync[選項][備份源地址][目標地址]

命令格式及備份選項解釋以下:

-r:遞歸模式,包含目錄及子目錄中的全部文件。

-l:對於符號連接文件仍然複製爲符號連接文件。

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

-a:歸檔模式,保留文件的權限,屬性等信息,等同於組合選項「-rlptgoD」

-z:在傳文件時進行壓縮。

-p:保留文件的權限標記。

-t:保留文件的時間標記。

-g:保留文件的屬組標記(僅root使用)。

-o:保留文件的屬主標記(僅root使用)。

-H:保留硬連接文件。

-A:保留ACL屬性信息。

-D:保留設備文件及其它特殊文件。

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

--checksum:根據校驗和(而不是文件大小,修改時間)來決定是否跳過文件。

二、配置源的表示方法

在執行遠程同步任務時,rsync命令需指定源服務器中的資源位置,對於下行備份操做,備份源對應「原始位置」,對於上行備份操做,備份源對應「目標位置」,根據備份源的類型不一樣,其資源表示方法也不一樣。

SSH備份源:表示爲「用戶名@主機地址:目錄路徑」的形式,用一個冒號分隔,驗證字串與SSH登陸相似。

例如:ssh的下行備份語法以下:

[root@localhost /]#rsync -avz rget@192.168.1.1:/var/www/html /opt

例如:ssh的上行備份語法以下:

[root@localhost /]#rsync -avz /var/www/html rget@192.168.1.1:/var/www/html

rsyn備份源:表示爲「用戶名@主機地址::共享模塊名」或者「rsync://用戶名@主機地址/共享模塊名的形式,前者爲兩個冒號分隔,後者爲URL路徑。

例如:rsync的下行備份語法以下:

[root@localhost /]#rsync -avz backup@192.168.1.1::wwwroot /opt

或者

[root@localhost /]#rsync -avz rsync://backup@192.168.1.1/wwwroot /opt


四:配置rsync+inotify實時同步

 Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各類變化狀況,如文件存取,刪除,移動,修改等。利用這一機制,能夠很是方便的實現文件異動告警,增量備份,並針對目錄或文件的變化及時做出響應。

 使用rsync工具與inotify機制想結合,能夠實現觸發式備份及實時同步,只要原始位置的文檔發生變化,則當即啓動增量備份操做,不然處於靜態等待狀態。這樣一來,就避免了按固定週期備份時存在延遲性,週期過密等問題。

一、配置無密碼自動登錄的SSH備份用戶

真由於inotify通知機制有Linux內核提供,所以主要作本機監控,在觸發式備份中應用時更適合上行同步。所以使用SSH備份源比較合適,因爲編寫觸發式腳本在後臺運行,沒法根據提示來輸入密碼。所以須要作無密碼自動登陸的SSH用戶。對於SSH服務器來講,採用祕鑰驗證是避免交互式登陸的最佳方法。例如:只要在客戶機中建立無私鑰短語的祕鑰對,而後將公鑰文件發送給服務器中的備份用戶,就能夠實現無密碼自動登陸了。

[root@localhost /]#ssh-keygen -t rsa            //建立祕鑰對
[root@localhost /]#ssh-copy-id rput@192.168.1.1 //將公鑰發送給服務器
[root@localhost /]#ssh rput@192.168.1.1         //無密碼自動登陸
[rput@localhost /]#

二、調整inotify內核參數

[root@localhost /]#vim /etc/sysctl.conf
......//省略部份內容
fs.inotify.max_queued_events = 16384       //監控事件隊列
fs.inotify.max_user_instances = 1024       //最多監控實例數
fs.inotify.max_user_watches = 1048576      //每一個實例最多監控文件數
[root@localhost /]#sysctl -p

三、安裝inotify-tools工具

使用inotify機制還須要安裝inotify-tools,以便提供inotifywait,inotifywatch輔助工具程序,用來監控,彙總改動狀況。inotify-tools可從http://inotify-tools.sourceforge.net下載。

[root@localhost media]#tar zxf inotify-tools-3.14.tar.gz -C /usr/src/
[root@localhost media]#cd /usr/src/inotify-tools-3.14
[root@localhost inotify-tools-3.14]#./configure
[root@localhost inotify-tools-3.14]#make && make install

下面以監控網站目錄「/var/www/html」目錄爲例,執行inotify命令,而後再另外一個終端向「/var/www/html」目錄下添加文件,移動文件,跟蹤屏幕輸出結果。

[root@localhost /]#inotify -mrq -e modify,create,move,delete /var/www/html
Setting up watches.Beware:since -r was given,this may take a while!
Watches established.
/var/www/html/ CREATE index.php           //建立index.php文件
/var/www/html/ MODIFY index.php           //修改index.php文件
/var/www/html/ MOVED_FROM index.php       //重命名index.php文件
/var/www/html/ MOVED_TO test.php          //更名爲test.php文件
......//省略部份內容

上述命令中「-m」表示持續監控,「-r」表示遞歸整個目錄,「-q」表示簡化輸出信息,「-e」表示指定監控事件(如:「modify」修改,「create」建立,「move」移動,「delete」刪除,「attrib」屬性更改)等各類事件,一有變更當即輸出結果。

四、編寫觸發式同步腳本

使用inotifywait輸出的監控結果中,每行記錄中依次包括目錄,事件,文件,據此能夠識別變更狀況。爲了簡單起見,只要檢測到變更時執行rsync上行同步操做便可。須要注意的是,當更新較頻繁時,應避免併發執行rsync備份——若rsync進程已經存在則忽略本次同步,或者根據rsync進程數量(取決於實際任務)來決定是否同步。

[root@localhost /]#vim rsync.sh
#!/bin/bash
INOTIFT_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete /var/www/html rput@192.168.1.1:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ];then
        $RSYNC_CMD
    if
done
[root@localhost /]#chmod +x rsync.sh
相關文章
相關標籤/搜索