天天看點

rsycn+inotify實時網絡資料鏡像備份

inotify簡介:

   inotify是一個檔案系統監控機制,是一個核心特性,它監控檔案系統的操作如:讀取,寫入,和建立以及删除。對檔案的變化反應靈敏,且使用簡單,是以這是一個很好的自動化檢測資料變化的工具。

   從上面的一段簡介中我們可以看出inotify就是一個核心檔案監控工具,實時監控着資料的變化,而對于rsync來說這是莫大的一個幫助,因為在之前要觸發rsync資料鏡像同步,我們是使用crond來指定時間執行rsync,雖然這樣做到了資料的鏡像同步備份,但是有一個缺點就是當兩次觸發rsync時的時間段裡發生資料丢失,那麼那部分丢失的資料可想而知。。。

   是以現在我們可以将rsync結合inotify來一起使用,當資料發生變化,可以通過inotify監控立即反應并觸發rsync,就可以達到資料的實時鏡像同步備份。流程大緻如下:

rsycn+inotify實時網絡資料鏡像備份

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