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

每秒傳輸文件200mysql

Rsync放在定時任務中也只是一分鐘執行一回,要想達到實時的效果,爲防止單點nfs架構故障,再啓動一臺nfs服務器做爲主nfs服務器的備份服務器,此時須要inotify實時同步數據(秒級別同步),而這臺備份nfs服務器能夠做爲rsync備份服務器sql

 

Inotify是一種異步的文件系統事件監控機制軟件,經過inotify能夠監控文件系統中添加,刪除,修改,移動等各類事件,利用這個內核接口,第三方軟件就能夠監控文件系統性文件的各類變化狀況。mongodb

Inotify的軟件版本vim

(1)inotify-tools緩存

(2)sersync服務器

(3)lsyncd架構

其中sersync版本軟件是rsyncinotify的結合版本併發

 

 

yum倉庫安裝oracle

從網上下載一個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服務器之間經過遠程掛載進行數據共享

相關文章
相關標籤/搜索