inotify事件監控工具
inotify是一種非同步的檔案系統事件監控機制軟體,通過inotify可以監控檔案系統中新增,刪除,修改,移動等各種事件,利用這個核心介面,第三方軟體就可以監控檔案系統性檔案的各種變化情況。
inotify的軟體版本
(1)inotify-tools
(2)sersync
(3)lsyncd
其中sersync版本軟體是rsync與inotify的結合版本
雲yum倉庫安裝
(1)先檢視wget軟體包是否安裝,若沒有則yum安裝wget
# yum -y install wget
(2)# wget -o /etc/yum.repos.d/epel.repo
(3)# yum -y clean all
(4)# yum makecache
inotify安裝步驟
# yum -y install inotify-tools
# which inotifywait
inotifywait引數
含義說明
-r --recursive
遞迴查詢目錄
-q --quiet
列印很少的資訊,僅僅列印監控事件的資訊
-m,--monitor
始終保持事件監聽狀態
--exclude
排除檔案或目錄時,不區分大小寫。
--timefmt
指定時間輸出的格式
--format
列印使用指定的輸出類似格式字串
-e,--event
通過此引數可以指定需要監控的事件,如下乙個列表所示
-e :--event的各種事件含義
events
含義access
檔案或目錄被讀取
modify
檔案或目錄內容被修改
attrib
檔案或目錄屬性被改變
close
檔案或目錄封閉,無論讀/寫模式
open
檔案或目錄被開啟
moved_to
檔案或目錄被移動至另外乙個目錄
move
檔案或目錄被移動到另乙個目錄或從另乙個目錄移動至當前目錄
create
檔案或目錄被建立在當前目錄
delete
檔案或目錄被刪除
umount
檔案系統被解除安裝
人工測試監控事件
開啟兩個視窗
測試create(創新事件)
# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e create /backup
-mrq:-m 進行不間斷持續監聽
-q 只輸入簡短資訊
-r 遞迴監控整個目錄包括子目錄
--timefmt 『』 指定輸出的時間格式
「%y %m %d %h %m」----「年 月 日 小時 分鐘」
--format 『』 輸出的不僅是時間,還有路徑,會按照指定的格式輸出變化的路徑
「%t %w %f」-----「時間 路徑 檔名」
-e 指定監控事件型別,「以create建立事件為例」
/backup 監控的目錄
%w%f 表達的是路徑+檔名,也就是絕對路徑;
若管道符給rsync,就可以實時傳送建立事件
測試delete(刪除事件)
# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e delete /backup
當刪除指定目錄的檔案時,delete事件有更新跟蹤
測試close_write(寫關閉事件)
當在指定目錄中,寫入檔案資訊或建立檔案預備寫入資訊時,寫關閉時間會更新資訊,記錄情況。通常監控「echo」、「touch」、「vim」命令。
# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e close_write /backup
測試moved_to(移動事件)
# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e moved_to /backup
編寫inotify實時監控指令碼
將inotify實時監控放在後台(在命令後面加「&」)
# inotifywait -mrq --timefmt '%y %m %d %h %m' --format '%t %w %f' -e moved_to /backup &
# backup_server=備份伺服器的ip位址
inotify絕對路徑 -mrq --format 『%w%f』 -e create,close_write,delete /data | while read line
關鍵引數調整
在/proc/sys/fs/inotify目錄下有三個檔案,對inotify機制有一定的限制
(1)max_user_watches:設定inotifywait或inotifywatch命令可以監視的檔案數量(單程序)
(2)max_user_instances:設定每個使用者可以執行的inotifywait或inotifywatch命令的程序數
(3)max_queued_events:設定inotify例項事件(event)佇列可容納的事件數量。
inotify優點及缺點
(1)優點
監控檔案系統事件變化,通過同步工具實現實時資料同步。
(2)缺點
a. 併發如果大於200個檔案(10-100k),同步就會有延遲
b. 我們前面寫的指令碼,每次都是全部推送一次,但確實是增量的。也可以只同步變化的檔案,不變化的不理。
c. 監控到事件後,呼叫rsync同步是單程序的,而sersync為多程序同步。
sersync功能多:(inotify+rsync命令)
1)支援通過配置檔案管理
2)真正的守護程序socket
3)可以對失敗檔案定時重傳(定時任務功能)
4)第三方的http介面(例如:更新cdn快取)
5)預設多程序rsync同步
1)inotify(sersync)+
rsync,是檔案級別的。
2)drbd檔案系統級別,檔案系統級別,基於block塊同步,缺點:備節點資料不可用
3)第三方軟體的同步功能:mysql同步(主從複製),oracle,mongodb
4)程式雙寫,直接寫兩台伺服器。
5)利用產品業務邏輯解決(讀寫分離,備份讀不到,讀主)
架構解析:
nfs的單主雙寫模式(當讀取壓力大時使用該架構,但為單點、不可擴容)
使用者上傳的、附件儲存在主nfs中,但是主nfs通過rsync+inotify進行實時同步,同步兩個完全一樣的作為備份:nfs備份1、nfs備份2;同步的目的在於web伺服器讀取資料nfs備份中上傳過來的資料
web伺服器將讀取的壓力不再給主nfs,而是均衡負載到nfs備份1、nfs備份2上。這樣。寫入的壓力給了主nfs,讀取的壓力在nfs備份上,這種方法稱為讀寫分離,可以提高nfs效能(通常,網際網路20%的壓力在寫入,80%的壓力在讀取,相當於多台nfs分擔壓力)。
nfs的雙主雙寫模式(當寫入壓力大時使用該架構)
nfs的雙主雙寫模式(當寫入壓力大時使用該架構)
假設,web伺服器的掛載目錄都有兩個共享目錄(乙個為/backup1,、另乙個為/backup2),把ip1的主nfs伺服器掛載到/backup1上,把ip2的主nfs伺服器掛載到/backup2上,每台web伺服器都將nfs儲存掛載到不同的共享目錄上。開發預設,不論還是附件都先通過/backup1目錄中讀取,若/backup1中沒有讀取到,就去/backup2中讀取,若都為讀取到目標資料,則不存在該目標資料。通常,用來緩解nfs的寫入壓力。
inotify非同步檔案實時監控
inotify是linux核心提供的一組系統呼叫,它可以監控檔案系統操作,比如檔案或者目錄的建立 讀取 寫入 許可權修改和刪除等。inotify使用也很簡單,使用inotify init建立乙個控制代碼,然後通過inotify add watch inotify rm watch增加 刪除對檔案和目...
inotify監控軟體 實時同步
建立乙個檔案描述符,附加乙個或多個監視器 乙個監視器 是乙個路徑和一組事件 然後使用 read 方法從描述符獲取事件。確認epel源可以使用 yum y install inotify tools usr bin inotifywait 監控資料變化命令 預設監控一次 語法結構 inotify 引數...
基於inotify的檔案監控方案
最近在做乙個linux上的檔案監控程式,2.6核心提供了inotify機制,這僅僅是個機制,任何策略都必須自己實現,這一點從inotify不提供遞迴介面就可以看出來,如果我實時監控到目錄被建立,那麼馬上將這個新目錄加入監控表,這個想法是最初的想法,也是最直接的想法,可是仔細推敲一下就會發現這個實現有...