天天看點

rsync檔案同步應用--伺服器端的配置

    對于選擇linux 作為應用平台的的中小型企業或網站來說,往往面臨如何實作資料遠端備份或者網站鏡象的問題,雖然有商業化的備份和鏡象産品可供選擇,但這些産品的價格往往過于昂貴。是以如何利用自由軟體高效實作遠端備份和網站鏡象就成為一個值得讨論的話題。

    通過網絡進行遠端資料備份或者網站鏡象的最簡單的方法就是使用wget,但是這種方式每次都需要将所有資料都重新在網絡上傳輸一遍,而不考慮哪些檔案是經過更新的,是以效率非常低下。尤其在需要備份的資料量很大的時候,往往需要花費數個小時來在網絡上進行資料傳輸。

   是以這裡就介紹一種高效的網絡遠端備份和鏡象工具-rsync,它可以滿足絕大多數要求不是特别嚴格的備份需求。

    rsync是類unix系統下的資料鏡像備份工具,從軟體的命名上就可以看出來了——remote sync

一,rsync特點

可以鏡像儲存整個目錄樹和檔案系統。

可以很容易做到保持原來檔案的權限、時間、軟硬連結等等。

無須特殊權限即可安裝。

快速:第一次同步時 rsync 會複制全部内容,但在下一次隻傳輸修改過的檔案。rsync 在傳輸資料的過程中可以實行壓縮及解壓縮操作,是以可以使用更少的帶寬。

安全:可以使用scp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連接配接。

支援匿名傳輸,以友善進行網站鏡象。

    需要注意的是必須在伺服器test3和test4上都安裝rsync,其中test3伺服器上是以伺服器模式運作rsync,而test4上則以用戶端方式運作rsync。這樣在伺服器test3上運作rsync守護程序,在test4上定時運作客戶程式來備份伺服器test3上需要備份的内容。

一般的linux系統都自帶了rsync的包,rhel和centos可以通過rpm或者yum來安裝包,我這裡使用的是centos 6.0,它的安裝很簡單:

[root@test3 ~]# yum install rsync

這裡我就不通過yum安裝rsync了,而是通過編譯安裝rsync包,其實編譯安裝也是很簡單的,現在我通過源碼包來編譯安裝rsync

二,rsync下載下傳編譯安裝安裝

我這裡用的是最新的版本,下載下傳的網站是http://rsync.samba.org,完整的下載下傳如下http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz

[root@test3 ~]# tar xzvf  rsync-3.0.9.tar.gz

[root@test3 ~]# cd rsync-3.0.9

[root@test3 rsync-3.0.9]# ./configure  --prefix=/usr/local/rsync   

    出現  rsync 3.0.9 configuration successful 才表示configure通過

[root@test3 rsync-3.0.9]# make

[root@test3 rsync-3.0.9]# make install

[root@test3 rsync-3.0.9]# cp  /usr/local/rsync/bin/rsync  /usr/bin/

三,rsync伺服器test3

 在test3上以守護程序方式來啟動rsync伺服器

[root@test3 rsync-3.0.9]#      rsync  --daemon

這是會顯示沒有配置檔案,不要緊後面慢慢介紹

Failed to parse config file: /etc/rsyncd.conf

rsync預設服務端口為873,伺服器在該端口接收客戶的匿名或者認證方式的備份請求。

如果想開機啟動

/usr/local/rsync/bin/rsync --daemon 加到檔案/etc/rc.d/rc.local中就可以 了

如果你的系統之中安裝了xinetd,那麼還需要在xinetd中進行配置

配置rsync servervi /etc/xinetd.d/rsync

将disable=yes改為no  

service rsync { 

       disable = no 

       socket_type     = stream        

       wait            = no         

       user            = root 

       server          = /usr/bin/rsync         

       server_args     = --daemon         

       log_on_failure  += USERID }

四,rsync的配置參數說明

 rsync伺服器的配置檔案為/etc/rsyncd.conf,其控制認證、通路、日志記錄等等。

該檔案是由一個或多個子產品結構組成。一個子產品定義以方括弧中的子產品名開始,直到下一個子產品定義開始或者檔案結束,子產品中包含格式為name = value的參數定義。每個子產品其實就對應需要備份的一個目錄樹,比方說在我們的執行個體環境中,有三個目錄樹需要備份:/www/、/home/web_user1/和/home/web_user2/,那麼就需要在配置檔案中定義三個子產品,分别對應三個目錄樹。

全局參數

在檔案中[modlue]之前的所有參數都是全局參數,當然也可以在全局參數部分定義子產品參數,這時候該參數的值就是所有子產品的預設值。

motd file

"motd file"參數用來指定一個消息檔案,當客戶連接配接伺服器時該檔案的内容顯示給客戶,預設是沒有motd檔案的。

log file

"log file"指定rsync的日志檔案,而不将日志發送給syslog。

pid file

指定rsync的pid檔案。

syslog facility

指定rsync發送日志消息給syslog時的消息級别,常見的消息級别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。

預設值是daemon。

子產品參數

在全局參數之後就需要定義一個或多個子產品了,子產品中可以定義以下參數:

comment

給子產品指定一個描述,該描述連同子產品名在客戶連接配接得到子產品清單時顯示給客戶。預設沒有描述定義。

path

指定該子產品的供備份的目錄樹路徑,該參數是必須指定的。

use chroot

如果"use chroot"指定為true,那麼rsync在傳輸檔案以前首先chroot到path參數所指定的目錄下。這樣做的原因是實作額外的安全防護,但是缺點是需要以roots權限,并且不能備份指向外部的符号連接配接所指向的目錄檔案。預設情況下chroot值為true。

max connections

指定該子產品的最大并發連接配接數量以保護伺服器,超過限制的連接配接請求将被告知随後再試。預設值是0,也就是沒有限制。

lock file

指定支援max connections參數的鎖檔案,預設值是/var/run/rsyncd.lock。

read only

該選項設定是否允許客戶上載檔案。如果為true那麼任何上載請求都會失敗,如果為false并且伺服器目錄讀寫權限允許那麼上載是允許的。預設值為true。

list

該選項設定當客戶請求可以使用的子產品清單時,該子產品是否應該被列出。如果設定該選項為false,可以建立隐藏的子產品。預設值是true。

uid

該選項指定當該子產品傳輸檔案時守護程序應該具有的uid,配合gid選項使用可以确定哪些可以通路怎麼樣的檔案權限,預設值是"nobody"。

gid

該選項指定當該子產品傳輸檔案時守護程序應該具有的gid。預設值為"nobody"。

exlude

用來指定多個由空格隔開的多個模式清單,并将其添加到exclude清單中。這等同于在用戶端指令中使用--exclude來指定模式,不過配置檔案中指定的exclude模式不會傳遞給用戶端,而僅僅應用于伺服器。一個子產品隻能指定一個exlude選項,但是可以在模式前面使用"-"和"+"來指定是exclude還是include。

但是需要注意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude清單,如果希望確定特定的檔案不能被通路,那就最好結合uid/gid選項一起使用。

exlude from

指定一個包含exclude模式的定義的檔案名,伺服器從該檔案中讀取exlude清單定義。

include 

用來指定多個由空格隔開的多個rsync并應該exlude的模式清單。這等同于在用戶端指令中使用--include來指定模式,結合include和exlude可以定義複雜的exlude/include規則 。一個子產品隻能指定一個include選項,但是可以在模式前面使用"-"和"+"來指定是exclude還是include。

include from

指定一個包含include模式的定義的檔案名,伺服器從該檔案中讀取include清單定義。

auth users

該選項指定由空格或逗号分隔的使用者名清單,隻有這些使用者才允許連接配接該子產品。這裡的使用者和系統使用者沒有任何關系。如果"auth users"被設定,那麼用戶端發出對該子產品的連接配接請求以後會被rsync請求challenged進行驗證身份這裡使用的challenge/response認證協定。使用者的名和密碼以明文方式存放在"secrets file"選項指定的檔案中。預設情況下無需密碼就可以連接配接子產品(也就是匿名方式)。

secrets file

該選項指定一個包含定義使用者名:密碼對的檔案。隻有在"auth users"被定義時,該檔案才有作用。檔案每行包含一個username:passwd對。一般來說密碼最好不要超過8個字元。沒有預設的secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)

strict modes

該選項指定是否監測密碼檔案的權限,如果該選項值為true那麼密碼檔案隻能被rsync伺服器運作身份的使用者通路,其他任何使用者不可以通路該檔案。預設值為true。

hosts allow

該選項指定哪些IP的客戶允許連接配接該子產品。客戶模式定義可以是以下形式:

xxx.xxx.xxx.xxx,客戶主機隻有完全比對該IP才允許通路。例如:192.167.0.1

a.b.c.d/n,屬于該網絡的客戶都允許連接配接該子產品。例如:192.168.0.0/24

a.b.c.d/e.f.g.h,屬于該網絡的客戶都允許連接配接該子產品。例如:192.168.0.0/255.255.255.0

一個主機名,客戶主機隻有擁有該主機名才允許通路,例如:backup.linuxaid.com.cn。

*.linuxaid.com.cn,所有屬于該域的主機都允許。

預設是允許所有主機連接配接。

hosts deny

指定不允許連接配接rsync伺服器的機器,可以使用hosts allow的定義方式來進行定義。預設是沒有hosts deny定義。

ignore errors

指定rsyncd在判斷是否運作傳輸時的删除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時将将跳過--delete操作,以防止因為暫時的資源不足或其它IO錯誤導緻的嚴重問題。

ignore nonreadable

指定rysnc伺服器完全忽略那些使用者沒有通路權限的檔案。這對于在需要備份的目錄中有些檔案是不應該被備份者得到的情況是有意義的。

transfer logging

使rsync伺服器使用ftp格式的檔案來記錄下載下傳和上載操作在自己單獨的日志中。

log format

通過該選項使用者在使用transfer logging可以自己定制日志檔案的字段。其格式是一個包含格式定義符的字元串,可以使用的格式定義符如下所示:

%h 遠端主機名

%a 遠端IP位址

%l 檔案長度字元數

%p 該次rsync會話的程序id

%o 操作類型:"send"或"recv"

%f 檔案名

%P 子產品路徑

%m 子產品名

%t 目前時間

%u 認證的使用者名(匿名時是null)

%b 實際傳輸的位元組數

%c 當發送檔案時,該字段記錄該檔案的校驗碼

預設log格式為:"%o %h [%a] %m (%u) %f %l",一般來說,在每行的頭上會添加"%t [%p] "。在源代碼中同時釋出有一個叫rsyncstats的perl腳本程式來統計這種格式的日志檔案。

timeout

通過該選項可以覆寫客戶指定的IP逾時時間。通過該選項可以確定rsync伺服器不會永遠等待一個崩潰的客戶。逾時機關為秒鐘,0表示沒有逾時定義,這也是預設值。對于匿名rsync伺服器來說,一個理想的數字是600。

refuse options

通過該選項可以定義一些不允許客戶對該子產品使用的指令參數清單。這裡必須使用指令全名,而不能是簡稱。但發生拒絕某個指令的情況時伺服器将報告錯誤資訊然後退出。如果要防止使用壓縮,應該是:"dont compress = *"。

dont compress

用來指定那些不進行壓縮處理再傳輸的檔案,預設值是

*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

五,我的執行個體配置

   這裡我們用來同步/var/www/html/ 目錄 和/etc 目錄 進行備份

[root@test3 ~]#  vim  /etc/rsyncd.conf 

uid = root 

gid = root 

use chroot = no 

max connections = 2 

strict modes = yes 

port = 873 

pid file = /var/run/rsyncd.pid 

lock file = /var/run/rsync.lock 

log file = /var/log/rsyncd.log

read only = yes

list = no

hosts allow = 192.168.87.0/24

[www] 

path = /var/www/html

comment = www 

ignore errors 

read only = no 

write only = no 

list = no 

auth users = abc

secrets file = /etc/rsyncd.secrets

[etc]

path = /etc

comment = etc

[root@test3 ~]# vim  /etc/rsyncd.secrets

abc:123456

[root@test3 ~]# rsync --daemon

failed to create pid file /var/run/rsyncd.pid: File exists

[root@test3 ~]# rm -f  /var/run/rsyncd.pid

[root@test3 ~]# chown root.root /etc/rsyncd.secrets 

[root@test3 ~]# chown  600  /etc/rsyncd.secrets 

六,啟動rsync守護程序

[root@test3 ~]# netstat -antup|grep rsync

tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      34601/rsync         

tcp        0      0 :::873                      :::*                        LISTEN      34601/rsync 

本文轉自陳仲陽0 51CTO部落格,原文連結:http://blog.51cto.com/wolfword/1223431

繼續閱讀