用到的工具:inotify或者sersync,這次使用inotify演示。
我們提供的服務有:成都做網(wǎng)站、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、長壽ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的長壽網(wǎng)站制作公司
當inotify運行時會時刻監(jiān)控著文件系統(tǒng)(inode、block等屬性)
?
當inotify監(jiān)控到目錄有增加、修改、刪除、移動操作時會調用rsync命令將目錄傳輸?shù)綗醾淦魃稀?/font>
?
部署:
安裝inotify,檢查系統(tǒng)是否支持inotify
Linux內核從2.6.13起加入inotify
出現(xiàn)如下所示則表示支持
?
自帶ISO沒有inotify,需要自己下載
https://github.s3.amazonaws.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
?
安裝inotify需要C編譯器支持,需要提前安裝gcc編譯器
否則可能出現(xiàn)這個錯誤
?
可以使用echo $?查看是否有錯誤 0沒錯誤 1有錯誤
安裝命令:
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個工具(命令),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)計數(shù)據(jù),指文件系統(tǒng)時間發(fā)生的次數(shù)統(tǒng)計。
?
Inotifywait
參數(shù)解析:
-r?????遞歸查詢目錄
-q?????打印很少的信息,僅打印監(jiān)控事件的信息
-m???始終保持事件監(jiān)聽狀態(tài)
--excludei?????????排除文件或目錄時,不區(qū)分大小寫
--timefmt?????????指定時間輸出的格式
–format:
%w 表示發(fā)生事件的目錄
%f 表示發(fā)生事件的文件
%e 表示發(fā)生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式
-e 事件
以下選項都是接在-e后面的
?
測試:
開2個創(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ù)解釋:
-r?????遞歸查詢目錄
-q?????打印很少的信息,僅打印監(jiān)控事件的信息
-m???始終保持事件監(jiān)聽狀態(tài)
?
Timefmt時間戳格式 “日月年 時分”
–format:
%w 表示發(fā)生事件的目錄
%f 表示發(fā)生事件的文件
%T 使用由–timefmt定義的時間格式
?
?
當我創(chuà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)建腳本,當監(jiān)控到文件有變化時自動同步.
#!/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
全路徑后臺運行該腳本,并且寫入rc.local
?/bin/sh /rsync.sh &
?
這步完成后,基本上每當/data這個目錄有增刪改都會自動同步到backup服務器上的/backup/data目錄上
?
應用場景200~300并發(fā)以內可以使用這套方案(中小型企業(yè))。‘
?
?
實時同步優(yōu)化及應用極限建議
?
/proc/sys/fs/inotify目錄下有三個文件,對inotify’機制有一定的限制
Max_user_watches:設置inotifywait或inotifywatch命令可以監(jiān)視的文件數(shù)量(單進程)
Max_user_instances:設置每個用戶可以允許的inotifywait或inotifywatch命令的進程數(shù)
Max_queued_events:設置inotify實例時間(event)隊列可容納的時間數(shù)量。
?
Inotify優(yōu)點:
1) 實時數(shù)據(jù)同步
Inotify缺點:
1) 并發(fā)如果大于200個文件(10-100K),同步就會有延遲。
2) 監(jiān)控到事件后,調用rsync同步是單進程的(加&并發(fā)),sersync多進程同步。既然有了inotify-tools,為什么還要sersync?
Sersync功能多:
1)配置文件。
2)真正的守護進程socket。
3)可以對失敗文件定時重傳(定時任務)。
4)第三方的HTTP接口。
5)默認多線程同步。
?