實戰:配置rsync+inotify實現實時同步
Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各種變化情況,如文件存取、刪除、移動等。利用這一機制,可以非常方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時作出響應。
使用rsync工具與inotify機制相結合,可以實現觸發式備份(實時同步),只要原始位置的文檔發生變化,則立即啓動增量備份操作,否則處於靜態等侍狀態,這樣一來,就避免了按固定週期備份進存在的延遲性、週期過密等問題。
inotify-tools-3.13.tar
下載地址:http://sourceforge.net/projects/inotify-tools/
擴展:
常見的開源軟件下載網址:
SourceForge.net,又稱SF.net,是開源軟件開發者進行開發管理的集中式場所。
SourceForge 是全球最大開源軟件開發平臺和倉庫,網站建立的宗旨,就是爲開源軟件提供一個存儲、協作和發佈的平臺。SourceForge 上擁有大量非常優秀的開源軟件,事實上,這些軟件完全可以代替一些商業軟件。
實戰4:把xuegod63.cn服務器上的/var/www/html目錄時實同步到xuegod64.cn主機上的/web-back目錄中。
inotify-tools服務端:xuegod63.cn IP:192.168.1.63
客戶端:xuegod64.cnIP:192.168.1.64
查看是否支持inotify,從kernel 2.6.13開始正式併入內核。
[root@xuegod63 ~]#uname -r
2.6.32-220.el6.x86_64
[root@xuegod63 ~]#ll /proc/sys/fs/inotify/
root@xuegod63 ~]#ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_queued_events
-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_user_instances
-rw-r--r-- 1 rootroot 0 Apr 10 09:09 max_user_watches
注:
在linux內核中,默認的inotify機制提供了三個調控參數:
max_queued_events#表示監控事件隊列
max_user_instances#表示最多監控實例數
max_user_watches #表示每個實例最多監控文件數
查看具體參數值:
[root@xuegod63~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_instances
128
[root@xuegod63 ~]#cat /proc/sys/fs/inotify/max_user_watches
8192
注:當要監控的目錄、文件數量較多或者變化較頻繁時,要加大這三個參數的值。
例如:可直接修改/etc/sysctl.conf配置文件,將管理隊列設爲32768,實例數設爲1024,監控數設爲9000000(建議大於監控目標的總文件數)。
[root@xuegod63~]#vim /etc/sysctl.conf#以文件最後,添加以下內容
fs.inotify.max_queued_events= 32768
fs.inotify.max_user_instances= 1024
fs.inotify.max_user_watches= 90000000
[root@xuegod63 ~]#sysctl -p#使修改後的sysctl.conf文件生效
查看是否修改成功:
[root@xuegod63~]# cat /proc/sys/fs/inotify/max_user_watches
90000000
安裝inotify-tools-3.13.tar:
安裝inotify-tools後,將擁有inotifywait、inotifywatch輔助工具程序,從而來監控、彙總文件系統改動情況。
[root@xuegod63 ~]#tar -zxvf inotify-tools-3.13.tar.gz
[root@xuegod63 ~]#cd inotify-tools-3.13
[[email protected]]# ./configure
[[email protected]]# make
[[email protected]]# make install
測試:
使用inotifywait命令監控網站目錄/var/www/html發生的變化。然後在另一個終端向/var/www/html目錄下添加文件、移動文件,查看屏幕輸出結果。
[root@xuegod63 ~]#inotifywait -h
常用參數:
-e用來指定要監控哪些事件。
這些事件包括:create創建,move移動,delete刪除,modify修改文件內容,attrib屬性更改。
-m表示持續監控
-r表示遞歸整個目錄
-q 表示簡化輸出信息。
[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/
在另一個終端登錄,在/var/www/html目錄進行相關的操作,然後,回到原來的終端查看監控變化情況。
[root@xuegod63 ~]#echo aaa > /var/www/html/a.html
[root@xuegod63 ~]#mkdir /var/www/html/test
[root@xuegod63 ~]#cp /etc/passwd /var/www/html/test/
[root@xuegod63 ~]#rm -rf /var/www/html/test/passwd
查看變化:
[root@xuegod63 ~]#inotifywait -mrq -e create,move,delete,modify /var/www/html/
/var/www/html/CREATEa.html
/var/www/html/MODIFY a.html
/var/www/html/CREATE,ISDIR test
/var/www/html/test/CREATE passwd
/var/www/html/test/MODIFY passwd
使用inotifywait輸出的監控結果中,每行記錄中依次包括目錄、事件、文件。據此可以識別變動情況。
編寫觸發式同步腳本:
第一步,同步時不需要輸入密碼:
xuegod63發生變化後,直接將發生變化的數據同步到xuegod64,同步時不需要輸入密碼
[root@xuegod63 ~]#ssh-keygen
[root@xuegod63 ~]#ssh-copy-id [email protected]
[root@xuegod63 ~]#ssh 192.168.1.64
Last login: WedNov 12 17:51:35 2014
編寫一個腳本
[root@xuegod63 ~]#cat a.sh
#!/bin/sh
SRC=/var/www/html
[email protected]:/web-back
inotifywait -mrq-e modify,delete,create,attrib ${SRC} | while read D E F
do
/usr/bin/rsync-ahqzt --delete $SRC $DST
done
[root@xuegod63 ~]#cp /root/a.sh /opt/inotify_rsync.sh
[root@xuegod63~]# echo '/opt/inotify_rsync.sh &' >> /etc/rc.local