您好,登錄后才能下訂單哦!
用到的工具:inotify或者sersync,這次使用inotify演示。
當(dāng)inotify運(yùn)行時(shí)會(huì)時(shí)刻監(jiān)控著文件系統(tǒng)(inode、block等屬性)
?
當(dāng)inotify監(jiān)控到目錄有增加、修改、刪除、移動(dòng)操作時(shí)會(huì)調(diào)用rsync命令將目錄傳輸?shù)綗醾淦魃稀?/font>
?
部署:
安裝inotify,檢查系統(tǒng)是否支持inotify
Linux內(nèi)核從2.6.13起加入inotify
出現(xiàn)如下所示則表示支持
?
自帶ISO沒(méi)有inotify,需要自己下載
https://github.s3.amazonaws.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
?
安裝inotify需要C編譯器支持,需要提前安裝gcc編譯器
否則可能出現(xiàn)這個(gè)錯(cuò)誤
?
可以使用echo $?查看是否有錯(cuò)誤 0沒(méi)錯(cuò)誤 1有錯(cuò)誤
安裝命令:
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure --prefix=/usr/local/inotify-tools-3.14
echo $?
make && make install
echo $?
ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify-tools
ls /usr/local/inotify-tools
history
?
一共安裝了2個(gè)工具(命令),inotifywait和inotifywatch
Inotifywait:在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open、close、delete等)發(fā)生,執(zhí)行后處于阻塞狀態(tài),適合在shell腳本中使用。(監(jiān)控文件狀態(tài))
Inotifywatch:收集被監(jiān)視的文件系統(tǒng)使用度統(tǒng)計(jì)數(shù)據(jù),指文件系統(tǒng)時(shí)間發(fā)生的次數(shù)統(tǒng)計(jì)。
?
Inotifywait
參數(shù)解析:
-r????? 遞歸查詢(xún)目錄
-q????? 打印很少的信息,僅打印監(jiān)控事件的信息
-m??? 始終保持事件監(jiān)聽(tīng)狀態(tài)
--excludei????????? 排除文件或目錄時(shí),不區(qū)分大小寫(xiě)
--timefmt????????? 指定時(shí)間輸出的格式
–format:
%w 表示發(fā)生事件的目錄
%f 表示發(fā)生事件的文件
%e 表示發(fā)生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時(shí)間格式
-e 事件
以下選項(xiàng)都是接在-e 后面的
?
測(cè)試:
開(kāi)2個(gè)創(chuàng)建一直監(jiān)控一直執(zhí)行
[root@nfs-server ~]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e create /data
?
其中參數(shù)解釋?zhuān)?/font>
-r????? 遞歸查詢(xún)目錄
-q????? 打印很少的信息,僅打印監(jiān)控事件的信息
-m??? 始終保持事件監(jiān)聽(tīng)狀態(tài)
?
Timefmt時(shí)間戳格式 “日月年 時(shí)分”
–format:
%w 表示發(fā)生事件的目錄
%f 表示發(fā)生事件的文件
%T 使用由–timefmt定義的時(shí)間格式
?
?
當(dāng)我創(chuàng)建文件的是時(shí)候會(huì)自動(dòng)記錄。
?[root@nfs-server ~]# /usr/local/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %e:%w%f' -e create /data
22/11/19 11:21 CREATE:/data/12345.txt
?
創(chuàng)建腳本,當(dāng)監(jiān)控到文件有變化時(shí)自動(dòng)同步.
#!/bin/bash
inotify=/usr/local/inotify-tools/bin/inotifywait
$inotify -mrq --format '%w%f' -e create,close_write,delete /data \
|while read file
do
?cd /data &&
?rsync -az ./ --delete rsync_backup@192.168.24.32::backup \
?--password-file=/etc/rsync.password
done
全路徑后臺(tái)運(yùn)行該腳本,并且寫(xiě)入rc.local
?/bin/sh /rsync.sh &
?
這步完成后,基本上每當(dāng)/data這個(gè)目錄有增刪改都會(huì)自動(dòng)同步到backup服務(wù)器上的/backup/data目錄上
?
應(yīng)用場(chǎng)景200~300并發(fā)以?xún)?nèi)可以使用這套方案(中小型企業(yè))。‘
?
?
實(shí)時(shí)同步優(yōu)化及應(yīng)用極限建議
?
/proc/sys/fs/inotify目錄下有三個(gè)文件,對(duì)inotify’機(jī)制有一定的限制
Max_user_watches:設(shè)置inotifywait或inotifywatch命令可以監(jiān)視的文件數(shù)量(單進(jìn)程)
Max_user_instances:設(shè)置每個(gè)用戶(hù)可以允許的inotifywait或inotifywatch命令的進(jìn)程數(shù)
Max_queued_events:設(shè)置inotify實(shí)例時(shí)間(event)隊(duì)列可容納的時(shí)間數(shù)量。
?
Inotify優(yōu)點(diǎn):
1) 實(shí)時(shí)數(shù)據(jù)同步
Inotify缺點(diǎn):
1) 并發(fā)如果大于200個(gè)文件(10-100K),同步就會(huì)有延遲。
2) 監(jiān)控到事件后,調(diào)用rsync同步是單進(jìn)程的(加&并發(fā)),sersync多進(jìn)程同步。既然有了inotify-tools,為什么還要sersync?
Sersync功能多:
1)配置文件。
2)真正的守護(hù)進(jìn)程socket。
3)可以對(duì)失敗文件定時(shí)重傳(定時(shí)任務(wù))。
4)第三方的HTTP接口。
5)默認(rèn)多線(xiàn)程同步。
?
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。