上一節講述了使用 rsync 客戶命令進行同步和備份的內容。rsync 還能夠以守護進程(daemon)方式運行,若一臺主機以 daemon 模式運行 rsync,通常稱其爲 rsync 服務器。rsync 的 C/S 方式運行方式概述以下:html
rsync 命令既是客戶端程序,同時也是服務程序。在運行 rsync 服務時使用特殊的命令選項,經常使用的服務選項有:linux
選項 | 說明 |
---|---|
–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 用於客戶的選項請參見上節。ubuntu
CentOS 默認以 xinetd 方式運行 rsync 服務。rsync 的 xinetd 配置文件
在 /etc/xinetd.d/rsync。要配置以 xinetd 運行的 rsync 服務須要執行以下的命令:centos
# chkconfig rsync on
# service xinetd restart
管理員能夠修改 /etc/xinetd.d/rsync 配置文件以適合您的須要。例如,您能夠修改配置行安全
server_args = --daemon
在後面添加 rsync 的服務選項。服務器
最簡單的獨立運行 rsync 服務的方法是執行以下的命令:網絡
/usr/bin/rsync --daemon
您能夠將上面的命令寫入 /etc/rc.local 文件以便在每次啓動服務器時運行 rsync 服務。固然,您也能夠寫一個腳本在開機時自動啓動 rysnc 服務。架構
兩種 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 由全局配置和若干模塊配置組成。配置文件的語法爲:ssh
在文件中 [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 來指定的。能夠根據本身的須要,來指定多個模塊,模塊中能夠定義如下參數:
一、基本模塊參數
參數 | 說明 | 默認值 |
---|---|---|
path | 指定當前模塊在 rsync 服務器上的同步路徑,該參數是必須指定的。 | 無 |
comment | 給模塊指定一個描述,該描述連同模塊名在客戶鏈接獲得模塊列表時顯示給客戶。 | 無 |
二、模塊控制參數
參數 | 說明 | 默認值 |
---|---|---|
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 |
三、模塊文件篩選參數
參數 | 說明 | 默認值 |
---|---|---|
exclude | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 –exclude 來指定模式。 | 空 |
exclude from | 指定一個包含 exclude 規則定義的文件名,服務器從該文件中讀取 exclude 列表定義。 | 空 |
include | 指定多個由空格隔開的多個文件或目錄(相對路徑),並將其添加到 include 列表中。這等同於在客戶端命令中使用 –include 來指定模式 。 | 空 |
include from | 指定一個包含 include 規則定義的文件名,服務器從該文件中讀取 include 列表定義。 | 空 |
四、模塊用戶認證參數
參數 | 說明 | 默認值 |
---|---|---|
auth users | 指定由空格或逗號分隔的用戶名列表,只有這些用戶才容許鏈接該模塊。這裏的用戶和系統用戶沒有任何關係。用戶名和口令以明文方式存放在 secrets file 參數指定的文件中。 | (匿名方式) |
secrets file | 指定一個 rsync 認證口令文件。只有在 auth users 被定義時,該文件才起做用。 | 空 |
strict modes | 指定是否監測口令文件的權限。若爲 true 則口令文件只能被 rsync 服務器運行身份的用戶訪問,其餘任何用戶不能夠訪問該文件。 | true |
# 以 "#" 開始的行爲註釋行 username:passwd # 通常來講口令最好不要超過8個字符。
若您只配置匿名訪問的 rsync 服務器,則無需設置上述參數。 五、模塊訪問控制參數
參數 | 說明 | 默認值 |
---|---|---|
hosts allow | 用一個主機列表指定哪些主機客戶容許鏈接該模塊。不匹配主機列表的主機將被拒絕。 | * |
hosts deny | 用一個主機列表指定哪些主機客戶不容許鏈接該模塊。 | 空 |
客戶主機列表定義能夠是如下形式:
六、模塊日誌參數
參數 | 說明 | 默認值 |
---|---|---|
transfer logging | 使 rsync 服務器將傳輸操做記錄到傳輸日誌文件。 | false |
log format | 指定傳輸日誌文件的字段。 | 」%o %h [%a] %m (%u) %f %l」 |
* 設置了」log file」參數時,在日誌每行的開始會添加」%t [%p]「。
例如:容許用戶同步 FTP 軟件資源、Linux 發行版本的軟件倉庫等。
爲了備份數據,如何在網絡中部署 rsync 服務器呢?一般有兩種方法:
上述關於備份的思想方法一樣也適用於以 ssh 方式運行 rsync 的狀況。固然這時無需架設 rsync 服務,所需考慮的問題僅僅是應該以」推」方式運行仍是以」拉」方式運行。
下面給出幾個使用 rsync 服務器的示例。
假設網路中有以下3臺計算機
一、編輯配置文件
# vi /etc/rsyncd/rsyncd.conf
uid = nobody gid = nobody syslog facility = local3 use chroot = yes read only = yes max connections = 4 timeout = 300 motd file = /etc/rsyncd/rsyncd.motd pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock hosts allow=192.168.0.221 192.168.0.222 hosts deny=* secrets file = /etc/rsyncd/rsyncd.secrets auth users = bua,bub list=yes [home] uid = root gid = root path = /home comment = product server home exclude = www/ samba/ ftp/ [www] path = /home/www comment = product server www exclude = logs/
下面考查一些權限問題:
# tree /home -p /home |-- [drwx------] crq |-- [drwxr-xr-x] ftp |-- [drwx------] osmond |-- [drwxr-xr-x] samba `-- [drwxr-xr-x] www |-- [drwxr-xr-x] cgi-bin |-- [drwxr-xr-x] fcgi-bin |-- [drwxr-xr-x] htdocs `-- [drwxr-xr-x] logs
從上面的目錄權限可知,每一個用戶的自家目錄對組和其餘用戶沒有任何權限。當 uid 和 gid 設置爲 nobody時,rsync客戶端因爲無權進入用戶的自家目錄,因此不能同步各個自家目錄下的內容。爲此,[home] 部分將 uid 和 gid 設置爲 root。
rsyncd 默認將日誌寫入 /var/log/messages 文件,上面的 「syslog facility = local3」 配置將使用LOCAL3 日誌設備(facility)。 爲此須要在 /etc/syslog.conf 文件中添加以下行:
local3.info /var/log/rsync.log
而後使用以下命令從新啓動 syslog
# service syslog restart
二、編輯 rsync 服務的口令文件
# touch /etc/rsyncd/rsyncd.secrets # chmod 600 /etc/rsyncd/rsyncd.secrets # vi /etc/rsyncd/rsyncd.secrets
bua:backupa-s-password bub:backupb-s-password
不要在 /etc/rsyncd/rsyncd.secrets 中使用與同名系統用戶賬號相同的口令。 三、以 xinetd 運行 rsync 服務
# chkconfig rsync on
# service xinetd restart
四、配置防火牆
使用 iptables 配置容許 rsync服務端口(默認爲 873)經過,同時限制 rsync 客戶端的鏈接。
例如:
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -s ! 192.168.0.221 --dport 873 -j DROP
可使用以下命令查看添加的防火牆規則:
# iptables -L
下面配置 rsync 服務器的客戶端。下面以 backupa(192.168.0.221)爲例進行說明。
首先可使用以下的命令查看服務器上提供的同步資源:
rsync --list-only bua@192.168.0.220:: rsync --list-only rsync://bua@192.168.0.220/home
而後就能夠在客戶端配置同步了,配置方法至關靈活,您能夠根據本身須要選擇不一樣的配置方法。
1)簡單同步(不保存歷史歸檔)
rsync -avzP --delete bua@192.168.0.220::home /backups/192.168.0.220/home rsync -avzP --delete rsync://bua@192.168.0.220/www /backups/192.168.0.220/www
2)徹底備份(保存歷史歸檔)
rsync -avzP --delete bua@192.168.0.220::home /backups/192.168.0.220/$(date +'%y-%m-%d')/home rsync -avzP --delete rsync://bua@192.168.0.220/www /backups/192.168.0.220/$(date +'%y-%m-%d')/www
上面的方法雖然簡單,可是效率不高。由於每次都將服務器提供的資源同步到不一樣的目錄(由於時間在變),因此這隻至關於使用 scp 命令進行遠程拷貝。
上面的命令沒有使用 rsync 的優點功能(即只傳輸有變化的部分),爲此作以下改進:
首先在備份主機上部署以下的目錄:
/backups/192.168.0.220/current # 存放同步的目錄 /backups/192.168.0.220/archive # 存放歸檔的目錄
接着使用以下命令進行同步:
rsync -avzP --delete bua@192.168.0.220::home /backups/192.168.0.220/current/home rsync -avzP --delete rsync://bua@192.168.0.220/www /backups/192.168.0.220/current/www
同步以後在備份主機上使用以下命令保存歸檔:
tar -cjf /backups/192.168.0.220/archive/home-$(date +'%y-%m-%d').tbz \ -C /backups/192.168.0.220/current/home . tar -cjf /backups/192.168.0.220/archive/www-$(date +'%y-%m-%d').tbz \ -C /backups/192.168.0.220/current/www .
這種改進方法具備以下優勢:
所以,若須要進行遠程的包含歸檔文件的徹底備份,上述方法優於在生產服務器執行 tar 命令而後再上傳到備份主機的方法。
若您要在 cron 中執行 rsync,須要在 rsync 命令中添加相似以下的指定口令文件的選項,以免在終端上輸入口令:
--password-file=/root/rsync.password
而後在備份主機上生成口令文件:
echo "backupa-s-password"> /root/rsync.password chmod 600 /root/rsync.password
3)增量備份(保存歷史歸檔)
您能夠參考上一節的內容編寫腳本實現普通型增量備份或快照型增量備份。
爲了提供安全性,應該配置一個以上的備份主機。配置方法有兩種:
假設網路中有以下4臺計算機
只需在一臺備份服務器上配置 rsync 服務。例如,在備份服務器A上配置 rsync 服務,而後在備份服務器B上使用 rsync 客戶命令同步備份服務器A便可。
下面在 backupa (192.168.0.221)上配置備份服務器。
一、編輯配置文件
# vi /etc/rsyncd/rsyncd.conf
uid = root gid = root syslog facility = local3 use chroot = yes read only = no max connections = 20 timeout = 300 motd file = /etc/rsyncd/rsyncd.motd pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock hosts allow=192.168.0.0/24 hosts deny=* secrets file = /etc/rsyncd/rsyncd.secrets [hosta-home] path = /backups/hosta/home comment = hosta home list=yes auth users = hosta [hosta-www] path = /backups/hosta/www comment = hosta www list=yes auth users = hosta [hostb-home] path = /backups/hostb/home comment = hostb home list=yes auth users = hostb [hostb-www] path = /backups/hostb/www comment = hostb www list=yes auth users = hostb
二、編輯 rsync 服務的口令文件
# touch /etc/rsyncd/rsyncd.secrets # chmod 600 /etc/rsyncd/rsyncd.secrets # vi /etc/rsyncd/rsyncd.secrets
hosta:hosta-s-password hostb:hostb-s-password
三、建立系統賬號
# useradd hosta # useradd hostb # 若不容許系統登陸,則無需設置用戶口令
四、獨立運行 rsync 服務
# chkconfig rsync off # service xinetd restart # echo "/usr/bin/rsync --daemon">>/etc/rc.local # /usr/bin/rsync --daemon
五、配置防火牆 使用 iptables 配置容許 rsync服務端口(默認爲 873)經過,同時限制 rsync 客戶端的鏈接。
例如:
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
# iptables -A INPUT -p tcp -s ! 192.168.0.0/24 --dport 873 -j DROP
可使用以下命令查看添加的防火牆規則:
# iptables -L
下面配置 rsync 服務器的客戶端。每一個 rsync 客戶端的配置方法都是相似的。下面以 hosta(192.168.0.111)爲例進行說明。
首先可使用以下的命令查看服務器上提供的同步資源:
rsync --list-only hosta@192.168.0.221:: rsync --list-only rsync://hosta@192.168.0.221/hosta-home
而後就能夠在客戶端以推方式同步到服務器了。
rsync -avzP --delete --exclude "lost+found/" /home/ hosta@192.168.0.221::hosta-home rsync -avzP --delete /www/ rsync://hosta@192.168.0.221/hosta-www
若您要在 cron 中執行 rsync,須要在 rsync 命令中添加相似以下的指定口令文件的選項,以免在終端上輸入口令:
--password-file=/root/rsync.password
而後在備份主機上生成口令文件:
echo "hosta-s-password"> /root/rsync.password chmod 600 /root/rsync.password
最簡單的 rsync 服務器配置就是匿名服務器。下面說明配置步驟。
一、編輯配置文件
# vi /etc/rsyncd/rsyncd.conf
uid = nobody gid = nobody syslog facility = local3 use chroot = yes read only = yes timeout = 600 motd file = /etc/rsyncd/rsyncd.motd pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock list=yes # 設置匿名訪問的 Centos 倉庫的同步資源 [centos] path = /var/www/mirror/centos comment = Centos Repository max connections = 30 # 設置匿名訪問的 ubuntu 倉庫的同步資源 [ubuntu] path = /var/www/mirror/ubuntu comment = Ubuntu Repository max connections = 30 # 設置匿名訪問的 Ubuntu CN 倉庫的同步資源 [ubuntu-cn] path = /var/www/mirror/ubuntu-cn comment = Ubuntu CN Repository max connections = 30 # 設置匿名訪問的 FTP 服務器的同步資源 [ftp] path = /var/ftp/pub comment = Anonymous FTP server max connections = 10 # 也能夠同時設置其餘非匿名訪問的同步資源 [tmp] path = /tmp comment = Temporary Directory read only = no hosts allow=192.168.0.0/24 127.0.0.0/8 *.sinosmond.com hosts deny=* secrets file = /etc/rsyncd/rsyncd.secrets auth users = user1,user2 max connections = 5
二、編輯 rsync 服務的口令文件
# touch /etc/rsyncd/rsyncd.secrets # chmod 600 /etc/rsyncd/rsyncd.secrets # vi /etc/rsyncd/rsyncd.secrets
user1:user1-s-password user2:user2-s-password
不要在 /etc/rsyncd/rsyncd.secrets 中使用與同名系統用戶賬號相同的口令。
三、獨立運行 rsync 服務
# chkconfig rsync off # service xinetd restart # echo "/usr/bin/rsync --daemon">>/etc/rc.local # /usr/bin/rsync --daemon
四、配置防火牆
使用 iptables 配置容許 rsync服務端口(默認爲 873)經過,同時限制 rsync 客戶端的鏈接。
例如:
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
可使用以下命令查看添加的防火牆規則:
# iptables -L
有關如何使用 rsync 客戶命令從匿名服務器同步數據的內容請參考上一節。