inotify簡介:
inotify是一個檔案系統監控機制,是一個核心特性,它監控檔案系統的操作如:讀取,寫入,和建立以及删除。對檔案的變化反應靈敏,且使用簡單,是以這是一個很好的自動化檢測資料變化的工具。
從上面的一段簡介中我們可以看出inotify就是一個核心檔案監控工具,實時監控着資料的變化,而對于rsync來說這是莫大的一個幫助,因為在之前要觸發rsync資料鏡像同步,我們是使用crond來指定時間執行rsync,雖然這樣做到了資料的鏡像同步備份,但是有一個缺點就是當兩次觸發rsync時的時間段裡發生資料丢失,那麼那部分丢失的資料可想而知。。。
是以現在我們可以将rsync結合inotify來一起使用,當資料發生變化,可以通過inotify監控立即反應并觸發rsync,就可以達到資料的實時鏡像同步備份。流程大緻如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4kDMFxmduJ0NDxmQBFENktUO4dkWmlkbxw0bpt0dvwFRw8CX2E0LcFDMN9CXyAzcml3dvwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
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