inotify+rsync

一、rsync介紹:
rsync是類unix系統下的數據鏡像備份工具,從軟件的命名上就可以看出來--remote sync。

特性:
可以鏡像保存整個目錄樹和文件系統。
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
無須特殊權限即可安裝。
快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。

二、inotify介紹:
inotify可以監控文件,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及文件的。此外,inotify 使用文件描述符作爲接口,因而可以使用通常的文件I/O操作select、poll和epoll來監視文件系統的變化。

inotify可以監視的文件系統常見事件包括:
IN_ACCESS:文件被訪問
IN_MODIFY:文件被修改
IN_ATTRIB,文件屬性被修改
IN_CLOSE_WRITE,以可寫方式打開的文件被關閉
IN_CLOSE_NOWRITE,以不可寫方式打開的文件被關閉
IN_OPEN,文件被打開
IN_MOVED_FROM,文件被移出監控的目錄
IN_MOVED_TO,文件被移入監控着的目錄
IN_CREATE,在監控的目錄中新建文件或子目錄
IN_DELETE,文件或目錄被刪除
IN_DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己
IN_MOVE_SELF,自移動,即一個可執行文件在執行時移動自己

三、inotify-tools
    inotify是一個API,需要通過開發應用程序進行調用,對於大多數用戶來講這有着許多不便,inotify-tools的出現彌補了這一不足。inotify-tools是一套組件,它包括一個C庫和幾個命令行工具,這些命令行工具可用於通過命令行或腳本對某文件系統的事件進行監控。

inotify-tools提供的兩個命令行工具:
    inotifywait:通過inotify API等待被監控文件上的相應事件並返回監控結果,默認情況下,正常的結果返回至標準輸出,診斷類的信息則返回至標準錯誤輸出。它可以在監控到對應監控對象上指定的事件後退出,也可以進行持續性的監控。
    inotifywatch:通過inotify API收集被監控文件或目錄的相關事件並輸出統計信息。

inotifywait命令使用簡介:
    inotifywait尤其適用於在腳本中等待某事件的發生,並可基於特定的事件執行相應操作。如將其用於腳本中監控某指定目錄中的文件上的修改、新建、刪除、屬性信息的改變,而後使用rsync命令將某事件對應的文件同步至其它主機上。其常用選項如下
-m, --monitor:inotifywait的默認動作是在監控至指定文件的特定事件發生一次後就退出了,而使用此選項則可實現持續性的監控;
-r, --recursive:遞歸監控指定目錄下的所有文件,包括新建的文件或子目錄;如果要監控的目錄中文件數量巨大,則通常需要修改/proc/sys/fs/inotify/max_users_watchs內核參數,因爲其默認值爲8192。
-e <event>, --event<event>:指定要監控的特定事件,默認是監控所有的事件;此處<event>包括access, modify, attrib,close_write, close_nowirte, close, open, moved_to, moved_from, move, create,delete, delete_selt等;
--timefmt <fmt>:當在--format選項中使用%T時,--timefrt選項則可以用來指定自定義的符合strftime規範的時間格式,此時間格式可用的格式符可以通過strftime的手冊頁獲取;--timefrt後常用的參數是'%d/%m/%y %H:%M';
--format <fmt>:自定義inotifywait的輸出格式,如--format '%T %w %f';常用的格式符如下:
%w:顯示被監控文件的文件名;
%f:如果發生某事件的對象是目錄,則顯示被監控目錄的名字;默認顯示爲空串;
%T:使用--timefmt選項中自定義的時間格式。

四,基本原理圖

wKiom1P6gIaAK3KEAAC2G3HWuwQ234.png

rysnc服務器端的配置

我們需要手動創建 rsync 的配置文件 

[root@Web1 ~]#vim /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 20

timeout = 600

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[web_log]

path = /data/web_log/

ignore errors

read only = false

list = false

hosts allow = 222.35.91.0/24

hosts deny = 0.0.0.0/32

auth users = backuser

secrets file = /etc/rsync.password

#_________________

3.    建立 rsync 用戶名和密碼文件

[root@Web1 ~]#  echo "backuser:123" >> /etc/rsync.password

/opt/tomcat_gw/webapps/

4.    爲 /etc/rsync.password 授權爲 600(這個文件的權限必須是 600)

[root@Web1 ~]# chmod -R 600 /etc/rsync.password

 到此,服務器端配置完成

客戶端的配置如下:

1.    設置 rsync 客戶端的密碼文件,客戶端只需要設置 rsync 同步的密碼即可,不用設置用戶名

[root@Web2 ~]#echo "123" > /etc/rsync.password

 2.  將密碼文件的權限設置成 600(這個文件的權限必須是 600)

[root@Web2 ~]#chmod -R 600 /etc/rsync.password

 三、配置 Inotify(在 web2上配置)

1.       安裝 inotify 軟件包

 2.       爲了保證 .mnt 目錄被自動同步,配置好web2 的 inotify 後,寫一個 inotify 的監控腳本,內容如下:

wKiom1P8KFyR4zS6AAA-_GuqJ_g560.png

 腳本相關解釋如下:

--timefmt:

指定時間的輸出格式。

--format:

指定變化文件的詳細信息。

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

然後我們將此腳本放入後臺運行,輸入如下命令即可:

Sh /root/rsync.sh& 

 

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