1. 程式人生 > >CentOS 6.3下rsync服務器的安裝與配置

CentOS 6.3下rsync服務器的安裝與配置

mini 相關 有變 監測 部分 pro 當我 將不 pkgs

一、rsync 簡介

  Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件,也可以使用 Rsync 同步本地硬盤中的不同目錄。

  Rsync 是用於取代rcp的一個工具,Rsync使用所謂的 “Rsync 算法” 來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。您可以參考 How Rsync Works A Practical Overview 進一步了解 rsync 的運作機制。

  Rsync支持大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在windows平臺下也有相應的版本,比較知名的有cwRsync和Sync2NAS。

  Rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,它當前由 http://rsync.samba.org維護。

  Rsync的基本特點如下:

  1. 可以鏡像保存整個目錄樹和文件系統;

  2. 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;

  3. 無須特殊權限即可安裝;

  4. 優化的流程,文件傳輸效率高;

  5. 可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;

  6. 支持匿名傳輸,以方便進行網站鏡像。

  在使用 rsync 進行遠程同步時,可以使用兩種方式:遠程 Shell 方式(建議使用 ssh,用戶驗證由 ssh 負責)和 C/S 方式(即客戶連接遠程 rsync 服務器,用戶驗證由 rsync 服務器負責)。

  無論本地同步目錄還是遠程同步數據,首次運行時將會把全部文件拷貝一次,以後再運行時將只拷貝有變化的文件(對於新文件)或文件的變化部分(對於原有文件)。

  rsync 在首次復制時沒有速度優勢,速度不如 tar,因此當數據量很大時您可以考慮先使用 tar 進行首次復制,然後再使用 rsync 進行數據同步。

二、系統環境

系統平臺:CentOS release 6.3 (Final)

rsync 版本:rsync-3.0.9-2.el6.rfx.x86_64.rpm

rsync 服務器:TS-DEV (172.16.1.135)

rsync 客戶端:TS-CLIENT (172.16.1.136)

三、服務器端安裝rsync服務

3.1. 檢查rsync 是否已經安裝

# rpm -qa|grep rsync

若已經安裝,則使用rpm -e 命令卸載。

3.2. 下載RPM包

# wget http://pkgs.repoforge.org/rsync/rsync-3.0.9-2.el6.rfx.x86_64.rpm

3.3. 安裝rsync

# rpm -ivh rsync-3.0.9-2.el6.rfx.x86_64.rpm

四、配置 rsync 服務

4.1. 配置 rsync 服務器的步驟

  • 首先要選擇服務器啟動方式
    • 對於負荷較重的 rsync 服務器應該使用獨立運行方式
    • 對於負荷較輕的 rsync 服務器可以使用 xinetd 運行方式
  • 創建配置文件 rsyncd.conf
  • 對於非匿名訪問的 rsync 服務器還要創建認證口令文件

4.2. 以 xinetd 運行 rsync 服務

CentOS 默認以 xinetd 方式運行 rsync 服務。rsync 的 xinetd 配置文件
在 /etc/xinetd.d/rsync。要配置以 xinetd 運行的 rsync 服務需要執行如下的命令:

# chkconfig rsync on
# service xinetd restart

管理員可以修改 /etc/xinetd.d/rsync 配置文件以適合您的需要。例如,您可以修改配置行

server_args = --daemon

在後面添加 rsync 的服務選項。

4.3. 獨立運行 rsync 服務

最簡單的獨立運行 rsync 服務的方法是執行如下的命令:

# /usr/bin/rsync --daemon

您可以將上面的命令寫入 /etc/rc.local 文件以便在每次啟動服務器時運行 rsync 服務。當然,您也可以寫一個腳本在開機時自動啟動 rysnc 服務。

4.4. 配置文件 rsyncd.conf

兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似於 samba 的主配置文件。
配置文件 rsyncd.conf 默認在 /etc 目錄下。為了將所有與 rsync 服務相關的文件放在單獨的目錄下,可以執行如下命令:

# mkdir /etc/rsyncd
# touch /etc/rsyncd/rsyncd.conf
# ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf

配置文件 rsyncd.conf 由全局配置和若幹模塊配置組成。配置文件的語法為:

  • 模塊以 [模塊名] 開始
  • 參數配置行的格式是 name = value ,其中 value 可以有兩種數據類型:
    • 字符串(可以不用引號定界字符串)
    • 布爾值(1/0 或 yes/no 或 true/false)
  • 以 # 或 ; 開始的行為註釋
  • \ 為續行符

全局參數

在文件中 [module] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該參數的值就是所有模塊的默認值。

參數說明默認值
address 在獨立運行時,用於指定的服務器運行的 IP 地址。由 xinetd 運行時將忽略此參數,使用命令行上的 –address 選項替代。 本地所有IP
port 指定 rsync 守護進程監聽的端口號。 由 xinetd 運行時將忽略此參數,使用命令行上的–port 選項替代。 873
motd file 指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶。
pid file rsync 的守護進程將其 PID 寫入指定的文件。
log file 指定 rsync 守護進程的日誌文件,而不將日誌發送給 syslog。
syslog facility 指定 rsync 發送日誌消息給 syslog 時的消息級別。 daemon
socket options 指定自定義 TCP 選項。

模塊參數

模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過 path 來指定的。可以根據自己的需要,來指定多個模塊,模塊中可以定義以下參數:

a. 基本模塊參數

參數說明默認值
path 指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的。
comment 給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶。

b. 模塊控制參數

參數說明默認值
use chroot 若為 true,則 rsync 在傳輸文件之前首先 chroot 到 path 參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要 root 權限,並且不能備份指向 path 外部的符號連接所指向的目錄文件。 true
uid 指定該模塊以指定的 UID 傳輸文件。 nobody
gid 指定該模塊以指定的 GID 傳輸文件。 nobody
max connections 指定該模塊的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。 0(沒有限制)
lock file 指定支持 max connections 參數的鎖文件。 /var/run/rsyncd.lock
list 指定當客戶請求列出可以使用的模塊列表時,該模塊是否應該被列出。如果設置該選項為 false,可以創建隱藏的模塊。 true
read only 指定是否允許客戶上傳文件。若為 true 則不允許上傳;若為 false 並且服務器目錄也具有讀寫權限則允許上傳。 true
write only 指定是否允許客戶下載文件。若為 true 則不允許下載;若為 false 並且服務器目錄也具有讀權限則允許下載。 false
ignore errors 指定在 rsync 服務器上運行 delete 操作時是否忽略 I/O 錯誤。一般來說 rsync 在出現 I/O 錯誤時將將跳過 –delete 操作,以防止因為暫時的資源不足或其它 I/O 錯誤導致的嚴重問題。 true
ignore nonreadable 指定 rysnc 服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些不應該被備份者獲得的文件時是有意義的。 false
timeout 該選項可以覆蓋客戶指定的 IP 超時時間。從而確保 rsync 服務器不會永遠等待一個崩潰的客戶端。對於匿名 rsync 服務器來說,理想的數字是 600(單位為秒)。 0 (未限制)
dont compress 用來指定那些在傳輸之前不進行壓縮處理的文件。該選項可以定義一些不允許客戶對該模塊使用的命令選項列表。必須使用選項全名,而不能是簡稱。當發生拒絕某個選項的情況時,服務器將報告錯誤信息然後退出。例如,要防止使用壓縮,應該是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

c. 模塊文件篩選參數

參數說明默認值
exclude 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式。
exclude from 指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義。
include 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 。
include from 指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義。
  • 一個模塊只能指定一個exclude 參數、一個include 參數。
  • 結合 include 和 exclude 可以定義復雜的exclude/include 規則 。
  • 這幾個參數分別與相應的rsync 客戶命令選項等價,唯一不同的是它們作用在服務器端。
  • 關於如何書寫規則文件的內容請參考http://www.howtocn.org/rsync:use_rsync。

d. 模塊用戶認證參數

參數說明默認值
auth users 指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裏的用戶和系統用戶沒有任何關系。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。 (匿名方式)
secrets file 指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用。
strict modes 指定是否監測口令文件的權限。若為 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。 true
  • rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器。
  • rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式為:

    username:passwd

  • 一般來說口令最好不要超過8個字符。若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。

e. 模塊訪問控制參數

參數說明默認值
hosts allow 用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕。 *
hosts deny 用一個主機列表指定哪些主機客戶不允許連接該模塊。

客戶主機列表定義可以是以下形式:

  • 單個IP地址。例如:192.168.0.1
  • 整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
  • 可解析的單個主機名。例如:centos,centos.bsmart.cn
  • 域內的所有主機。例如:*.bsmart.cn
  • “*”則表示所有。
  • 多個列表項要用空格間隔。

f. 模塊日誌參數

參數說明默認值
transfer logging 使 rsync 服務器將傳輸操作記錄到傳輸日誌文件。 false
log format 指定傳輸日誌文件的字段。 ”%o %h [%a] %m (%u) %f %l”

設置了”log file”參數時,在日誌每行的開始會添加”%t [%p]“。

可以使用的日誌格式定義符如下所示:
  • %a - 遠程IP地址
  • %h - 遠程主機名
  • %l - 文件長度字符數
  • %p - 該次 rsync 會話的 PID
  • %o - 操作類型:”send” 或 “recv”
  • %f - 文件名
  • %P - 模塊路徑
  • %m - 模塊名
  • %t - 當前時間
  • %u - 認證的用戶名(匿名時是 null)
  • %b - 實際傳輸的字節數
  • %c - 當發送文件時,記錄該文件的校驗碼

五、rsync 服務器應用案例

5.1. 在服務器端TS-DEV上配置rsync 服務

a. 編輯配置文件

# vi /etc/rsyncd/rsyncd.conf

技術分享圖片
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script
# GLOBAL OPTIONS uid = root gid = root
use chroot = no
read only = yes #limit access to private LANs hosts allow=172.16.0.0/255.255.0.0 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 hosts deny=*
max connections = 5                      

pid file = /var/run/rsyncd.pid

secrets file = /etc/rsyncd/rsyncd.secrets
#lock file = /var/run/rsync.lock           
motd file = /etc/rsyncd/rsyncd.motd #This will give you a separate log file log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300
# MODULE OPTIONS [davidhome] path = /home/david/ list=yes ignore errors auth users = david comment = David home exclude = important/ [chinatmp] path = /tmp/china/ list=no ignore errors auth users = china comment = tmp_china
技術分享圖片

b. 建立/etc/rsyncd/rsyncd.secrets文件

# vim /etc/rsyncd/rsyncd.secrets

david:asdf #格式 用戶名:口令
china:jk #該用戶不要求是系統用戶

c. 為了密碼的安全性,我們把權限設為600

# chown root:root /etc/rsyncd/rsyncd.secrets

# chmod 600 /etc/rsyncd/rsyncd.secrets

d. 建立連接到服務器的客戶端看到的歡迎信息文件/etc/rsyncd/rsyncd.motd

# vim /etc/rsyncd/rsyncd.motd

+++++++++++++++++++++++++++
+ David Camp +
+++++++++++++++++++++++++++

e. 啟動rsync

# /etc/init.d/xinetd restart

f. 查看873端口是否起來

# netstat -an | grep 873

如果rsync啟動成功的話可以看到873端口已經在監聽了。

g. 服務器端文件詳細

技術分享圖片

5.2. 客戶端配置

a. 客戶端安裝rsync

# yum -y install rsync

b. 通過rsync客戶端來同步數據

場景一:

# rsync -avzP [email protected]::davidhome /tmp/david/

技術分享圖片

Password: 這裏要輸入david的密碼,是服務器端提供的,在前面的例子中,我們用的是 asdf,輸入的密碼並不顯示出來;輸好後就回車;
註: 這個命令的意思就是說,用david 用戶登錄到服務器上,把davidhome數據,同步到本地目錄/tmp/david/上。當然本地的目錄是可以你自己定義的,比如 dave也是可以的;當你在客戶端上,當前操作的目錄下沒有davidhome這個目錄時,系統會自動為你創建一個;當存在davidhome這個目錄中,你要註意它的寫權限。

說明:
-a 參數,相當於-rlptgoD,-r 是遞歸 -l 是鏈接文件,意思是拷貝鏈接文件;-p 表示保持文件原有權限;-t 保持文件原有時間;-g 保持文件原有用戶組;-o 保持文件原有屬主;-D 相當於塊設備文件;
-z 傳輸時壓縮;
-P 傳輸進度;
-v 傳輸時的進度等信息,和-P有點關系,自己試試。可以看文檔;

場景二:
# rsync -avzP --delete [email protected]::davidhome /tmp/david/

技術分享圖片

這回我們引入一個 –delete 選項,表示客戶端上的數據要與服務器端完全一致,如果 /tmp/david/目錄中有服務器上不存在的文件,則刪除。最終目的是讓/tmp/david/目錄上的數據完全與服務器上保持一致;用的時候要小心點,最好不要把已經有重要數所據的目錄,當做本地更新目錄,否則會把你的數據全部刪除;

場景三:
# rsync -avzP --delete --password-file=/tmp/rsync.password [email protected]::davidhome /tmp/david/

技術分享圖片

這次我們加了一個選項 –password-file=rsync.password ,這時當我們以david用戶登錄rsync服務器同步數據時,密碼將讀取 /tmp/rsync.password 這個文件。這個文件內容只是david用戶的密碼。我們要如下做;

# touch /tmp/rsync.password
# chmod 600 /tmp/rsync.password
# echo "asdf"> /tmp/rsync.password
# rsync -avzP --delete --password-file=/tmp/rsync.password [email protected]::davidhome /tmp/david/

註: 這樣就不需要密碼了;其實這是比較重要的,因為服務器通過crond 計劃任務還是有必要的;

5.3. rsync 客戶端自動與服務器同步數據

編輯crontab
# crontab -e
加入如下代碼:

10 0 * * * rsync -avzP  --delete  --password-file=/tmp/rsync.password  [email protected]::davidhome  /tmp/david/

表示每天0點10分執行後面的命令。

六、錯誤分析

@ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1530) [receiver=3.0.6]

技術分享圖片

rsync: opendir "." (in xxxxxxx) failed: Permission denied (13)

技術分享圖片

解決辦法:

1、將 selinux 對 rsync 的限制全部去掉:
# /usr/sbin/setsebool -P rsync_disable_trans 1
# service xinetd restart

2、狠一點,禁止整個 selinux :
# vim /etc/selinux/config
將其中的 SELINUX=enforcing 修改為 SELINUX=disabled
保存退出後,重啟機器。

至此,rsync服務器配置完畢。

七、參考

關於rsync 命令的使用,請參考:http://www.howtocn.org/rsync:use_rsync

關於rsync 服務的詳細說明,請參考:http://www.howtocn.org/rsync:use_rsync_server

CentOS 6.3下rsync服務器的安裝與配置