一、簡(jiǎn)介
1 認(rèn)識(shí)
Rsync(remote synchronize)是一個(gè)遠(yuǎn)程數(shù)據(jù)同步工具,可通過LAN/WAN快速同步多臺(tái)主機(jī)間的文件。Rsync使用所謂的“Rsync算法”來使本地和遠(yuǎn) 程兩個(gè)主機(jī)之間的文件達(dá)到同步,這個(gè)算法只傳送兩個(gè)文件的不同部分,而不是每次都整份傳送,因此速度相當(dāng)快;Rsync支持大多數(shù)的類Unix系統(tǒng),無論是Linux、Solaris還是BSD上都經(jīng)過了良好的測(cè)試;此外,它在windows平臺(tái)下也有相應(yīng)的版本,如cwRsync和Sync2NAS等工具2 原理
Rsync本來是用于替代rcp的一個(gè)工具,目前由rsync.samba.org維護(hù),所以rsync.conf文件的格式類似于samba的主配 置文件;
Rsync可以通過rsh或ssh使用,也能以daemon模式去運(yùn)行 在以daemon方式運(yùn)行時(shí)Rsync server會(huì)打開一個(gè)873 端口,等待客戶端去連接。
連接時(shí),Rsync server會(huì)檢查口令是否相符,若通過口令查核,則可以開始進(jìn)行文件傳輸。第一次連通完成時(shí),會(huì)把整份文件傳輸一次,以后則就只需進(jìn)行增量備份。
3 特點(diǎn)
- 可以鏡像保存整個(gè)目錄樹和文件系統(tǒng);
- 可以很容易做到保持原來文件的權(quán)限、時(shí)間、軟硬鏈接等;
- 無須特殊權(quán)限即可安裝;
- 優(yōu)化的流程,文件傳輸效率高;
- 可以使用rsh、ssh等方式來傳輸文件,當(dāng)然也可以通過直接的socket連接;
- 支持匿名傳輸
二、ssh模式
1 本地間同步
環(huán)境:172.16.22.12
#mkdirsrc
#touchsrc/{1,2,3,4}
#mkdirdest
#rsync-avsrc/dest/--將src目錄里的所有的文件同步至dest目錄(不包含src本身)
#rsync-avsrcdest/--將src目錄包括自己整個(gè)同步至dest目錄
#rsync-avRsrc/dest/--即使src后面接有/,效果同上
2、局域網(wǎng)間同步
環(huán)境:172.16.22.11
#mkdirsrc
#touchsrc/{a,b,c,d}
#mkdirdest
#rsync-av172.16.22.12:/data/test/src/dest/--遠(yuǎn)程同步至本地,需輸入root密碼
#rsync-avsrc/172.16.22.12:/data/test/dest/--本地文件同步至遠(yuǎn)程
#rsync-avsrc172.16.22.12:/data/test/dest/--整個(gè)目錄同步過去
#rm-rfsrc/d--刪除一個(gè)文件d
#rsync-av--deletesrc/172.16.22.12:/data/test/dest/--delete,從目標(biāo)目錄里面刪除無關(guān)的文件
3、局域網(wǎng)指定用戶同步
—172.16.22.12
#useraddgeorge
#passwdgeorge
#mkdir/home/george/test
#touch/home/george/test/g{1,2,3,4}
—172.16.22.11
#rsync-avsrc'-essh-lgeorge'172.16.22.12:/home/george--本地同步至遠(yuǎn)程
#rsync-av172.16.22.12:/home/george/test/g*'-essh-lgeorge-p22'dest/
三、daemon模式
環(huán)境:192.168.22.11
1、服務(wù)啟動(dòng)方式
1.1、對(duì)于負(fù)荷較重的 rsync 服務(wù)器應(yīng)該使用獨(dú)立運(yùn)行方式
#yuminstallrsyncxinetd--服務(wù)安裝
#/usr/bin/rsync--daemon
1.2、對(duì)于負(fù)荷較輕的 rsync 服務(wù)器可以使用 xinetd 運(yùn)行方式
#yuminstallrsyncxinetd--服務(wù)安裝
#vim/etc/xinetd.d/rsync--配置托管服務(wù),將下項(xiàng)改為no
disable=no
#/etc/init.d/xinetdstart--啟動(dòng)托管服務(wù)xinetd
#chkconfigrsyncon
#netstat-ntpl|grep873--查看服務(wù)是否啟動(dòng)
2、配置詳解
兩種 rsync 服務(wù)運(yùn)行方式都需要配置 rsyncd.conf,其格式類似于 samba 的主配置文件
全局參數(shù)
- 在全局參數(shù)部分也可以定義模塊參數(shù),這時(shí)該參數(shù)的值就是所有模塊的默認(rèn)值
- address —在獨(dú)立運(yùn)行時(shí),用于指定的服務(wù)器運(yùn)行的 IP 地址;由 xinetd 運(yùn)行時(shí)將忽略此參數(shù),使用命令行上的 –address 選項(xiàng)替代。默認(rèn)本地所有IP
- port —指定 rsync 守護(hù)進(jìn)程監(jiān)聽的端口號(hào)。由 xinetd 運(yùn)行時(shí)將忽略此參數(shù),使用命令行上的 –port 選項(xiàng)替代。默認(rèn) 873
- motd file —指定一個(gè)消息文件,當(dāng)客戶連接服務(wù)器時(shí)該文件的內(nèi)容顯示給客戶
- pid file —rsync 的守護(hù)進(jìn)程將其 PID 寫入指定的文件
- log file —指定 rsync 守護(hù)進(jìn)程的日志文件,而不將日志發(fā)送給 syslog
- syslog facility —指定 rsync 發(fā)送日志消息給 syslog 時(shí)的消息級(jí)別
- socket options —指定自定義 TCP 選項(xiàng)
- lockfile —指定rsync的鎖文件存放路徑
- timeout = 600 —超時(shí)時(shí)間
模塊參數(shù)
模塊參數(shù)主要用于定義 rsync 服務(wù)器哪個(gè)目錄要被同步。模塊聲明的格式必須為 [module] 形式,這個(gè)名字就是在 rsync 客戶端看到的名字,類似于 Samba 服務(wù)器提供的共享名。而服務(wù)器真正同步的數(shù)據(jù)是通過 path 來指定的
基本模塊參數(shù)
-
path —指定當(dāng)前模塊在 rsync 服務(wù)器上的同步路徑,該參數(shù)是必須指定的
-
comment —給模塊指定一個(gè)描述,該描述連同模塊名在客戶連接得到模塊列表時(shí)顯示給客戶
模塊控制參數(shù)
-
use chroot = —默認(rèn)為 true,在傳輸文件之前首先 chroot 到 path 參數(shù)所指定的目錄下;優(yōu)點(diǎn),安全;缺點(diǎn),需要 root 權(quán)限,不能備份指向 path 外部的符號(hào)連接所指向的目錄文件
-
uid = —指定該模塊以指定的 UID 傳輸文件;默認(rèn)nobody
-
gid = —指定該模塊以指定的 GID 傳輸文件;默認(rèn)nobody
-
max connections —最大并發(fā)連接數(shù),0為不限制
-
lock file —指定支持 max connections 參數(shù)的鎖文件。默認(rèn) /var/run/rsyncd.lock
-
list —指定當(dāng)客戶請(qǐng)求列出可以使用的模塊列表時(shí),該模塊是否應(yīng)該被列出。默認(rèn)為 true,顯示
-
read only = —只讀選擇,也就是說,不讓客戶端上傳文件到服務(wù)器上。默認(rèn)true
-
write only = —只寫選擇,也就是說,不讓客戶端從服務(wù)器上下載文件。默認(rèn)false
-
ignore errors —忽略IO錯(cuò)誤。默認(rèn)true
-
ignore nonreadable —指定 rysnc服務(wù)器完全忽略那些用戶沒有訪問權(quán)限的文件。這對(duì)于在需要備份的目錄中有些不應(yīng)該被備份者獲得的文件時(shí)是有意義的。false
-
timeout = —該選項(xiàng)可以覆蓋客戶指定的 IP 超時(shí)時(shí)間。從而確保 rsync 服務(wù)器不會(huì)永遠(yuǎn)等待一個(gè)崩潰的客戶端。對(duì)于匿名 rsync 服務(wù)器來說,理想的數(shù)字是 600(單位為秒)。0 (未限制)
-
dont compress —用來指定那些在傳輸之前不進(jìn)行壓縮處理的文件。該選項(xiàng)可以定義一些不允許客戶對(duì)該模塊使用的命令選項(xiàng)列表。必須使用選項(xiàng)全名,而不能是簡(jiǎn)稱。當(dāng)發(fā)生拒絕某個(gè)選項(xiàng)的情況時(shí),服務(wù)器將報(bào)告錯(cuò)誤信息然后退出。例如,要防止使用壓縮,應(yīng)該是:”dont compress =”。.gz.tgz.zip.z.rpm.deb.iso.bz2.tbz
模塊文件篩選參數(shù)
-
exclude —指定多個(gè)由空格隔開的多個(gè)文件或目錄(相對(duì)路徑),并將其添加到 exclude 列表中。這等同于在客戶端命令中使用 –exclude 來指定模式
-
exclude from —指定一個(gè)包含 exclude 規(guī)則定義的文件名,服務(wù)器從該文件中讀取 exclude 列表定義
-
include —指定多個(gè)由空格隔開的多個(gè)文件或目錄(相對(duì)路徑),并將其添加到 include 列表中。這等同于在客戶端命令中使用 –include 來指定模式
-
include from —指定一個(gè)包含 include 規(guī)則定義的文件名,服務(wù)器從該文件中讀取 include 列表定義
模塊用戶認(rèn)證參數(shù)
- auth users —指定由空格或逗號(hào)分隔的用戶名列表,只有這些用戶才允許連接該模塊(和系統(tǒng)用戶沒有任何關(guān)系)。用戶名和口令以明文方式存放在 secrets file 參數(shù)指定的文件中。默認(rèn)為匿名方式
- secrets file —指定一個(gè) rsync 認(rèn)證口令文件。只有在 auth users 被定義時(shí),該文件才起作用。文件權(quán)限必須是 600
- strict modes —指定是否監(jiān)測(cè)口令文件的權(quán)限。為 true 則口令文件只能被 rsync 服務(wù)器運(yùn)行身份的用戶訪問,其他任何用戶不可以訪問該文件。默認(rèn)為true
模塊訪問控制參數(shù)
- hosts allow —用一個(gè)主機(jī)列表指定哪些主機(jī)客戶允許連接該模塊。不匹配主機(jī)列表的主機(jī)將被拒絕。默認(rèn)值為 *
- hosts deny —用一個(gè)主機(jī)列表指定哪些主機(jī)客戶不允許連接該模塊
模塊日志參數(shù)
-
transfer logging —使 rsync 服務(wù)器將傳輸操作記錄到傳輸日志文件。默認(rèn)值為false
-
log format —指定傳輸日志文件的字段。默認(rèn)為:”%o %h [%a] %m (%u) %f %l”
設(shè)置了”log file”參數(shù)時(shí),在日志每行的開始會(huì)添加”%t [%p]“;
可以使用的日志格式定義符如下所示:
%o —操作類型:”send” 或 “recv”
%h —遠(yuǎn)程主機(jī)名
%a —遠(yuǎn)程IP地址
%m —模塊名
%u —證的用戶名(匿名時(shí)是 null)
%f —文件名
%l —文件長(zhǎng)度字符數(shù)
%p —該次 rsync 會(huì)話的 PID
%P —模塊路徑
%t —當(dāng)前時(shí)間
%b —實(shí)際傳輸?shù)淖止?jié)數(shù)
%c —當(dāng)發(fā)送文件時(shí),記錄該文件的校驗(yàn)碼
3、服務(wù)端配置
#vim/etc/rsyncd.conf--為rsyncd服務(wù)編輯配置文件,默認(rèn)沒有,需自己編輯
-
uid = root —rsync運(yùn)行權(quán)限為root
-
gid = root —rsync運(yùn)行權(quán)限為root
-
use chroot = no —是否讓進(jìn)程離開工作目錄
-
max connections = 5 —最大并發(fā)連接數(shù),0為不限制
-
timeout = 600 —超時(shí)時(shí)間
-
pid file = /var/run/rsyncd.pid —指定rsync的pid存放路徑
-
lockfile = /var/run/rsyncd.lock —指定rsync的鎖文件存放路徑
-
log file = /var/log/rsyncd.log —指定rsync的日志存放路徑
-
[web1] —模塊名稱
path = /data/test/src —該模塊存放文件的基礎(chǔ)路徑
ignore errors = yes —忽略一些無關(guān)的I/O錯(cuò)誤
read only = no —客戶端可以上傳
write only = no —客戶端可以下載
hosts allow = 192.168.22.12 —允許連接的客戶端主機(jī)ip
hosts deny =—黑名單,表示任何主機(jī)
list = yes
auth users = web —認(rèn)證此模塊的用戶名
secrets file = /etc/web.passwd —指定存放“用戶名:密碼”格式的文件
#mkdir/data/test/src--創(chuàng)建基礎(chǔ)目錄
#mkdir/data/test/src/george--再創(chuàng)建一個(gè)目錄
#touch/data/test/src/{1,2,3}
#echo"web:123">/etc/web.passwd--創(chuàng)建密碼文件
#chmod600/etc/web.passwd
#servicexinetdrestart
四、測(cè)試
1、客戶端
環(huán)境:192.168.22.12
#yum-yinstallrsync
#mkdir/data/test
2、小試參數(shù)
# rsync -avzP web@192.168.22.11::web1 /data/test/--輸入密碼 123;將服務(wù)器 web1 模塊里的文件同步至/data/test,參數(shù)說明:
-a —參數(shù),相當(dāng)于-rlptgoD,
-r —是遞歸
-l —是鏈接文件,意思是拷貝鏈接文件
-i —列出 rsync 服務(wù)器中的文件
-p —表示保持文件原有權(quán)限
-t —保持文件原有時(shí)間
-g —保持文件原有用戶組
-o —保持文件原有屬主
-D —相當(dāng)于塊設(shè)備文件
-z —傳輸時(shí)壓縮
-P —傳輸進(jìn)度
-v —傳輸時(shí)的進(jìn)度等信息,和-P有點(diǎn)關(guān)系
#rsync-avzP--deleteweb@192.168.22.11::web1/data/test/--讓客戶端與服務(wù)器保持完全一致,--delete
#rsync-avzP--delete/data/test/web@192.168.22.11::web1--上傳客戶端文件至服務(wù)端
#rsync-avzP--delete/data/test/web@192.168.22.11::web1/george--上傳客戶端文件至服務(wù)端的george目錄
#rsync-ir--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1--遞歸列出服務(wù)端web1模塊的文件
#rsync-avzP--exclude="*3*"--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1/data/test/--同步除了路徑以及文件名中包含“3”*的所有文件
3、通過密碼文件同步
#echo"123">/tmp/rsync.password
#chmod600/tmp/rsync.password
#rsync-avzP--delete--password-file=/tmp/rsync.passwordweb@192.168.22.11::web1/data/test/--調(diào)用密碼文件
4、客戶端自動(dòng)同步
#crontab-e
10 0* rsync -avzP —delete —password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/
#crontab-l
五、數(shù)據(jù)實(shí)時(shí)同步
環(huán)境:Rsync + Inotify-tools
1、inotify-tools
-
是為linux下 inotify文件監(jiān)控工具提供的一套c的開發(fā)接口庫函數(shù),同時(shí)還提供了一系列的命令行工具,這些工具可以用來監(jiān)控文件系統(tǒng)的事件
-
inotify-tools是用c編寫的,除了要求內(nèi)核支持 inotify 外,不依賴于其他
-
inotify-tools提供兩種工具:一是inotifywait,它是用來監(jiān)控文件或目錄的變化,二是inotifywatch,它是用來統(tǒng)計(jì)文件系統(tǒng)訪問的次數(shù)
2、安裝inotify-tools
下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
#yuminstall–ygcc--安裝依賴
#mkdir/usr/local/inotify
#tar-xfinotify-tools-3.14.tar.gz
#cdinotify-tools-3.14
#./configure--prefix=/usr/local/inotify/
#make&&makeinstall
3、設(shè)置環(huán)境變量
#vim/root/.bash_profile
export PATH=/usr/local/inotify/bin/:$PATH
#source/root/.bash_profile
#echo'/usr/local/inotify/lib'>>/etc/ld.so.conf--加載庫文件
#ldconfig
#ln-s/usr/local/inotify/include/usr/include/inotify
4、常用參數(shù)
-
-m —始終保持監(jiān)聽狀態(tài),默認(rèn)觸發(fā)事件即退出
-
-r —遞歸查詢目錄
-
-q —打印出監(jiān)控事件
-
-e —定義監(jiān)控的事件,可用參數(shù):
-
access —訪問文件
-
modify —修改文件
-
attrib —屬性變更
-
open —打開文件
-
delete —?jiǎng)h除文件
-
create —新建文件
-
move —文件移動(dòng)
-
—fromfile —從文件讀取需要監(jiān)視的文件或者排除的文件,一個(gè)文件一行,排除的文件以@開頭
-
—timefmt —時(shí)間格式
-
—format —輸出格式
-
—exclude —正則匹配需要排除的文件,大小寫敏感
-
—excludei —正則匹配需要排除的文件,忽略大小寫
-
%y%m%d %H%M —年月日時(shí)鐘
-
%T%w%f%e —時(shí)間路徑文件名狀態(tài)
5、測(cè)試一
檢測(cè)源目錄中是否有如下動(dòng)作:modify,create,move,delete,attrib;
一旦發(fā)生則發(fā)布至目標(biāo)機(jī)器;
方式為 ssh
src: 192.168.22.11(Rsync + Inotify-tools) dest: 192.168.22.12
兩臺(tái)機(jī)器需要做好 ssh 免密登錄
#mdkir/data/test/dest/--dest機(jī)器
#mdkir/data/test/src/--src機(jī)器
#rsync-av--delete/data/test/src/192.168.22.12:/data/test/dest--測(cè)試下命令
#vim/data/test/test.sh
#!/bin/bash
/usr/local/inotify/bin/inotifywait-mrq-emodify,create,move,delete,attrib/data/test/src|whilereadevents
do
rsync-a--delete/data/test/src/192.168.22.12:/data/test/dest
echo"`date +'%F %T'`出現(xiàn)事件:$events">>/tmp/rsync.log2>&1
done
#chmod755/data/test/test.sh
#/data/test/test.sh&
#echo'/data/test/test.sh&'>>/etc/rc.local--設(shè)置開機(jī)自啟
我們可以在目標(biāo)機(jī)上也寫一個(gè)這樣的腳本:
rsync-a—delete/data/test/dest/192.168.22.11:/data/test/src ;
這樣可以實(shí)現(xiàn)雙向同步。
審核編輯 :李倩
-
算法
+關(guān)注
關(guān)注
23文章
4599瀏覽量
92643 -
Linux
+關(guān)注
關(guān)注
87文章
11229瀏覽量
208928 -
局域網(wǎng)
+關(guān)注
關(guān)注
5文章
747瀏覽量
46243
原文標(biāo)題:多臺(tái) Linux 主機(jī)進(jìn)行數(shù)據(jù)同步,少不了這款工具!
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論