1. 程式人生 > >Linux系統——Inotify事件監控工具

Linux系統——Inotify事件監控工具

每秒傳輸檔案200

Rsync放在定時任務中也只是一分鐘執行一回,要想達到實時的效果,為防止單點nfs架構故障,再啟動一臺nfs伺服器作為主nfs伺服器的備份伺服器,此時需要inotify實時同步資料(秒級別同步),而這臺備份nfs伺服器可以作為rsync備份伺服器

 

Inotify是一種非同步的檔案系統事件監控機制軟體,通過inotify可以監控檔案系統中新增,刪除,修改,移動等各種事件,利用這個核心介面,第三方軟體就可以監控檔案系統性檔案的各種變化情況。

Inotify的軟體版本

(1)inotify-tools

(2)sersync

(3)lsyncd

其中sersync版本軟體是

rsyncinotify的結合版本

 

 

yum倉庫安裝

從網上下載一個epel.repoyum

1)先檢視wget軟體包是否安裝,若沒有則yum安裝wget

# yum -y install wget

2# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.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(寫關閉事件)以write方式開啟檔案並關閉

close_nowrite 以非write方式開啟檔案並關閉

 

當在指定目錄中,寫入檔案資訊或建立檔案預備寫入資訊時,寫關閉時間會更新資訊,記錄情況。通常監控echo”、“touch”、“vim”命令。

# inotifywait -mrq --timefmt '%y %m %d %H %M' --format '%T %w %f' -e close_write /backup

 

 

 

 

測試moved_to(移動事件)將檔案移入被監測的目錄

moved_from將檔案移動被監測的目錄出去

# 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

 

 

 

Rsync絕對路徑

命令 | while read line(變數)預設將管道符左邊的值複製到line這個變數中,執行while迴圈

 

關鍵引數調整

/proc/sys/fs/inotify目錄下有三個檔案,對inotify機制有一定的限制
1max_user_watches:設定inotifywaitinotifywatch命令可以監視的檔案數量(單程序)
2max_user_instances:設定每個使用者可以執行的inotifywaitinotifywatch命令的程序數
3max_queued_events:設定inotify例項事件(event)佇列可容納的事件數量。

 

inotify優點及缺點

(1)優點

監控檔案系統事件變化,通過同步工具實現實時資料同步。

(2)缺點

  1. 併發如果大於200個檔案(10-100k),同步就會有延遲
    B. 我們前面寫的指令碼,每次都是全部推送一次,但確實是增量的。也可以只同步變化的檔案,不變化的不理。
    C. 監控到事件後,呼叫rsync同步是單程序的,而sersync為多程序同步。

 

sersync功能多:(inotify+rsync命令)

1)支援通過配置檔案管理
2)真正的守護程序socket
3)可以對失敗檔案定時重傳(定時任務功能)
4)第三方的HTTP介面(例如:更新cdn快取)
5)預設多程序rsync同步

 

 

高併發資料實時同步方案小結:

1)inotifysersync+ rsync,是檔案級別的。
2drbd檔案系統級別,檔案系統級別,基於block塊同步,缺點:備節點資料不可用
3)第三方軟體的同步功能:mysql同步(主從複製),oraclemongodb
4)程式雙寫,直接寫兩臺伺服器。
5)利用產品業務邏輯解決(讀寫分離,備份讀不到,讀主)

 

架構解析:

一臺伺服器的讀寫速度成為吞吐量

 

NFS的單主雙寫模式(當讀取壓力大時使用該架構,但為單點、不可擴容、吞吐量低,成本高)

單主模式的的吞吐量低,不能無限擴容,小企業才會使用,大中企業不會使用這種架構

 

 

 

使用者上傳的圖片、附件儲存在主NFS中,但是主NFS通過rsync+inotify進行實時同步,同步兩個完全一樣的作為備份:NFS備份1NFS備份2;同步的目的在於Web伺服器讀取資料NFS備份中上傳過來的資料

Web伺服器將讀取的壓力不再給主NFS,而是均衡負載到NFS備份1NFS備份2上。這樣。寫入的壓力給了主NFS,讀取的壓力在NFS備份上,這種方法稱為讀寫分離,可以提高NFS效能(通常,網際網路20%的壓力在寫入,80%的壓力在讀取,相當於多臺NFS分擔壓力)。

 

 

 

 

 

 

 

 

 

 

 

 

NFS的雙主雙寫模式(當寫入壓力大時使用該架構,網絡卡的使用要求極高,一般為萬兆網絡卡)

 

 

環境後方為兩個雙主NFS伺服器(記一個為IP1,一個為IP2),若開發時設定圖片在IP1中寫入,視訊在IP2中寫入,這樣圖片和視訊的寫入壓力被分散。

假設,Web伺服器的掛載目錄都有兩個共享目錄(一個為/backup1,、另一個為/backup2),把IP1的主NFS伺服器掛載到/backup1上,把IP2的主NFS伺服器掛載到/backup2上,每臺Web伺服器都將NFS儲存掛載到不同的共享目錄上。開發預設,不論圖片還是附件都先通過/backup1目錄中讀取,若/backup1中沒有讀取到,就去/backup2中讀取,若都為讀取到目標資料,則不存在該目標資料。通常,用來緩解NFS的寫入壓力。

 

 

 

叢集架構的搭建

NFSNFS之間通過rsyncinotify傳遞資料,進行資料間的實時同步(備份),NFSWeb伺服器之間通過遠端掛載進行資料共享