歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

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

一、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] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該 參數的值就是所有模塊的默認值。

設置了”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

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服務器配置完畢。

Copyright © Linux教程網 All Rights Reserved