rsycn+inotify實時網絡數據鏡像備份

inotify簡介:

   inotify是一個文件系統監控機制,是一個內核特性,它監控文件系統的操作如:讀取,寫入,和創建以及刪除。對文件的變化反應靈敏,且使用簡單,所以這是一個很好的自動化檢測數據變化的工具。

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

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

wKioL1nIfZGx9Kd4AABlC7BnvlE098.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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章