1.inotify簡介
inotify 是一個從 2.6.13 內(nèi)核開始,對 Linux 文件系統(tǒng)進行高效率、細粒度、異步地監(jiān)控機制, 用于通知用戶空間程序的文件系統(tǒng)變化??衫盟鼘τ脩艨臻g進行安全、性能、以及其他方面的監(jiān)控。Inotify 反應(yīng)靈敏,用法非常簡單,并且比 cron 任務(wù)的繁忙輪詢高效得多。如果內(nèi)核版本不低于 2.6.13,系統(tǒng)就支持 inotify。 如果存在/usr/include/sys/inotify.h 文件, 表明內(nèi)核支持 inotify。
1[root@localhost~]#ls-l/proc/sys/fs/inotify/#列出文件目錄,出現(xiàn)下面的內(nèi)容,說明服務(wù)器內(nèi)核支持inotify2total03-rw-r--r--1rootroot0Oct1305:39max_queued_events4-rw-r--r--1rootroot0Oct1305:39max_user_instances5-rw-r--r--1rootroot0Oct1305:39max_user_watches
2.inotify的作用
inotify 可以監(jiān)控文件,也可以監(jiān)控目錄。當(dāng)監(jiān)控目錄時,它可以同時監(jiān)控目錄及目錄中的各子目錄及文件的。此外, inotify 使用文件描述符作為接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 來監(jiān)視文件系統(tǒng)的變化。
3.inotify實現(xiàn)數(shù)據(jù)實時同步原理
無論是手動執(zhí)行 rsync 還是把 rsync 客戶端發(fā)出的數(shù)據(jù)同步請求命令做成周期性任務(wù)計劃, 每隔一段時間不管有沒有數(shù)據(jù)變化都發(fā)出一次數(shù)據(jù)同步請求命令, 同步一次數(shù)據(jù)。 服務(wù)端和客戶端都有時間差。所以, 使用內(nèi)核提供的 inotify 機制,當(dāng)數(shù)據(jù)發(fā)生改變時(刪除、修改等)就觸發(fā) rsync 客戶端發(fā)出數(shù)據(jù) 同步請求。 從而實現(xiàn)數(shù)據(jù)的實時傳輸。rsync + inotify 機制實現(xiàn)的兩臺服務(wù)器數(shù)據(jù)同步如下圖如示:
4.inotify的安裝與使用
1[root@localhost~]#yuminstall-yinotify-tools2[root@localhost~]#inotifywait-mrq--timefmt'%d%m%Y%H:%M'--format'%T%w%f'-ecreate/backup#創(chuàng)建對目錄/backup的監(jiān)控31710201700:02/backup/1.txt41710201700:02/backup/2.txt51710201700:02/backup/3.txt61710201700:02/backup/4.txt71710201700:02/backup/5.txt
5.inotify之inotifywait命令詳解
1參數(shù)詳解: 2-r:遞歸查詢目錄 3-q:打印監(jiān)控時間信息 4-m:始終保持時間監(jiān)聽狀態(tài) 5--excludei:排除文件或目錄時,不區(qū)分大小寫。 6--timefmt:指定時間輸出的格式 7--format:打印使用指定的輸出類似格式字符串 8a、%w:顯示被監(jiān)控文件的文件名; 9b、%f:如果發(fā)生某事件的對象是目錄,則顯示被監(jiān)控目錄的名字;默認顯示為空串;10c、%T:使用--timefmt選項中自定義的時間格式;11d、%e表示發(fā)生的事件12e、%Xe事件以“X”分隔13-e:指定需要監(jiān)控的事件14access:文件或目錄被讀取15modify:文件或目錄內(nèi)容被修改16attrib:文件或目錄屬性被改變17close:文件或目錄封閉,無論讀/寫模式18open:文件或目錄被打開19move_to:文件或目錄被移動到另外一個目錄20move:文件或目錄被移動另一個目錄或從另一個目錄移動到當(dāng)前目錄21create:文件或目錄被創(chuàng)建在當(dāng)前目錄22delete:文件或目錄被刪除23unmount:文件系統(tǒng)被卸載24常用組合:close_write,modify,delete,create,attrib
6.編寫監(jiān)控腳本
1[root@nfsscripts]#viminotify.sh 2#!/bin/bash 3/usr/bin/inotifywait-mrq'%w%f'-eclose_write,modify,delete,create/backup 4|whilereadline 5do 6cd/backup&&rsync-azP./rsync_bakup@192.168.0.175::backup/--password-file=/etc/rsync.password>/dev/null2>&1 7done 8exit0 9[root@nfsscripts]#shinotify.sh<==運行腳本監(jiān)控/backup10[root@nfs?scripts]#?touch?/backup/{1..10}.log???????????#<==NFS上創(chuàng)建文件進行測試????11[root@backup?backup]#?ll????????????????????#<==備份服務(wù)上查看是否備份成功???12total?413-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?10.log14drwxr-xr-x?2?rsync?rsync?4096?Oct?12?21:43?192.168.0.16515-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?1.log16-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?2.log17-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?3.log18-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?4.log19-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?5.log20-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?6.log21-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?7.log22-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?8.log23-rw-r--r--?1?rsync?rsync????0?Oct?17?00:28?9.log24[root@nfs?scripts]#?echo?"/bin/bash?/server/scripts/inotify.sh?&"?>>/etc/rc.local#<==設(shè)置開機啟動
7.修改inotify默認參數(shù)(inotify默認內(nèi)核參數(shù)值太?。?/p>
1查看系統(tǒng)默認參數(shù)值 2sysctl-a|grepmax_queued_events 3結(jié)果是:fs.inotify.max_queued_events=16384 4sysctl-a|grepmax_user_watches 5結(jié)果是:fs.inotify.max_user_watches=8192 6sysctl-a|grepmax_user_instances 7結(jié)果是:fs.inotify.max_user_instances=128 8修改參數(shù): 9sysctl-wfs.inotify.max_queued_events="99999999"10sysctl-wfs.inotify.max_user_watches="99999999"11sysctl-wfs.inotify.max_user_instances="65535"12vim/etc/sysctl.conf#添加以下代碼13fs.inotify.max_queued_events=9999999914fs.inotify.max_user_watches=9999999915fs.inotify.max_user_instances=6553516:wq!#保存退出1718參數(shù)說明:19max_queued_events:20inotify隊列最大長度,如果值太小,會出現(xiàn)"**EventQueueOverflow**"錯誤,導(dǎo)致監(jiān)控文件不準(zhǔn)確21max_user_watches:22設(shè)置inotifywait或inotifywatch命令可以監(jiān)視的文件數(shù)量(單進程)23max_user_instances:24每個用戶創(chuàng)建inotify實例最大值25【inotify在實際生產(chǎn)環(huán)境中,對于50-200KB的文件,inotify的最發(fā)并發(fā)量為200-300,如果客戶端寫入速度大于這個量,將會造成短暫的延遲】
8.總結(jié)
11rysnc+inotify實時備份流程:22a.實現(xiàn)從NFS客戶端到rsync服務(wù)端的rsync的部署33b.實現(xiàn)從NFS客戶端對NFS目錄文件系統(tǒng)時間的實時監(jiān)控44c.當(dāng)監(jiān)控到NFS目錄文件系統(tǒng)事件變化后,觸發(fā)rsync推送變化的文件最后來一張總結(jié)圖:
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
8958瀏覽量
85082 -
NFS
+關(guān)注
關(guān)注
1文章
52瀏覽量
26074
原文標(biāo)題:實時備份工具之inotify+rsync
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論