inotify簡介:
inotify是一個文件系統監控機制,是一個內核特性,它監控文件系統的操作如:讀取,寫入,和創建以及刪除。對文件的變化反應靈敏,且使用簡單,所以這是一個很好的自動化檢測數據變化的工具。
從上面的一段簡介中我們可以看出inotify就是一個內核文件監控工具,實時監控着數據的變化,而對於rsync來說這是莫大的一個幫助,因爲在之前要觸發rsync數據鏡像同步,我們是使用crond來指定時間執行rsync,雖然這樣做到了數據的鏡像同步備份,但是有一個缺點就是當兩次觸發rsync時的時間段裏發生數據丟失,那麼那部分丟失的數據可想而知。。。
所以現在我們可以將rsync結合inotify來一起使用,當數據發生變化,可以通過inotify監控立即反應並觸發rsync,就可以達到數據的實時鏡像同步備份。流程大致如下:
inotify的安裝
首先要內核的支持
查看內核是否是2.6.13版本或以上,否則升級內核
[root@Aliyun ~]# uname -r
3.10.0-514.26.2.el7.x86_64
yum install inotify
inotify兩個指令:
inotifywait 可以監控文件以及目錄設置,監控事件。
inotifywatch 收集監控統計數據,如監控事件次數等。
##詳細命令加-h查看
接下來以兩臺服務器做示範
京東雲主機爲A IP : AAA.AAA.AAA.AAA
阿里雲主機爲B IP : BBB.BBB.BBB.BBB
使用B的數據爲基準實時同步到A機上
A
在A機器上設置rsync.conf [root@JD ~]# cat /etc/rsyncd.conf uid = nobody gid = nobody use chroot = no max connections = 4 pid file = /var/run/rsyncd.pid [XAD] path = /root/testrsync comment = xadsrc file read only = no write only = no hosts allow = * uid = root gid = root auth users = backup secrets file = /etc/server.pass [root@JD ~]# cat /etc/server.pass backup:xad123 [root@JD ~]# ll /etc/server.pass -rw------- 1 root root 14 Sep 23 22:05 /etc/server.pass [root@JD ~]# [root@JD ~]#/usr/bin/rsync --daemon [root@JD ~]# echo "/usr/bin/rsync --daemon" >> /etc/rc.local ##開啓守護進程
B
[root@Aliyun ~]# cat /etc/client.pass xad123
[root@Aliyun ~]# ll /etc/client.pass -rw------- 1 root root 7 Sep 23 22:07 /etc/client.pass 在B上通過執行後臺shell腳本來卻保rsync+inotify的工作協調。 [root@Aliyun ~]# cat rsync_inotify.sh #!/bin/bash /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib /root/rsynctest/ \ | while read data_change do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/client.pass /root/rsynctest/ [email protected]::XAD echo "${data_change} was rsync" >> /var/log/rsync.log 2>&1 done
[root@Aliyun ~]# chmod +x rsync_inotify.sh [root@Aliyun ~]# echo "/root/rsync_inotify.sh &" >> /etc/rc.local
測試B中創建文件,A中查看
[root@Aliyun rsynctest]# touch test [root@Aliyun rsynctest]# ll total 0 -rw-r--r-- 1 root root 0 Sep 25 11:26 test [root@JD testrsync]# ll total 0 -rw-r--r-- 1 root root 0 Sep 25 11:26 test
查看日誌
[root@Aliyun rsynctest]# cat /var/log/rsync.log 25/09/17 11:26 /root/rsynctest/testCREATE was rsync 25/09/17 11:26 /root/rsynctest/testATTRIB was rsync 25/09/17 11:26 /root/rsynctest/testCLOSE_WRITE,CLOSE was rsync