RSYNC簡介:html
Rsync (remote sync)是一款開源、快速,多功能、可實現增量的本地或遠程數據鏡像同步備份優秀工具。它可經過 LAN/WAN 快速同步多臺主機間的文件。Rsync 原本是用以取代rcp 的一個工具,它當前由 Rsync.samba.org 維護。Rsync 使用所謂的「Rsync演算法」來使本地和遠程主機之間的文件達到同步,該算法只傳送兩個文件中的不一樣部分,而不是每次都整份傳送,所以速度至關快。linux
Rsync支持大多數的類 Unix 系統,不管是 Linux、Solaris 仍是 BSD 上都通過了良好的測試。此外,它在windows 平臺下也有相應的版本,比較知名的有 cwRsync 和 Sync2NAS。c++
RSYNC的特性:web
一、支持拷貝特殊文件如連接、設備等。算法
二、能夠有排除制定文件或目錄同步的功能,至關於打包命令tar。shell
三、能夠作到保持原來文件或目錄的權限、時間、軟硬鏈接等全部屬性均不改變。vim
四、可實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高。windows
五、可使用rcp,rsh,ssh等方式配合傳輸文件,也能夠經過直接的socket鏈接。安全
六、支持匿名的或認證的進程模式傳輸,方便進行數據備份及鏡像服務器
七、優化的流程,文件傳輸效率高
RSYNC工做模式:
Rsync有四種工做模式,具體以下:
一、列表模式
和ls -l類似,負責列出源的內容。不只能夠看本地還能夠看遠端。
二、shell模式,也稱爲本地模式
和cp類似,本地拷貝文件
三、遠程shell模式,能夠經過經過rcp,ssh等通道傳輸
和rcp類似,不過能夠實現增量備份,而且可以經過安全的ssh方式進行數據傳輸。
四、服務器模式
在這種模式下,rsync 守護進程在一臺機器上永久運行,接收文件傳輸請求。能夠把文件發送給守護進程,也能夠向它請求文件。服務器模式很是適合建立中心備份服務器或項目存儲庫。
以上是對rsync作的一個簡單介紹,下面來安裝一下rsync,而後再詳細介紹咱們rsync的四種工做模式!
環境
CentOS6.5 x86_64位 採用最小化安裝,系統通過了基本優化
selinux爲關閉狀態,iptables爲無限制模式
源碼包存放位置:/root
在安裝以前,首先讓咱們看下系統上是否已經安裝了rsync。
[root@rsync-server ~]# rpm -qa|grep rsync
rsync-3.0.6-9.el6_4.1.x86_64
若是出現如上的狀況,說明咱們的系統已經安裝了rsync。若是沒有出現,就說明沒有安裝。
若是系統沒有安裝,咱們就須要本身安裝了。安裝rsync的方式一共有2種,一種是基於包管理器安裝,好比rpm包之類,另一種是基於源碼安裝。
一、基於包管理器安裝
[root@rsync-server ~]# yum install rsync -y
二、基於源碼安裝
a、安裝缺乏的gcc和庫文件等
[root@rsync-server ~]# yum install -y kernel-headers glibc-headers glibc-devel libgomp gcc gcc-c++
b、安裝rsync
[root@rsync-server ~]# wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz
[root@rsync-server ~]# tar zxvf rsync-3.1.1.tar.gz
[root@rsync-server ~]# cd rsync-3.1.1
[root@rsync-server rsync-3.1.1]# ./configure --prefix=/usr/local/rsync[root@rsync-server rsync-3.1.1]# make && make install
這樣子rsync就安裝完成了。
咱們須要注意的是,源碼安裝的rsync默認是沒有加入xinetd的,所以你會發現,在/etc/xinetd.d目錄下找不到rsync文件。
下面,我就開始帶着你們一塊兒來了解下rsync的四種模式!
一、列表模式(list mode)
Rsync的列表模式,即等同於在實現 ls -l 的功能。咱們能夠經過分別執行rsync和ls命令來觀察區別。
[root@rsync-server /]# rsync /rsync
drwxr-xr-x 4096 2014/06/04 00:45:06 rsync
[root@rsync-server /]# rsync /rsync/
drwxr-xr-x 4096 2014/06/04 00:45:06 .
-rw-r--r-- 0 2014/06/04 00:45:01 a
-rw-r--r-- 0 2014/06/04 00:45:03 b
-rw-r--r-- 0 2014/06/04 00:45:05 c
-rw-r--r-- 0 2014/06/04 00:45:06 d
[root@rsync-server /]# ls -dl /rsync
drwxr-xr-x. 2 root root 4096 Jun 4 00:45 /rsync
[root@rsync-server /]# ls -l /rsync
total 0
-rw-r--r--. 1 root root 0 Jun 4 00:45 a
-rw-r--r--. 1 root root 0 Jun 4 00:45 b
-rw-r--r--. 1 root root 0 Jun 4 00:45 c
-rw-r--r--. 1 root root 0 Jun 4 00:45 d
經過上面的輸出,能夠看出來,rsync後跟文件或目錄和ls -l後跟文件和目錄的效果大致相同(不同的細節,這裏很少描述)。須要注意的是,若是你身處某個目錄,你ll能查看到所在目錄下文件列表的詳細信息。可是你執行rsync會報錯,所以rsync必須後跟文件或目錄才能查看相關的詳細信息。
另外,rsync的列表模式是支持對遠端的目錄進行查看的,而ls -l是不具有這個功能的。
[root@rsync-server /]#
二、Shell模式(shell mode)
在 RSYNC 的 shell 模式(本地模式)中,我會列舉rsync命令的用法和常規選項信息。
首先來看下 RSYNC 的命令語法:
rsync [OPTION]... SRC [SRC]... DEST
執行rsync --help可獲得上面輸出,固然輸出不只僅只有上面這一條,我僅僅將shell模式的語句摘了出來。下面對該條語句進行拆解。
rsync [OPTION]... SRC [SRC]... DEST
1)rsync爲同步的命令
2)[OPTION]... 爲同步時的參數選項
3)SRC爲源,即須要拷貝的分區,文件或目錄等
4)[DEST]爲目地分區,文件或目錄等
rsync 經常使用的參數選項有以下:
-n : 若是擔憂命令執行不正確,一同步複製,可能這個複製的後果是致命的,那後果可就嚴重了,這裏咱們能夠加-n先測試一下
-v : --verbose,詳細輸出模式,顯示詳細過程
-q : --quiet,靜默模式,儘量輸出少的信息
-c : --checksum,能夠對傳輸的文件進行較驗的,強制對文件傳輸進行校驗
-r : --recursive,遞歸複製
-p : --perms,保存文件的權限
-t : --times,保留文件的時間戳
-l : --links,保留文件的符號連接
-u : update, 僅僅進行更新發生變化的數據
-g : --group,保留文件的屬組
-o : --owner,保留文件的屬主
-D : --devices,保留設備文件
-A : --acls,保留acl訪問控制列表
-a : --archives歸檔,複製時能夠保存原有的屬主屬主等屬性信息,甚至包括一點額外的屬性。等同於-rlptgoD
-e SSH : 遠程複製時,表示使用ssh協議做承載。若是ssh端口不是22,能夠用-e ‘ssh -p 22’
-z : 基於網絡時使用,對文件壓縮後傳輸
--progress : 顯示壓縮進度條的,簡寫-P
--stats : 顯示如何執行壓縮和傳輸的,也就是顯示傳輸狀態的
--
更多的詳細信息,請經過man rsync來進行查看。
須要注意的是:rsync命令在使用中,若是源參數的末尾有斜線,就會複製指定目錄內的內容,而不復制目錄自己;若是沒有斜線,則會複製目錄自己。目標參數的末尾有沒有斜線都不影響。
接下來,請看下面兩個例子:
[root@rsync-server /]# rsync -a /rsync /backup #會把目錄rsync直接同步至/backup目錄中去
[root@rsync-server /]# rsync -a /rsync/ /backup #會把目錄中的data/中的內容同步至/backups目錄中
如今,咱們在shell模式下,進行rsync的同步。
實例1:測試本地rsync同步
[root@rsync-server ~]# mkdir /rsync #建立rsync測試目錄
[root@rsync-server ~]# touch /rsync/test #在rsync測試目錄下創建test.txt文件
[root@rsync-server ~]# chmod -R 700 /rsync #受權一下以查看同步後是否是保持了權限屬性
[root@rsync-server rsync]# ll -a /rsync/
total 8
drwx------. 2 root root 4096 Jun 4 01:01 .
dr-xr-xr-x. 26 root root 4096 Jun 4 01:01 ..
-rwx------. 1 root root 0 Jun 4 01:01 test
[root@rsync-server ~]# rsync -avz /rsync/ /tmp
sending incremental file list
./
test
sent 78 bytes received 34 bytes 224.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-server ~]# ls -l /tmp/test
-rwx------. 1 root root 0 Jun 4 01:01 /tmp/test
上面的例子,演示了將本地/rsync目錄下的文件,同步到/tmp目錄下。其中使用的參數,-avz上面講過。若是不明白,能夠去上面看每一個參數的詳細介紹。
三、遠程shell模式(remote shell mode)
遠程shell模式的話,和shell模式是殊途同歸。只不過,由於是要經過遠程,所以咱們須要指定遠程主機的IP,若是採用ssh咱們還須要指定ssh的端口等等。
遠程shell模式,常規分爲以下兩種狀況,其語法分別爲:
拉取pull :rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
推送push:rsync [OPTION]... [USER@]HOST:SRC [DEST]
下面爲你們拆解一下命令:
1)Rsync爲同步的命令
2)[OPTION]... 爲同步時的參數選項
3)[USER@]HOST... 爲Rsync同步的遠程的鏈接用戶和主機地址
4)SRC爲源,即須要拷貝的分區、文件或目錄等,和HOST之間用一個冒號鏈接
5)[DEST]爲目地分區、文件或目錄等
你們能夠發現,拉取和推送,不同的地方就是源和目標換了位置。其中拉取,表示從遠端主機把數據同步到執行命令的本地主機相應目錄。(須要注意,拉取的話,遠端主機上必定要安裝rsync,否則會拉取失敗)。推送,表示從本地主機執行命令把本地的數據同步到遠端主機指定目錄下
下面咱們來看一個案例:
拉取實例:
老大要求拉取172.16.100.1這臺服務器上的etc目錄到咱們的備份服務器172.16.100.2上的/backup目錄下。
操做:
經過ssh鏈接到172.16.100.1這臺服務器上,而後執行以下命令:
[root@rsync-server ~]# rsync -vzrtopg --progress -e ‘ssh -p 22’ root@172.16.100.1:/etc /backup
語法說明:
1)-vzrtopg 至關於上文的-avz,表示同步時文件和目錄屬性不變。
2)--progress 顯示同步的過程,能夠用-p替換
3)-e ‘ssh -p 22’,表示經過ssh的通道傳輸數據。若是ssh是默認的22號端口,此處的-p 22可省略。
4)root@192.168.1.111:/etc 遠程的主機用戶,地址,路徑
5)/backup本地(172.16.100.2)的路徑
推送實例:
公司內部有一臺svn服務器(172.16.100.2),公司站點的更新代碼經過後臺的測試服務器測試以後,通過svn同步到svn服務器。老大要求你將svn服務器上的代碼,推送到前臺的服務器(172.16.100.1)上。
操做:經過ssh鏈接到svn服務器(172.16.100.2)上,而後執行以下命令
[root@rsync-server ~]# rsync -avz --progress -e ‘shh -p 22’ /webrepo root@172.16.100.1:/data/web/html
特別說明:
1)上面兩個例子中的數據同步都是加密傳輸的,由於是經過ssh通道進行數據傳輸的。
2)在傳輸前須要進行鏈接用戶(通常爲系統用戶)密碼驗證,須要手工輸入。這裏咱們能夠經過配置ssh互信來實現免驗證方式同步。
3)rsync軟件必須安裝在本地及遠程服務器上
四、服務模式(daemon mode)
RSYNC的服務模式,部署時分爲rsync的服務端和rsync的客戶端。須要注意的是,rsync 的服務端和客戶端都是一個軟件包,若是你啓用了 rsync 的服務模式,則該主機就變成 rsync 服務器。所以咱們須要將 rsync 分別安裝於服務端和客戶端,服務端和客戶端使用同一個 rsync 軟件包來實現遠程鏡像和按期同步更新。
rsync 服務端可同時備份多個客戶端的數據,多個服務端備份一個客戶端的數據。 rsync 默認端口爲 873,服務器在該端口接收客戶的匿名或者認證方式的備份請求。
rsync 服務端在使用以前須要進行必要的配置,其配置文件爲 /etc/rsyncd.conf,該文件默認沒有,須要本身手動建立。Rsync服務端經過/etc/rsyncd.conf進行認證、訪問、日誌記錄等控制,該配置文件包括全局參數、模塊參數等設置。
rsyncd.conf 文件中 [module] 以前的全部參數爲全局參數,也能夠在全局參數部分定義模塊參數。在這種狀況下該參數的值就是全部模塊的默認值。全局參數設置程序使用的端口號,指定消息文件、日誌文件 pid 文件以及發送日誌消息的級別。模塊參數主要定義服務端哪一個目錄須要被同步。用戶可根據不一樣的須要指定多個模塊,每一個模塊對應須要備份的一個目錄樹,即如有 N 個須要備份的目錄樹,則須要 N 個模塊與之對應。模塊中能夠定義許多參數。下面,咱們拿出來一個rsyncd.conf文件,來給你們作詳解:
uid = rsync # 指定的模塊傳輸文件時所用的用戶身份
gid = rsync # 指定的site模塊傳輸文件時所用的用戶組身份
port=873 # 默認端口
use chroot = no # 默認爲true,修改成no,增長對目錄文件軟鏈接的備份
max connections = 200 # 指定最大併發鏈接數以保護服務器,超過限制的鏈接請求將被告知隨後再試。默認值爲 0,即沒有限制。
timeout = 300 # 服務器會話的超時時間
pid file = /var/run/rsyncd.pid # 進程啓動後,進程號存放路徑
lock file = /var/run/rsyncd.lock # 服務啓動、中止會用到鎖文件
log file = /var/log/rsyncd.log # 指定日誌文件的路徑
Log fromat = %h %o %f %l %b # 指定日誌記錄的格式
motd file = /etc/rsyncd.motd # 登錄消息提示文件,能夠不配置。默認爲空。
[test] # 模塊名稱,名稱能夠任意寫,不過通常是以路徑命名,最好見名意
Comment = test # 模塊信息描述,該描述連同模塊名在客戶鏈接獲得模塊列表時顯示給客戶。默認沒有描述定義
path=/test/ # 指定供備份的目錄路徑,必須指定該參數。該目錄路徑是rsync服務端的一個路徑,提供給客戶端上傳或下載
ignore erros # 忽略錯誤
read only = false # 設定是否容許客戶上載文件。若爲 true 任何上載請求均會失敗,若爲 false 且客戶端擁有服務器目錄讀寫權限則能夠上載。默認值爲 true 。
write only 設定是否容許客戶下載文件。若爲 true 任何下載請求均會失敗,默認值爲 false 。
list = false # 設定當客戶請求可使用的模塊列表時,是否列出該模塊。若爲 false,則建立隱藏的模塊。默認值爲 true
hosts allow=192.168.137.0/24 # 指定容許客戶鏈接的 IP 地址。能夠爲單個 IP 地址或整個網段。多個 IP 或網段須要以空格隔開。默認是容許全部主機鏈接。
hosts deny=* # 指定拒絕鏈接的客戶IP地址,設置方式和hosts allow相同。
Dont commpress # 指定不進行壓縮處理便可傳輸的文件,默認值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
auth users = rsync_backup # 該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才容許鏈接該模塊。這裏的用戶不必定是客戶端存在的用戶。若是"auth users"被設置,那麼客戶端發出對該模塊的鏈接請求時,須要對用戶身份進行驗證。用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認狀況下無需密碼就能夠鏈接模塊 ( 也就是匿名方式 )。
secrets file = /etc/rsync.password # 虛擬用戶的密碼文件
exclude = common/ # 用來指定多個由空格隔開的多個文件或目錄 ( 相對路徑 ),並將其添加到 exclude 列表中。這等同於在客戶端命令中使用 --exclude 參數。一個模塊只能指定一個 exclude 選項。可是須要注意的一點是該選項有必定的安全性問題,客戶端頗有可能繞過 exclude 列表,若是但願確保特定的文件不能被訪問,那就最好結合 uid/gid 選項一塊兒使用。
pre-xfer exec, post-xfer exec # 設置可在文件傳輸前/後執行的命令。若在文件傳輸前執行的命令失敗,則取消本次傳輸操做。
以上就是,rsyncd.conf的詳細配置信息了。我將不少的默認不顯示的參數也列舉了出來,你們使用的時候能夠靈活掌握。
下面,我就帶你們來一塊兒配置一個 rsync的服務端和rsync的客戶端!
環境
CentOS6.5 x86_64位 採用最小化安裝,系統通過了基本優化
selinux爲關閉狀態,iptables爲無限制模式
源碼包存放位置:/root
服務器架構:
rsync-server:172.16.100.1
rsync-client:172.16.100.2
RSYNC 服務端部署:
一、安裝rsync,而且配置服務端主配置文件
[root@rsync-server ~]# yum install rsync -y
[root@rsync-server ~]# vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.100.0/24
hosts deny = *
auth users = rsync_backup
secrets file = /etc/rsync.password
[sunsky]
path = /test
二、建立 rsync.password 做爲用戶密碼文件
[root@rsync-server ~]# touch /etc/rsync.passord
[root@rsync-server ~]# chmod 600 /etc/rsyncd.password
[root@rsync-server ~]# vim rsyncd.password #裏面記錄條目的格式爲「用戶 : 密碼」
rsync_backup:redhat
ps: /etc/rsyncd.password 的權限必須是600,客戶端的/etc/rsync.password也必須爲600,否則請求文件時會報錯
三、(可選)建立 rsync.motd 做爲登陸消息文件。該文件爲選擇性配置文件,生產環境不推薦使用。
[root@rsync-server ~]# touch /etc/rsyncd.motd
[root@rsync-server ~]# vim rsyncd.conf
============================
This is Critical Data Server
=============================
四、建立模塊中指定的文件
[root@rsync-server ~]# mkdir /test
[root@rsync-server ~]# chown root.root /test #更改目錄的權限爲rsyncd.conf中uid和gid指定屬主和屬組
五、以守護進程方式啓動 rsync
Rsync服務端的啓動分2種,一種是交給 xinetd 去管理,另外就是本身手動配置守護進程。
A、手動配置rsync守護進程
[root@rsync-server ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf #注意若是你的rsyncd.conf文件在/etc/目錄下,就不須要再用--config去指定了。--daemon是以守護進程的方式啓動
咱們能夠將上面的命令寫入 /etc/rc.local 中,這樣當系統啓動時,就會自動以守護進程的方式去運行 rsync。
補充:
重啓rsync的組合命令
[root@rsync-server ~]# pkill rsync #關閉rsync服務
[root@rsync-server ~]# rsync --daemon #啓動rsync服務
[root@rsync-server ~]# ps -ef | grep rsync #檢查是否啓動
B、交由xinetd管理
[root@rsync-server ~]# yum install xinetd #安裝xinetd
[root@rsync-server ~]# vim /etc/xinetd.d/rsync
disable= no # 默認爲yes,須要將他設置爲no,讓xinetd接管rsync服務。注意,若是你使用手動的方式,這裏就修改成no,即拒絕xinetd接管rsync服務。
[root@rsync-server ~]# /etc/init.d/xinetd start # 啓動xinetd服務,則默認會以守護進程方式啓動rsync 服務
六、檢查服務狀態
[root@rsync-server ~]# netstat -lntup |grep 873
[root@rsync-server test]# netstat -lntup |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 10234/rsync
tcp 0 0 :::873 :::* LISTEN 10234/rsync
或者
[root@rsync-server ~]# lsof -i tcp:873
[root@a test]# lsof -i tcp:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 10234 root 3u IPv4 93239 0t0 TCP *:rsync (LISTEN)
rsync 10234 root 5u IPv6 93240 0t0 TCP *:rsync (LISTEN)
補充:
手動啓動rsync的常見參數:
[root@rsync-server ~]# rsync --daemon # daemon 表示以守護進程的方式啓動rsync服務
經常使用啓動參數:
--daemon # 表示以守護進程的方式啓動rsync服務
--address # 綁定指定ip地址提供服務,即服務器是多網卡模式或多虛擬IP模式,須要指定某個固定ip提供服務
--config=FILE # 更改配置文件路徑,而不去使用默認的/etc/rsyncd.conf
--port=PORT # 更改其它端口提供服務,而不去使用模式的873端口。
以上即爲rsync服務端的整個配置步驟了!
RSYNC 服務端已經部署完畢,接下來若是要使用的話,確定還須要搭配 rsync 客戶端才行!下面就來看,rsync客戶端怎麼部署!
RSYNC 客戶端部署
RSYNC 客戶端部署起來很是簡單,咱們僅僅須要安裝 rsync 軟件,而後建立一個本地密碼文件。該密碼文件爲對應rsync 服務端配置文件裏面每一個模塊下面的虛擬用戶的密碼,以此來實現免密碼同步!
操做以下:
一、安裝rsync
[root@rsync-server ~]# yum install rsync -y
二、配置本地密碼文件
[root@rsync-server ~]# vim /etc/rsync.password # 該文件裏面僅存放密碼便可
redhat
[root@rsync-server ~]# cat /etc/rsync.password # 配置完畢以後檢查
[root@rsync-server ~]# ll /etc/rsync.password # 配置完畢以後檢查
OK!!!
RSYNC的服務端和客戶端都配置完畢,如今咱們能夠進行測試了。
咱們須要去rsync客戶端,來完成下面的測試操做。須要注意,測試一樣分爲兩種狀況,每種狀況又有兩種語法寫法,分別爲:
拉取:①rsync [OPTION...] [USER@]HOST::SRC... [DEST]
②rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
推送:①rsync [OPTION...] SRC... [USER@]HOST:DEST
②rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
特別值得注意的是,與遠程shell模式命令不一樣的是,第①種語法格式, [USER@]HOST::SRC和 [USER@]HOST::DEST結尾處,均爲雙冒號鏈接SRC或DEST。另外,這個SRC或DEST已經再也不是路徑了,而是守護進程中配置的模塊的名稱了。
下面列舉咱們在rsync客戶端上,對rsync服務端進行拉取或推送的操做範例:
第一種格式:
拉取:
rsync -avzP rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password
推送:
rsync -avzP /test rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password
第二種格式:
拉取:
rsync -avzP rsync://rsync_backup@172.16.100.1:/sunsky/ /test/ --password-file=/etc/rsync.password
推送:
rsync -avzP /test/ rsync://resync_backup@192.168.1.111:/sunsky/ --password-file=/etc/rsync.password
以上就是,rsync整個服務端和客戶端的配置。
在生產環境中,咱們能夠專門部署一臺rsync服務器,專門負責接收業務服務器的日誌歸檔和配置文件歸檔。固然,咱們也能夠部署在svn服務器以前,來做爲網站代碼推送的服務器,或者說一臺web服務器專門用來作分發的時候。
可是咱們知道,咱們的日誌歸檔都是在凌晨,所以咱們不可能每天晚上去作向rsync服務端的推送操做。而且,若是平常web內容作分發的次數頻繁的話,咱們不可能每時每刻都盯着它去作手動推送。所以咱們能夠藉助crontab計劃任務來實現定時推送。
[root@rsync-server ~]# crontab -e
# Automatic synchronization log files at 1 a.m
* 1 * * * /usr/bin/rsync-avzP rsync_nobody@172.16.100.1::weblog /data/log/ --password-file=/etc/rsyncd.passwd > /dev/null 2>&1
# Automatic distribution site file points every second of every day
* * * * * /usr/bin/rsync-avzP --delete rsync_nobody@172.16.100.1::webdata /data/web/ --password-file=/etc/rsyncd.passwd > /dev/null 2>&1
注意:上面用到的weblog和webdata都是模塊的名字,咱們在rsyncd.conf裏面指定模塊所對應的目錄路徑。
可是,咱們仍然會發現一個問題,雖然使用計劃認爲能知足咱們的日誌歸檔定時推送到rsync服務端,可是每次都有1分鐘的延遲。而且,在某些做爲網站發佈平臺的狀況下,rsync每分鐘都去檢查總體一致性而後作推送,這樣子很是耗費資源。所以,咱們須要對此種狀況進行改良。在後面一篇博文,我會帶你們一塊兒瞭解rsync+inotify,藉助rsync+inotify來實現實時同步文件。
在本文最後面,我貼上rsync的--delete和--exclude的操做效果!
--delete操做以下:
[root@rsync-server ~]# ls /test/ #查看rsync服務端,sunsky模塊下的/test目錄的文件列表
e
[root@rsync-client ~]# ls /test/ #查看rsync客戶端本地/test目錄的文件列表
a b c d
以上爲操做前的環境,請保持這個環境一致,而後作以下操做:(下面的推送和拉取都是基於此環境作的)
在rsync客戶端作拉取操做:
[root@rsync-client ~]# rsync -avzP --delete rsync_backup@172.16.100.1::sunsky /test/ --password-file=/etc/rsync.password
receiving incremental file list
deleting d
deleting c
deleting b
deleting a
./
e
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
sent 86 bytes received 143 bytes 458.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-client ~]# ls /test/
e
[root@rsync-server ~]# ls /test/
e
咱們發現,rsync客戶端自己的a,b,c,d文件都消失了,取而代之的是e文件,而且咱們在rsync的拉取過程當中,也能看到刪除操做!
在rsync客戶端作推送操做:
[root@rsync-client ~]# rsync -avzP --delete /test/ rsync_backup@172.16.100.1::sunsky --password-file=/etc/rsync.password
sending incremental file list
./
deleting e
a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/5)
b
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/5)
c
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=1/5)
d
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=0/5)
sent 201 bytes received 87 bytes 576.00 bytes/sec
total size is 0 speedup is 0.00
[root@rsync-client ~]# ls /test/
a b c d
[root@rsync-server ~]# ls /test/
a b c d
咱們發現,rsync服務端自己的e文件消失了,取而代之的是a,b,c,d文件,而且咱們在rsync的推送過程當中,也能看到刪除操做!
--exclude操做以下:
[root@rsync-server ~]# tree /test/
/test/
0 directories, 0 files
[root@rsync-client ~]# tree /test/
/test/
├── a
├── b
├── c.txt
├── x
│ └── xxx.txt
└── x.txt
2 directories, 4 files
以上爲操做前的環境,請保持這個環境一致,而後作以下操做:
在rsync客戶端作推送操做:
[root@rsync-client ~]# rsync -avz --exclude=*.txt /test/ root@172.16.100.1:/test/
root@172.16.100.1's password:
sending incremental file list
./
a
b
x/
sent 154 bytes received 57 bytes 60.29 bytes/sec
total size is 0 speedup is 0.00
在rsync服務端進行查看同步效果:
[root@rsync-server ~]# tree /test/
/test/
├── a
├── b
└── x
1 directory, 2 files
咱們能夠發現,只要是能被*.txt匹配到的都沒有被推送過去!
若是說,你有不少須要排除的目錄或者文件,不但願他們被同步過去,此時你可使用--exclude-from參數,該參數後面跟一個文件,你能夠將須要匹配排除的項寫到該文件裏面!
例子:
在rsync客戶端作推送操做:
[root@rsync-client ~]# cat /tmp/exclude
x
*.txt
[root@rsync-client ~]# rsync -avz --exclude-from=/tmp/exclude /test/ root@172.16.100.1:/test/
root@172.16.100.1's password:
sending incremental file list
./
a
b
xx/
sent 151 bytes received 57 bytes 59.43 bytes/sec
total size is 0 speedup is 0.00
在rsync服務端進行查看同步效果:
[root@rsync-server ~]# tree /test/
/test/
├── a
├── b
└── xx
1 directory, 2 files
以上就是咱們的--exclude和--exclude-from的詳細用法!