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

来源:http://www.cnblogs.com/zhenghongxin/archive/2016/04/10/5373734.html
-Advertisement-
Play Games

一、rsync 簡介 Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件,也可以使用 Rsync 同步本地硬碟中的不同目錄。 Rsync 是用於取代rcp的一個工具,Rsync使用所謂的 “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] 之外的所有配置行都是全局參數。當然也可以在全局參數部分定義模塊參數,這時該參數的值就是所有模塊的預設值。

參數說明預設值
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

http://www.cnblogs.com/mchina/p/2829944.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家可以先看這篇文章ASP.NET Redis 開發對Redis有個初步的瞭解 Redis的主從複製功能非常強大,一個master可以擁有多個slave,而一個slave又可以擁有多個slave,如此下去,形成了強大的多級伺服器集群架構. 實現步驟如下: 1.在Windows某個磁碟上創建兩個目錄, ...
  • 1、數據表的增刪改查操作(crud): 對於表: 增:create table XXXX 刪:drop table XXXX 改:alter table XXXX rename to XXXX 查:select * from XXXX 對於行: 增:insert into XXXX(xxxx) va ...
  • 模糊查詢 格式: select 欄位的集合 from 表名 where 某個欄位的名字 匹配的條件註意:匹配的條件通常含有通配符 1、% 表示任意零個或多個字元 select * from emp where ename like '%A%' --ename中間含A就輸出 select * from ...
  • 龍果學院 講師:吳水成 三、高可用架構篇 第13節--MySQL源碼編譯安裝(CentOS-6.6+MySQL-5.6) 第14節--MySQL主從複製的配置(CentOS-6.6+MySQL-5.6) 第15節--MyCat在MySQL主從複製基礎上實現讀寫分離 第16節--MyCat集群部署(H ...
  • 前幾天被老大訓斥連openrowset 都不會用,然後我就去看了文檔,想測試一下慄子~ openrowset 的具體語法我就不貼了,戳這裡:https://msdn.microsoft.com/zh-cn/library/ms190312(v=sql.120).aspx 按照文檔裡面的樣例來測試,首 ...
  • 1. 安裝VSFTP 1 yum -y install vsftpd 2. 配置vsftpd.conf文件 1 # Example config file /etc/vsftpd/vsftpd.conf 2 # 3 # The default compiled in settings are fai ...
  • 1. 添加官方軟體庫 1) 編輯/etc/apt/sources.list 2) 用#註釋掉原有的內容,並添加下述內容: 3) 順序執行下列命令: 2. 添加中文輸入法 我的fcitx安裝之後不能正常使用,故最終還是安裝了ibus. 執行上述命令安裝結束後,在Region & Language 中的 ...
  • 上一篇我已經把zabbix server 和zabbix agent 安裝在了同一臺主機上,現在如何配置zabbix server監控自己。 vim /etc/zabbix/zabbix_agentd.conf 編輯agent配置文件。 指定那些伺服器可以來獲取數據,可用逗號隔開指定多台伺服器。 這 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...