rsync+inotify實現數據的實時同步更新

?

rsync可以實現觸發式的文件同步,但是通過crontab守護進程方式進行觸發,同步的數據和實際數據會有差異,而inotify可以監控文件系統的各種變化,當文件有任何變動時,就觸發rsync同步,這樣就可以解決同步數據的實時性問題。

一、rsync的優點與不足

rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如定期的備份文件服務器數據到遠端服務器,對本地磁盤定期做數據鏡像等。

隨著應用系統規模的不斷擴大,對數據的安全性和可靠性也提出的更好的要求,rsync在高端業務系統中也逐漸暴露出了很多不足,首先,rsync同步數據時,需要掃描所有文件后進行比對,進行差量傳輸。如果文件數量達到了百萬甚至千萬量級,掃描所有文件將是非常耗時的。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它可以通過Linux守護進程的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端數據可能出現不一致,無法在應用故障時完全的恢復數據?;谝陨显颍瑀sync+inotify可以解決這個問題。

二、 inotify

Inotify 是一種強大的、細粒度的、異步的文件系統事件監控機制,linux內核從2.6.13起,加入了Inotify支持,通過Inotify可以監控文件系統中添加、刪除,修改、移動等各種細微事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。

我們曾講到,rsync可以實現觸發式的文件同步,但是通過crontab守護進程方式進行觸發,同步的數據和實際數據會有差異,而inotify可以監控文件系統的各種變化,當文件有任何變動時,就觸發rsync同步,這樣剛好解決了同步數據的實時性問題。

三、 安裝inotify工具inotify-tools

由于inotify特性需要Linux內核的支持,在安裝inotify-tools前要先確認Linux系統內核是否達到了 2.6.13以上,如果Linux內核低于2.6.13版本,就需要重新編譯內核加入inotify的支持,也可以用如下方法判斷,內核是否支持 inotify(服務器系統為Centos6.5 x86_64):

uname -r

2.6.18-194.el6

ls -lsart /proc/sys/fs/inotify/

總計 0

 max_user_watches
 max_user_instances
 max_queued_events

通過以上顯示我們明白,Centos6.5 x86_64是支持inotify的。

四、inotify的簡單介紹

Inotify 是文件系統事件監控機制,作為 dnotify 的有效替代。dnotify 是較早內核支持的文件監控機制。Inotify 是一種強大的、細粒度的、異步的機制,它滿足各種各樣的文件監控需要,不僅限于安全和性能。

inotify 可以監視的文件系統事件包括:

  • IN_ACCESS,即文件被訪問
  • IN_MODIFY,文件被 write
  • IN_ATTRIB,文件屬性被修改,如 chmod、chown、touch 等
  • IN_CLOSE_WRITE,可寫文件被 close
  • IN_CLOSE_NOWRITE,不可寫文件被 close
  • IN_OPEN,文件被 open
  • IN_MOVED_FROM,文件被移走,如 mv
  • IN_MOVED_TO,文件被移來,如 mv、cp
  • IN_CREATE,創建新文件
  • IN_DELETE,文件被刪除,如 rm
  • IN_DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己
  • IN_MOVE_SELF,自移動,即一個可執行文件在執行時移動自己
  • IN_UNMOUNT,宿主文件系統被 umount
  • IN_CLOSE,文件被關閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
  • IN_MOVE,文件被移動,等同于(IN_MOVED_FROM | IN_MOVED_TO)

注:上面所說的文件也包括目錄。

五、rsync+inotify企業應用案例

我們的后端WEB是二臺部署了Nginx的WEB服務器,由于沒有共享存儲,我們現在要實現的是對它們的根目錄/data/htdocs/www實現即時同步更新。

WebServer1:192.168.10.5,Centos6.5 x86_64
WebServer2:192.168.10.6,Centos6.5 x86_64

根目錄均為/data/htdocs/www,自動同步順序為WebServer2à WebServer1,我們將WebServer1配置成rsync的服務器端即可

1.我們首先開始安裝inotify-tools

可以到http://inotify-tools.sourceforge.net/下載相應的inotify-tools版本,然后開始編譯安裝:

# cd /usr/local/src
# tar zxvf inotify-tools-3.14.tar.gz
# ln -sv inotify-tools-3.14 inotify-tools
# cd inotify-tools
# ./configure 
# make && make install

或直接 yum install inotify-tools

2.WebServer1端

即192.168.10.35的rsync,我們配置好/etc/rsyncd.conf文件,如下:

[root@server ~0m]# vim /etc/rsyncd.conf
uid = nobody
gid = nobody
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[www]
path=/data/htdocs/
ignore errors
read only = no
list = no
hosts allow = 192.168.1.0/255.255.255.0
auth users = www
secrets file = /etc/rsyncd.password

然后重啟xinetd即可,如下所示:

/etc/init.d/xinetd restart

記得二臺WEB機器都要配置/etc/rsyncd.passwd文件,rsync的配置過程和原理請大家參考http://blog.csdn.net/moqiang02/article/details/37937795這里就不詳細說明了。

3.我們配置好WebServer2的inotify

讓其開機即啟動,腳本內容如下:

vim /root/rsync.sh
#!/bin/bash
src=/data/htdocs/www/
des=www
ip=192.168.10.35
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
do
rsync -vzrtopg --delete --progress $src www@$ip::$des --password-file=/etc/rsyncd.password &&
echo "$src was rsynced"
done

腳本相關解釋如下:

  • timefmt:指定時間的輸出格式。
  • format:指定變化文件的詳細信息。

這個腳本的作用就是通過inotify監控文件目錄的變化,進而觸發rsync進行同步操作,由于這個過程是一種主動觸發操作,通過系統內核完成的,所以,比起那些遍歷整個目錄的掃描方式,效率要高很多。

然后我們將此腳本放在/etc/rc.local,即在最后一行添加,/etc/rc.local文件改動后內容如下:

[root@slave www0m]# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/root/rsync.sh &

修改rc.local后重啟生效,注意最后的“&”不能少,如果不加“&”的話,系統無法重啟。

如果文件無法同步的話,也可能是rsync.sh腳本寫錯了,那么可以在命令行界面直接執行:/root/rsync.sh,看是否有語法錯誤。

4.驗證就很容易了

我們可以在192.168.10.36的機器的/data/htdocs/www目錄下新建文件,更改文件內容,我們很欣慰的發現,192.168.1.5的機器上馬上也會發生相應的改變,就像二臺機器是網絡Raid-1樣,非常方便。

總體說來,rsync+inofity比較適用于沒有存儲環境的小文件的即時同步更新,如果要更新的文件非常大而且同步的機器數量在10臺以上時,我建議還是以共享存儲的方法來解決,如果沒有資金購置昂貴的存儲,大家不妨考慮下Heartbeat+DRBD+NFS方案來作為我們的文件服務器。

 

原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/90865

(0)
nenenene
上一篇 2018-01-05
下一篇 2018-01-06

相關推薦

  • 計算機之路及初識linux

    寫在前面:     很抱歉,上周的事兒,拖到這周,也是個半成品,加班就不多說了,每個人都很忙,總要自己找時間。本計劃這個周末好好補補,無奈身不由己,剛剛回來。    還好昨夜先起了個初稿,總算是有些東西可以交代給自己,想到馬哥說的,完成遠比完善重要,雖然來不及完善,先發出來吧,有了框架,至少知道自己做過什么。盡快排版吧…

    Linux干貨 2016-12-05
  • shell腳本編程初步

    shell腳本編程初步    隨著課程學習的深入,我們已經學習了一些常用的命令,會去解決了一部分簡單的問題,但是這不能滿足復雜的工作,它可以幫助我執行自動化的常用命令、執行系統管理和故障排除、創建簡單的應用程序、處理文本或文件。所以我們開始了shell腳本的編程,幫助我們更好的去完成工作。簡單地說,shell編程相當于幫我們之前…

    Linux干貨 2016-08-15
  • 關于大型網站技術演進的思考(十二)–網站靜態化處理—緩存(4)

    原文出處: 夏天的森林   上篇我補充了下SSI的知識,SSI是一個十分常見的技術,記得多年前我看到很多門戶網站頁面的后綴是.shtml,那么這就說明很多門戶網站都曾經使用過SSI技術,其實現在搜狐網站也還在用shtml,如下圖所示: 由此可見SSI在互聯網的應用還是非常廣泛的。其實互聯網很多網頁如果我們按照動靜分離策略拆分,絕…

    2015-03-11
  • nfs服務部署wordpress

    NFS服務簡介 NFS 是Network File System的縮寫,即網絡文件系統。一種使用于分散式文件系統的協定,由Sun公司開發,于1984年向外公布。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位于服務器磁盤中的數據,是在類Unix系統間實現磁盤文件共享的一種方法。 NFS 的基本原則是“容許不同…

    2017-04-28
  • LV+M

    1、查看分區情況: 2、創建sdc分區,并且更改分區類型為8e  3、同樣步驟2操作,創建sdd分區 4、創建物理卷pv: 5、查看當前系統的物理卷: 6、創建卷組vg: 7、查看當前系統的卷組: 8、創建邏輯卷lv: 9、查看當前系統的邏輯卷: 10、創建文件系統ext4: 11、創建目錄/mnt/lv1并且掛載: 12、擴展物理卷: 13、擴展…

    Linux干貨 2016-09-19
  • linux中的權限和ACL

    linux中權限詳解和ACL

    2017-11-18
欧美性久久久久