一、簡介
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)過了良好的測試; 此外,它在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
# mkdir src# touch src/{1,2,3,4}# mkdir dest# rsync -av src/ dest/ --將 src 目錄里的所有的文件同步至 dest 目錄(不包含src本身)# rsync -av src dest/ --將 src 目錄包括自己整個(gè)同步至 dest 目錄# rsync -avR src/ dest/ --即使 src 后面接有 / ,效果同上
2、局域網(wǎng)間同步
環(huán)境:172.16.22.11
# mkdir src# touch src/{a,b,c,d}# mkdir dest# rsync -av 172.16.22.12:/data/test/src/ dest/ --遠(yuǎn)程同步至本地,需輸入root密碼# rsync -av src/ 172.16.22.12:/data/test/dest/ --本地文件同步至遠(yuǎn)程# rsync -av src 172.16.22.12:/data/test/dest/ --整個(gè)目錄同步過去# rm -rf src/d --刪除一個(gè)文件 d# rsync -av --delete src/ 172.16.22.12:/data/test/dest/ --delete,從目標(biāo)目錄里面刪除無關(guān)的文件
3、局域網(wǎng)指定用戶同步
—172.16.22.12
# useradd george# passwd george# mkdir /home/george/test# touch /home/george/test/g{1,2,3,4}
—172.16.22.11
# rsync -av src '-e ssh -l george' 172.16.22.12:/home/george --本地同步至遠(yuǎn)程# rsync -av 172.16.22.12:/home/george/test/g* '-e ssh -l george -p 22' dest/
三、daemon模式
環(huán)境:192.168.22.11
1、服務(wù)啟動(dòng)方式
1.1、對(duì)于負(fù)荷較重的 rsync 服務(wù)器應(yīng)該使用獨(dú)立運(yùn)行方式
# yum install rsync xinetd --服務(wù)安裝# /usr/bin/rsync --daemon
1.2、對(duì)于負(fù)荷較輕的 rsync 服務(wù)器可以使用 xinetd 運(yùn)行方式
# yum install rsync xinetd --服務(wù)安裝# vim /etc/xinetd.d/rsync --配置托管服務(wù),將下項(xiàng)改為 nodisable = no# /etc/init.d/xinetd start --啟動(dòng)托管服務(wù) xinetd# chkconfig rsync on# netstat -ntpl | grep 873 --查看服務(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)全名,而不能是簡稱。當(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)測口令文件的權(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 —文件長度字符數(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)建密碼文件# chmod 600 /etc/web.passwd# service xinetd restart
四、測試
1、客戶端
環(huán)境:192.168.22.12
# yum -y install rsync# 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 --delete web@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.password web@192.168.22.11::web1 --遞歸列出服務(wù)端 web1 模塊的文件# rsync -avzP --exclude="*3*" --password-file=/tmp/rsync.password web@192.168.22.11::web1 /data/test/ --同步除了路徑以及文件名中包含 “3” *的所有文件
3、通過密碼文件同步
# echo "123"> /tmp/rsync.password# chmod 600 /tmp/rsync.password# rsync -avzP --delete --password-file=/tmp/rsync.password web@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
# yum install –y gcc --安裝依賴# mkdir /usr/local/inotify# tar -xf inotify-tools-3.14.tar.gz# cd inotify-tools-3.14# ./configure --prefix=/usr/local/inotify/# make && make install
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、測試一
檢測源目錄中是否有如下動(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 --測試下命令 # vim /data/test/test.sh #!/bin/bash/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read eventsdorsync -a --delete /data/test/src/ 192.168.22.12:/data/test/destecho "`date +'%F %T'` 出現(xiàn)事件:$events" >> /tmp/rsync.log 2>&1done # chmod 755 /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)注
4文章
963瀏覽量
32051 -
遠(yuǎn)程數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
14瀏覽量
6816 -
文件傳輸
+關(guān)注
關(guān)注
0文章
35瀏覽量
8304
原文標(biāo)題:運(yùn)維必備!Linux 遠(yuǎn)程數(shù)據(jù)同步工具詳解
文章出處:【微信號(hào):良許Linux,微信公眾號(hào):良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論