全网实时热备inotify+rsync
title: 全網實時熱備inotify+rsync
tags: 備份,inotify,rsync
全網實時熱備inotify+rsync
1 為什么需要inotify?
當全網部署了NFS存儲后,如果提供NFS服務的設備宕機或者故障了,那么我們的與之相連的NFS客戶端都會受到影響,嚴重可能會導致數據丟失,因此,為了防止單點故障,我們要給提供NFS服務的主機的數據目錄做一個實時同步,這樣NFS服務器宕機或者其他故障后,我們能很輕易的把備份節點設置為NFS的共享目錄,讓那些NFS客戶端重新掛載NFS共享盤,這樣可以盡量減少損失,提高服務滿意度。
inotify是可以監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,使用起來也十分高效, 而rsync可以直接推送文件到遠程daemon目錄,而且支持增量備份。因此我們可以通過使用inotify監控到文件系統有創建,刪除,修改后觸發rsync進行同步推送到備份服務器里。于是如圖所示,我們在備份服務器里搭建一個rsync daemon,并創建/backup用來專門與NFS存儲的數據目錄作為實時同步的遠端目錄,而在對應的NFS存儲中安裝inotify,用來對/data目錄進行動態監控,一旦發現/data目錄有創建,刪除,修改后立刻觸發rsync進行同步推送到備份服務器的/backup里,從而保證兩端的數據一致性,增強NFS存儲的安全性。
2 安裝inotify
解壓縮,并安裝inotify,因為inotify是一個源碼包文件,所以安裝的時候注意,先要編譯,通過--prefix=PATH指定編譯安裝的路徑,然后在進行make和make install。安裝完成后,因為源碼安裝是帶程序的版本號的,最好做一個軟鏈接把版本號去掉,這樣在后續使用中會方便很多。另外安裝后,在安裝目錄中會生成4個目錄,bin (inotify的執行命令)、 include (inotify所需的頭文件) 、lib (動態鏈接文件)、 share (幫助文檔)。安裝過程如下:
[root@server ~]# tar zxf inotify-tools-3.14.tar.gz [root@server ~]# ls -l |grep "inotify-tools-3.14" drwxrwxrwx. 5 1000 1000 4096 Mar 14 2010 inotify-tools-3.14 -rw-r--r--. 1 root root 358772 May 19 17:52 inotify-tools-3.14.tar.gz [root@server ~]# cd inotify-tools-3.14 [root@server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14/ [root@server inotify-tools-3.14]# make && make install [root@server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify-tools [root@server inotify-tools-3.14]# cd /usr/local/inotify-tools && ls bin include lib share3 inotify的相關命令和參數介紹
3 . 對inotify進行測試,看看是否滿足需求
[root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data 因為inotify開啟后是時刻監控著/data目錄,切處于阻塞狀態,因此我們要么讓它在后臺運行,要么重新開一個窗口,因為我們需要清晰的看到監控的事件,因此重新再打開一個窗口。 Last login: Sun May 20 20:06:00 2018 from 192.168.50.50 [root@server ~]# [root@server ~]# cd /data [root@server data]# ls a aaa bb cc dd file nnn [root@server data]# [root@server data]# [root@server data]# rm -rf * [root@server data]# ls [root@server data]# [root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data/data/a /data/aaa /data/bb /data/cc /data/dd /data/file /data/nnn 由此我們可以看到了,inotify確實監控到了這些事件的發生,因此我們可以利用read這個變化來觸發調用rsync進行推送數據。4 在備份服務器上部署rsync daemon
[root@backup ~]# rsync --daemon
5 我們可以在NFS服務端部署腳本,讓腳本監控到事件發生后調用rsync進行推送
[root@server scripts]# cat inotify.sh #!/bin/bash inotify=/usr/local/inotify-tools/bin/inotifywait $inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file do cd / && rsync -az /data --delete rsync-backup@192.168.50.4::backup/ \ --password-file=/etc/rsync.password done6 進行對server和backup進行測試
server端創建文件: [root@server data]# rm -rf * [root@server data]# touch a [root@server data]# rm -rf * [root@server data]# for n in `seq 1000` ;do touch file$n; done [root@server data]# ls |wc -l 1000 backup端查看是否推送過來: [root@backup backup]# cd data [root@backup data]# ls a [root@backup data]# [root@backup data]# [root@backup data]# ls [root@backup data]# [root@backup data]# ls |wc -l 10007 將inotify腳本設置為開機啟動,這樣兩臺服務器就可以永久實現實時同步
[root@backup data]# echo "sh /service/scripts/inotify.sh & " >>/etc/rc.local
8 inotify對應的優化參數:
在/proc/sys/fs/inotify目錄下的max_queued_events 、max_user_instances、max_user_watches對inotify有一定的限制。其中:
[root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
轉載于:https://blog.51cto.com/ouyangtao/2121825
總結
以上是生活随笔為你收集整理的全网实时热备inotify+rsync的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 523. Continuous Suba
- 下一篇: git 常用命令以及其他使用笔记