rsync服務簡介(補充)
上一節講述了使用 rsync 客戶命令進行同步和備份的內容。rsync 還可以以守護進程(daemon)方式運行,若一臺主機以 daemon 模式運行 rsync,一般稱其為 rsync 服務器。rsync 的 C/S 方式運行方式概述如下:
rsync 客戶端連接遠程 rsync 守護進程進行數據同步
rsync 服務器端要開啟 rsyncd 服務,默認監聽 873 端口,等待客戶端去連接
rsync 服務器可以獨立運行,也可由 Xinetd 運行,CentOS 默認以 Xinetd 運行
rsync 服務器啟動時會讀取配置文件,默認為 /etc/rsyncd.conf,其格式類似於 samba 的主配置文件
用戶驗證由服務器負責,用戶口令文件在 /etc/rsyncd.conf 中指明
rsync 命令既是客戶端程序,同時也是服務程序。在運行 rsync 服務時使用特殊的命令選項,常用的服務選項有:
選項 | 說明 |
---|---|
–daemon | 表示以守護進程方式運行 |
–address=ADDRESS | 將此服務綁定到指定的 IP 地址運行 |
–port=PORT | 指定特殊的監聽端口,默認為 873 端口 | |
–bwlimit=KBPS | 限制 I/O 帶寬(單位為 KBytes/秒) |
–config=FILE | 指定配置文件,默認為 /etc/rsyncd.conf |
–sockopts=OPTIONS | 指定自定義 TCP 選項 |
-4, –ipv4 | 使用 IPv4 |
-6, –ipv6 | 使用 IPv6 |
上面僅僅列出了 rsync 用於服務的選項,rsync 用於客戶的選項請參見上節。
二. 配置 rsync 服務
2.1 配置 rsync 服務器的步驟
首先要選擇服務器啟動方式
對於負荷較重的 rsync 服務器應該使用獨立運行方式
對於負荷較輕的 rsync 服務器可以使用 xinetd 運行方式
創建配置文件 rsyncd.conf
對於非匿名訪問的 rsync 服務器還要創建認證口令文件
2.2 以 xinetd 運行 rsync 服務
CentOS 默認以 xinetd 方式運行 rsync 服務。rsync 的 xinetd 配置文件
在 /etc/xinetd.d/rsync。要配置以 xinetd 運行的 rsync 服務需要執行如下的命令:
管理員可以修改 /etc/xinetd.d/rsync 配置文件以適合您的需要。例如,您可以修改配置行
在後面添加 rsync 的服務選項。
2.3 獨立運行 rsync 服務
最簡單的獨立運行 rsync 服務的方法是執行如下的命令:
您可以將上面的命令寫入 /etc/rc.local 文件以便在每次啟動服務器時運行 rsync 服務。當然,您也可以寫一個腳本在開機時自動啟動 rysnc 服務。
2.4 配置文件 rsyncd.conf
兩種 rsync 服務運行方式都需要配置 rsyncd.conf,其格式類似於 samba 的主配置文件。
配置文件 rsyncd.conf 默認在 /etc 目錄下。為了將所有與 rsync 服務相關的文件放在單獨的目錄下,可以執行如下命令:
配置文件 rsyncd.conf 由全局配置和若幹模塊配置組成。配置文件的語法為:
模塊以 [模塊名] 開始
參數配置行的格式是 name = value ,其中 value 可以有兩種數據類型:
字符串(可以不用引號定界字符串)
布爾值(1/0 或 yes/no 或 true/false)
以 # 或 ; 開始的行為註釋
\ 為續行符
2.4.1 全局參數
在文件中 [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 選項 | 無 |
2.4.2 模塊參數
模塊參數主要用於定義 rsync 服務器哪個目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個名字就是在 rsync 客戶端看到的名字,類似於 Samba 服務器提供的共享名。而服務器真正同步的數據是通過path 來指定的。可以根據自己的需要,來指定多個模塊,模塊中可以定義以下參數:
1. 基本模塊參數
參數 | 說明 | 默認值 |
---|---|---|
path | 指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的 | 無 |
comment | 給模塊指定一個描述,該描述連同模塊名在客戶連接得到模塊列表時顯示給客戶 | 無 |
2. 模塊控制參數
參數 | 說明 | 默認值 |
---|---|---|
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 |
3. 模塊文件篩選參數
參數 | 說明 | 默認值 |
---|---|---|
exclude | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式 | 空 |
exclude from | 指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義 | 空 |
include | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 | 空 |
include from | 指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義 | 空 |
一個模塊只能指定一個 exclude 參數、一個 include 參數。
結合 include 和 exclude 可以定義復雜的 exclude/include 規則 。
這幾個參數分別與相應的 rsync 客戶命令選項等價,唯一不同的是它們作用在服務器端。
關於如何書寫規則文件的內容請參見 rsync 客戶端。
4. 模塊用戶認證參數
參數 | 說明 | 默認值 |
---|---|---|
auth users | 指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裏的用戶和系統用戶沒有任何關系。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中 | (匿名方式) |
secrets file | 指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起作用 | 空 |
strict modes | 指定是否監測口令文件的權限。若為 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件 | true |
rsync 認證口令文件的權限一定是 600,否則客戶端將不能連接服務器
rsync 認證口令文件中每一行指定一個 用戶名:口令 對,格式為:
以 “#” 開始的行為註釋行
username:passwd
一般來說口令最好不要超過8個字符。
若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。
5. 模塊訪問控制參數
參數 | 說明 | 默認值 |
---|---|---|
hosts allow | 用一個主機列表指定哪些主機客戶允許連接該模塊。不匹配主機列表的主機將被拒絕 | * |
hosts deny | 用一個主機列表指定哪些主機客戶不允許連接該模塊 | 空 |
客戶主機列表定義可以是以下形式:
單個IP地址。例如:192.168.0.1
整個網段。例如:192.168.0.0/24,192.168.0.0/255.255.255.0
可解析的單個主機名。例如:centos,centos.smartraining.cn
域內的所有主機。例如:*.smartraining.cn
“*”則表示所有。
多個列表項要用空格間隔。
6. 模塊日誌參數
參數 | 說明 | 默認值 |
---|---|---|
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 服務器與備份
3.1 何時使用 rsync 服務器
若用戶在遠程主機上有登錄帳號,通常可以使用 ssh 方式運行 rsync 而不必配置 rsync 服務。
由於 rsync 服務使用明文口令,所以在不可信任的網絡中應該盡量使用 ssh 方式運行 rsync。
在可信任的網絡中可以配置使用 rsync 服務器,當然也可以使用 ssh 方式運行 rsync。
最需要架設 rsync 服務器的理由恐怕就是匿名 rsync 服務器了,它可以為客戶提供匿名訪問的同步資源,
例如:允許用戶同步 FTP 軟件資源、Linux 發行版本的軟件倉庫等。
3.2 部署 rsync 服務器的兩種方法
為了備份數據,如何在網絡中部署 rsync 服務器呢?通常有兩種方法:
1. 在生產服務器上同時運行 rsync 服務
rsync 服務以只讀方式提供要備份的數據,從而避免破壞生產服務器上的數據
根據需要,可以配置一個或多個(為了避免風險)主機作為備份主機
在每個備份主機上以”拉”的方式從生產服務器將數據同步到備份主機
2. 在備份服務器上運行 rsync 服務
備份服務器實際上是個數據倉庫,它集中收集了網絡中所有要備份的主機的數據
備份服務器上運行的 rsync 服務以讀寫方式提供備份空間
根據需要,可以配置一個或多個(為了避免風險)備份服務器
在每臺要備份的主機(包括生產服務器)上以”推”的方式將備份數據寫入備份服務器
上述關於備份的思想方法同樣也適用於以 ssh 方式運行 rsync 的情況。當然這時無需架設 rsync 服務,所需考慮的問題僅僅是應該以”推”方式運行還是以”拉”方式運行。
rsync服務簡介(補充)