1. 在inotify-tools配合rsync實現(xiàn)文件實時同步方案中烹植,操作小文件未發(fā)現(xiàn)弊病,而在上傳一個稍微大點的文件愕贡,比如十幾二十幾兆的文件時草雕,弊病就會顯露:
如圖分析原因:通過ftp或者其他客戶端上傳一個稍大點的文件到文件同步監(jiān)控目錄下,inotifywait會實時監(jiān)控到此目錄下該文件的創(chuàng)建及修改固以,此時上傳文件對文件修改可能是每1024個字節(jié)一次寫入(可能更多墩虹,根據(jù)寫文件客戶端而定),因此在一定時間內造成了大量的并發(fā)憨琳,因為每次修改都會觸發(fā)inotifywait檢測到MODIFY類型的文件操作诫钓,同時也會調用rsync傳輸工具對該文件進行傳輸,在大量并發(fā)的情況下菌湃,對該文件的文件傳輸也會產(chǎn)生大量并發(fā)的傳輸,會造成io阻塞纯路。
修改方案:在正常對文件的操作下驰唬,都會有CLOSE_WRITE叫编,因此我們不需要讓inotifywait監(jiān)控MODIFY類型的事件,就不會觸發(fā)大量并發(fā)的文件傳輸霞篡。
附上部分文件同步監(jiān)控shell代碼:
/usr/local/bin/inotifywait -mrq --format '%Xe %w %f' \
-e create,delete,attrib,close_write,move \ #此處刪除modify事件朗兵,避免引發(fā)大量并發(fā)同步
${path} | while read file;
do
rsync_changed "${file}" &
done
echo "inotifywait watch ${path} exit with $?" >> ${LOGFILE}