Linux系統——Inotify事件監控工具
每秒傳輸檔案200個
Rsync放在定時任務中也只是一分鐘執行一回,要想達到實時的效果,為防止單點nfs架構故障,再啟動一臺nfs伺服器作為主nfs伺服器的備份伺服器,此時需要inotify實時同步資料(秒級別同步),而這臺備份nfs伺服器可以作為rsync備份伺服器
Inotify是一種非同步的檔案系統事件監控機制軟體,通過inotify可以監控檔案系統中新增,刪除,修改,移動等各種事件,利用這個核心介面,第三方軟體就可以監控檔案系統性檔案的各種變化情況。
Inotify的軟體版本
(1)inotify-tools
(2)sersync
(3)lsyncd
其中sersync版本軟體是
雲yum倉庫安裝
從網上下載一個epel.repo的yum源
(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機制有一定的限制
(1)max_user_watches:設定inotifywait或inotifywatch命令可以監視的檔案數量(單程序)
(2)max_user_instances:設定每個使用者可以執行的inotifywait或inotifywatch命令的程序數
(3)max_queued_events:設定inotify例項事件(event)佇列可容納的事件數量。
inotify優點及缺點
(1)優點
監控檔案系統事件變化,通過同步工具實現實時資料同步。
(2)缺點
- 併發如果大於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伺服器(記一個為IP1,一個為IP2),若開發時設定圖片在IP1中寫入,視訊在IP2中寫入,這樣圖片和視訊的寫入壓力被分散。
假設,Web伺服器的掛載目錄都有兩個共享目錄(一個為/backup1,、另一個為/backup2),把IP1的主NFS伺服器掛載到/backup1上,把IP2的主NFS伺服器掛載到/backup2上,每臺Web伺服器都將NFS儲存掛載到不同的共享目錄上。開發預設,不論圖片還是附件都先通過/backup1目錄中讀取,若/backup1中沒有讀取到,就去/backup2中讀取,若都為讀取到目標資料,則不存在該目標資料。通常,用來緩解NFS的寫入壓力。
叢集架構的搭建
NFS與NFS之間通過rsync和inotify傳遞資料,進行資料間的實時同步(備份),NFS與Web伺服器之間通過遠端掛載進行資料共享