實時監控服務---Inotify

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

一、Inotify 簡介

       inotify是一種強大的、細粒度的、異步的文件系統事件控制機制。linux內核從2.6.13起,加入了inotify支持,通過inotify可以監控文件系統中添加、刪除、修改、移動等各種事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools正是實施監控的軟件。
       在使用rsync首次全量同步後,結合inotify對源目錄進行實時監控,只有有文件變動或新文件產生,就會立刻同步到目標目錄下,非常高效使用!

二、Inotify 安裝

[root@nfs /]# uname -r
3.10.0-1062.el7.x86_64
[root@nfs /]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_queued_events  # 設置inotify實例事件隊列可容納的事件數
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_user_instances  #設置每個用戶可以運行inotify工具命令的進程數
-rw-r--r-- 1 root root 0 Feb 26 10:23 max_user_watches  #設置inotify可以監視的文件數量
#說明:有這三個文件證明系統支持inotify
#查看三個文件的默認參數
[root@nfs /]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@nfs /]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@nfs /]# cat /proc/sys/fs/inotify/max_user_watches 
8192
#安裝Inotify
[root@nfs /]# yum install -y inotify-tools

三、Inotify 主要命令

  1. Inotifywait命令

inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]
Inotifywait命令常用參數
命令參數 命令說明
-m, --monitor 始終保持事件的監聽狀態
-r  --recursive 遞歸查詢目錄
-q, --quiet 輸出信息少(只打印監控的事件信息)
-d, –daemon 跟–monitor一樣,除了是在後臺運行,需要指定–outfile把事情輸出到一個文件。也意味着使用了–syslog
-o, –outfile 輸出事情到一個文件而不是標準輸出
-s, –syslog 輸出錯誤信息到系統日誌
--excludei  <pattern> 排除文件或者目錄,不區分大小寫
--timefmt <fmt>

自定義時間輸出格式

常用的時間格式:

%d 日  %m 月 %y 年  %H:%M 時:分

--format <fmt>

自定義inotifywait的輸出格式,

%w  事件發生時,監控文件或目錄的名稱信息

%f   事件發生時,將顯示監控目錄下觸發事件的文件

或目錄信息,否則爲空

%e   顯示發生的事件信息,將不同事件信息用逗號隔

%T    輸出時間格式中定義的時間格式信息,通過

--timefmt 選項的語法格式進行設置

%Xe   顯示事件發生的信息,不用的事件用X進行分

       ,可以修改X爲指定的分隔符
————————————————
版權聲明:本文爲CSDN博主「十五十六」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/L835311324/article/details/80512499

-e <event>

監聽指定事件,有幾個常見的事件如下:

access:讀取文件或目錄內容

modify:修改文件或者目錄內容

attrib:文件或者目錄屬性改變

close_write(常用):以可寫方式打開的文件被關閉

close_nowrite:以只讀方式打開的文件被關閉

open:文件或目錄被打開

moved_to(常用):文件或目錄移動到 

moved_from:文件從目錄移動

move:移動文件或目錄移動到監視目錄

create(常用):在監視目錄下創建文件或目錄

delete(常用): 刪除監視目錄下的文件或目錄

delete_self: 刪除目錄下的文件或目錄

unmount :卸載文件系統

  2. Inotifywatch命令

inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]

四、Inotify優化

[root@nfs /]# echo "50000000" >/proc/sys/fs/inotify/max_queued_events
# 單進程可以監控的文件數量
[root@nfs /]# echo "50000000" >/proc/sys/fs/inotify/max_user_watches 
# 隊列容納事件的數量

#說明:意思配置文件重啓系統會失效,需要放到rc.local文件中

 

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