亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

爛泥:rsync與inotify集成實現數據實時同步更新

2024-06-28 13:22:27
字體:
來源:轉載
供稿:網友
爛泥:rsync與inotify集成實現數據實時同步更新

本文由秀依林楓提供友情贊助,首發于爛泥行天下。

上篇文章我們介紹了如何使用rsync同步文件,這篇文章我們再來介紹下,如何把rsync與inotify集成實現數據的實時同步。

要達到這個目的,我們需要分以下幾個步驟:

1、rsync的優點與不足

2、inotify是什么

3、檢測OS是否支持inotify

4、inotify相關參數詳解

5、inotify監控的文件事件類似

6、inotify-tools是什么

7、安裝inotify-tools

8、inotifywait使用詳解

9、inotifywatch使用詳解

10、inotif-tools與rsync集成

一、rsync的優點與不足

rsync在linux/Unix下是一個比較重要和實用的服務,大家應該已經知道rsync具有安全性高、備份迅速、支持增量備份等優點。

通過rsync可以解決對實時性要求不高的數據備份需求,例如:定期備份文件服務器數據到遠端服務器,對本地磁盤定期做數據鏡像等。

隨著應用系統規模的不斷擴大,對數據安全性和可靠性也提出了更高的要求,rsync在高端業務系統中也逐漸暴露出它的不足。

首先,rsync在進行同步數據時,需要先掃描所有文件后進行比對,然后再進行差量傳輸。如果文件數量達到百萬甚至千萬級,掃描所以文件將是非常耗時的。而且發生變化的往往是其中很少的一部分文件,這是非常低效的方式。

其次,rsync不能實時地去監測、同步數據。雖然它可以通過Linux守護進程的方式觸發同步,但是兩次觸發動作之間一定會有時間差。這樣就可能會導致服務端和客戶端數據出現不一致的情況,無法在應用出現故障時完全恢復數據。

基于以上原因,所以就考慮采用rsync與inotify集成的方式來解決這些問題。

二、inotify是什么

inotify是一種強大的、細粒度的、異步的文件系統事件監控機制。

Linux內核從2.6.13(2005年8月)起,加入了對inotify的支持,通過inotify可以監控文件系統中的添加、刪除、修改、移動等各種細微事件。利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣一個第三方軟件。

在上面章節中,我們講到,rsync可以實現觸發式的文件同步。它是通過crontab守護進程方式觸發,同步的數據和實際數據會有差異,而inotify可以監控文件系統的各種變化,當文件有任何變化時,就觸發rsync同步,這就剛好解決了數據同步實時性的問題。

三、檢測OS是否支持inotify

由于inotify特性需要Linux內核的支持,所以在安裝inotify-tools之前要先確認Linux系統內核是否達到2.6.13以上。如果Linux內核低于2.6.23版本,就需要重新編譯內核加入對inotify的支持,也可以用如下的方法來判斷Linux內核是否支持inotify。

注意:目前本篇文章的OS為centos 6.5 64bit。

cat /etc/system-release

uname -r

ls -lsart /PRoc/sys/fs/inotify/

clip_image001

只要執行ls -lsart /proc/sys/fs/inotify/命令,如下結果有max_user_watches、max_user_instances、max_queued_events這三個文件,說明centos 6.5 64bit是支持inotify的。

通過上圖,我們可以很明顯的看到centos 6.5 64bit是支持inotify的。

四、inotify相關參數詳解

inotify定義了三個接口參數,可以用來限制inotify消耗kernel memory的大小。由于這些參數都是內存參數,因此,可以根據應用需求實時的調節其大小。下面分別做簡單介紹:

/proc/sys/fs/inotify/max_queued_evnets

表示請求events數的最大值,超出這個值的事件將被丟棄。該值默認為16384。

注意:max_queued_events是inotify管理的隊列的最大長度,文件系統變化越頻繁,這個值就應該越大。

如果你在日志中看到Event Queue Overflow,說明max_queued_events太小需要調整參數后再次使用。

/proc/sys/fs/inotify/max_user_instances

表示每個user可創建的instances數量上限。該值默認為128。

/proc/sys/fs/inotify/max_user_watches

表示可監控目錄的最大數。該值默認為8192。

要修改以上默認值,我們可以使用以下類似手段修改。如下:

echo 30000000>/proc/sys/fs/inotify/max_user_watches

clip_image002

五、inotify監控的文件事件類型

inotify可監控的文件系統事件類型,如下:

IN_access:文件被訪問。

IN_MODIFY:文件被write。

IN_ATTRIB:文件屬性被修改,如chmod、chown等。

IN_CLOSE_WRITE:可寫文件被close。

IN_CLOSE_NOWRITE:不可寫文件被close。

IN_OPEN:文件被open。

IN_MOVED_FROM:文件被移出被監控目錄,如mv。

IN_MOVED_TO:文件被移入被監控目錄,如mv、cp。

IN_CREATE:文件/文件夾被創建。

IN_DELETE:文件/文件夾被刪除,如rm。

IN_DELETE_SELF:自刪除,即一個可執行文件在執行時刪除自己。

IN_MOVE_SELF:自移動,即一個可執行文件在執行時移動自己。

IN_UNMOUNT:宿主文件系統被umount。

IN_CLOSE:文件被關閉,等同于(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE)。

IN_MOVE:文件被移動,等同于(IN_MOVED_FROM|IN_MOVED_TO)。

注意:上面所說的文件也包括目錄。

六、inotify-tools是什么

inotify僅僅是一個API,需要通過開發應用程序進行調用。inotify-tools就是這樣的一個inotify軟件,它是一套組件,包括一個C庫和幾個命令行工具。這些命令行工具可用于通過命令行或腳本對某些文件系統的事件進行監控。

inotify是為替代dnotify而設計的,它克服了dnotify的缺陷,提供了更好用的,更簡潔而強大的文件變化通知機制。

1)inotify不需要對被監視的目標打開文件描述符,而且如果被監視目標在可移動介質上,那么在umount該介質上的文件系統后,被監視目標對應的watch將被自動刪除,并且會產生一個umount事件。

2)inotify既可以監視文件,又可以監視目錄。

3)inotify使用系統調用而非SIGIO信號來通知文件系統事件。

4)inotify使用文件描述符作為接口,因而可以使用通常的文件I/O操作select和poll來監視文件系統的變化。

七、安裝inotify-tools

inotify-tools的安裝可以分為源碼方式和RPM方式。下面就這兩種方式一一講解。

注意:inotify-tools主要是通過inotifywait和inotifywatch,這兩個命令進行工作。特別是inotifywait命令,是我們生產環境中使用最多的命令。

7.1 源碼方式安裝

源碼方式安裝inotify-tools,我們可以去inotify-tools官網去下載源碼包。

inotify-tools官網:

https://github.com/rvoicilas/inotify-tools/wiki

下載inotify-tools并安裝,如下:

clip_image003

注意:不建議使用wget下載inotify-tools,因為我在使用wget下載inotify-tools一直不成功,后來查詢相關資料發現是github網站的原因。

wget https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

clip_image004

我們可以先通過瀏覽器下載本地,然后通過rz命令上傳到服務器。

要使用rz命令,我們需要安裝lrzsz軟件,如下:

yum -y install lrzsz

clip_image005

lrzsz安裝完畢后,我們來上傳inotify-tools軟件包。如下:

clip_image006

現在開始解壓、安裝inotify-tools,如下:

tar -xf inotify-tools-3.14.tar.gz

./configure

make&&make install

clip_image007

clip_image008

clip_image009

安裝完畢后,我們切換到/usr/local/bin/目錄下查看,如下:

cd /usr/local/bin/

clip_image010

通過上圖,我們可以看到inotifywait和inotifywatch命令已經被安裝到/usr/local/bin/目錄下。

7.2 RPM方式安裝

要RPM方式安裝inotify-tools,我們首先要配置yum源,否則系統會提示找不到inotify-tools這軟件包。如下:

clip_image011

我們可以去下面這個連接下載最新的yum源,如下:

http://dl.fedoraproject.org/pub/epel/6/x86_64/

clip_image012

下載epel-release-6-8.noarch.rpm軟件包并安裝,如下:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -ivh epel-release-6-8.noarch.rpm

clip_image013

clip_image014

以上操作完畢后,我們再來yum安裝inotify-tools,如下:

yum –y install inotify-tools

clip_image015

查看inotify-tools安裝的生成的文件,如下:

rpm -ql inotify-tools

clip_image016

通過上圖,我們可以很容易的看到inotifywait和inotifywatch已經被安裝到了/usr/bin/目錄下。

以上就是有關inotify-tools的安裝。

八、inotifywait使用詳解

inotify-tools命令中,我們使用最多的就是inotifywait命令。

inotifywait是一個監控等待事件,它主要用于監控文件或目錄的變化,并且可以遞歸地監控整個目錄樹。

8.1 inotifywait命令詳解

有關inotifywait的使用方法,我們可以通過它的幫助信息查看。如下:

inotifywait -h

clip_image017

clip_image018

通過上圖,我們可以看到inotifywait參數很多。下面我們就介紹下一些經常使用的參數:

-m表示始終保持事件監聽狀態。

-r表示遞歸查詢目錄。

-q表示打印出監控事件。

-e通過此參數可以指定要監控的事件。可監聽的事件,如下:

access:訪問,讀取文件。

modify:修改,文件內容被修改。

attrib:屬性,文件元數據被修改。

move:移動,對文件進行移動操作。以及重命名,對文件進行重命名。

create:創建,生成新文件

open:打開,對文件進行打開操作。

close:關閉,對文件進行關閉操作。

delete:刪除,文件被刪除。

--timefmt是指定時間的輸出格式,用于--format選項中的%T格式。

--format指定文件變化的詳細信息輸出格式。格式參數如下:

%w表示發生事件的目錄

%f表示發生事件的文件

%e表示發生的事件

%T使用由--timefmt定義的時間格式

%Xe事件以“X”分隔

8.2 inotifywait命令實例

8.1章節我們講解了inotifywait命令的參數,下面我們來實際使用下inotifywait命令。

我們要監測/home目錄下所有文件及目錄的變化情況,命令如下:

inotifywait -mrq --timefmt '%y/%m/%d/%H:%M' --format '%T %w %f %e' -e modify,delete,create,attrib,move,open,close,access /home/

這條命令表示對/home目錄下所有文件及目錄的操作進行監控。

clip_image019

現在我們打開另外一個窗口對/home目錄進行操作,如下:

clip_image020

我們是在/home目錄下創建一個空的文件createfile以及一個新的目錄createmkdir。

現在我們來切換到剛剛執行inotifywait命令的窗口,如下:

clip_image021

通過上圖,我們可以很容易的看到inotifywait已經監控到我們前面創建的文件以及目錄。

九、inotifywatch使用詳解

除了inotifywatit命令之外,inotify-tools還有一個命令inotifywatch。

inotifywatch主要用于收集被監控的文件系統統計數據,包括每個inotify事件發生多少次等信息。

9.1 inotifywatch命令詳解

inotifywatch使用可以查看其幫助信息,如下:

inotifywatch -h

clip_image022

inotifywatch參數說明如下:

-h:輸出幫助信息。

-v:輸出詳細信息。

@:排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。

–-fromfile:從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。

-z:輸出表格的行和列,即使元素為空。

–-exclude:正則匹配需要排除的文件,大小寫敏感。

–-excludei:正則匹配需要排除的文件,忽略大小寫。

-r:監視一個目錄下的所有子目錄。

-t:設置超時時間。

-e:只監聽指定的事件。該事件與inotifywait監聽的事件類型一樣。

-a:以指定事件升序排列。

-d:以指定事件降序排列。

9.2 inotifywatch命令實例

9.1章節我們講解了inotifywatch命令的參數,下面我們來實際使用下inotifywatch命令。

要求統計60秒內/home目錄下文件系統的事件,使用如下命令:

inotifywatch -v -e modify,delete,create,attrib,move,open,close,access -e modify -t 60 -r /home

clip_image023

現在我們打開另外一個窗口對/home目錄進行操作,如下:

clip_image024

我們是在/home目錄下刪除一個文件createfile以及重命名createmkdir為test。

現在我們來切換到剛剛執行inotifywatch命令的窗口,如下:

image

通過上圖,我們可以很容易的看到inotifywatch已經監控到我們前面刪除的文件和重命名的目錄文件事件數量。

十、inotify-tools與rsync集成

inotify-tools與rsync的集成主要是通過inotifywait命令與rsync命令集成來實現的,并且該集成主要是體現的rsync客戶端,而rsync服務器端正需要按照正常的配置進行即可。

注意:該集成的主要目的是把rsync客戶端需要備份的文件實時推送到rsync服務器上。

有關rsync的配置,可以參考《爛泥:linux文件同步之rsync學習(一)》這篇文章,而且本次實驗的環境和這篇文章是同一個環境。

rsync服務器是192.168.199.247,rsync客戶端為192.168.199.248。

我們現在的要求是只要rsync客戶端的/home/www目錄下有任何文件或者目錄有改動的情況,都要實時的同步到rsync服務器上。

rsync服務器已經正常運行,相關配置文件如下:

clip_image027

clip_image028

下面我們的所有操作都是在rsync客戶端上進行的,其實inotifywait命令與rsync命令集成,我們所要做的只是寫一個shell腳本即可。腳本內容如下:

#!/bin/bash

src=/root/www/

dest=www

ip=192.168.199.247

/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y%H:%M' --format '%T %w %f' -e modify,delete,create,attrib $src | while read DATE TIME DIR FILE;

do

filechange=${DIR}${FILE}

/usr/bin/rsync -avz --delete --progress $src apache@$ip::$dest --passWord-file=/etc/rsyncd.password &

echo "At ${TIME} on ${DATE}, file $filechange was backed up via rsynce" >>/tmp/rsync.log 2>&1

done

clip_image029

在這個腳本中,我只講解while read DATE TIME DIR FILE這條語句,其他語句請自行查看相關文檔。

inotifywait命令產生三個返回值,分別是“日期,時間,文件”這3個返回值會做為參數傳給read,因此腳本中的“while read D E F”寫法細化了返回值。

該腳本的原理是利用inotifywait命令對指定的文件和目錄進行監控,如果指定文件和目錄有改變那么就啟動rsync同步命令。

上述腳本寫好后,我們要給予其執行權限,然后配置其開機后臺運行,并啟動。使用如下命令:

chmod 700 inotify.sh

chmod u+x inotify.sh

ll |grep inotify.sh

echo "sh /root/inotify.sh > /dev/null &" >>/etc/rc.local

sh inotify.sh > /dev/null &

clip_image030

注意:為了讓該腳本啟動后臺運行,一定要把啟動命令寫成圖中的形式,否則該腳本在進行同步文件時會報如下的信息:

clip_image031

以上配置完畢后,我們來測試看看其效果。在rsync客戶端上新建一個文件ilanni.txt,如下:

touch www/ilanni.txt

clip_image032

現在切換rsync服務器上查看剛剛在rsync客戶端上創建的文件是否已經同步過來。

clip_image033

通過上圖,我們可以很明顯的看到文件已經同步過來。

再來rsync客戶端查看相關的日志,如下:

clip_image034

可以看到日志中記錄同步的時間已經同步的文件。

到此inotify-tools與rsync的集成已經全部配置完畢。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区美女视频| 国产福利视频一区| 欧美中文在线观看| 国产日韩精品在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 欧美日韩免费在线| 亚洲精品日韩激情在线电影| 精品视频中文字幕| 国产男女猛烈无遮挡91| 亚洲爱爱爱爱爱| 国产精品99久久久久久久久| 欧洲精品毛片网站| 国产精品成人播放| 亚洲精品国产拍免费91在线| 日韩av在线导航| 欧美成人免费在线观看| 日韩av在线网| 国产精品高潮呻吟久久av黑人| 精品毛片三在线观看| 欧美激情2020午夜免费观看| 亚洲mm色国产网站| 97视频免费看| 欧美一区二区三区艳史| 欧美日韩国产123| 欧美精品videosex极品1| 亚洲欧洲一区二区三区久久| 亚洲精品美女免费| 国产欧美精品在线播放| 久久资源免费视频| 色www亚洲国产张柏芝| 97视频在线观看免费高清完整版在线观看| 亚洲高清免费观看高清完整版| 亚洲欧美国产另类| 精品中文字幕久久久久久| 国产精品96久久久久久| 欧美影院在线播放| 成人写真福利网| 久久久精品网站| 韩日欧美一区二区| 亚洲理论片在线观看| 久久久久久九九九| 国产一区二中文字幕在线看| 久久99国产精品久久久久久久久| 欧美性少妇18aaaa视频| 中文字幕久久精品| 国产欧美久久一区二区| 精品国产电影一区| 欧美日本精品在线| 欧美精品videos另类日本| 亚洲人成电影在线观看天堂色| 三级精品视频久久久久| 国产精品美女视频网站| 久久久精品影院| 国内精品久久久久久中文字幕| 九九热视频这里只有精品| 日本高清视频一区| 日本道色综合久久影院| 国产成人久久久精品一区| 亚洲xxx自由成熟| 亚洲人成在线观看| 亚洲嫩模很污视频| 亚洲性xxxx| 亚洲精品国产精品国自产观看浪潮| 4438全国成人免费| 亚洲黄色有码视频| 欧洲日本亚洲国产区| 久久男人资源视频| 亚洲一区二区免费在线| 国产亚洲免费的视频看| 国产精品视频地址| 日韩中文av在线| 久久理论片午夜琪琪电影网| 亚洲精品资源美女情侣酒店| 日本亚洲欧美成人| 亚洲国产精品久久久久秋霞不卡| 日韩成人激情视频| 国产精品久久久久久久久久免费| 国产精品网站大全| 欧美高跟鞋交xxxxhd| 日韩在线免费观看视频| 日韩av在线播放资源| 国产噜噜噜噜噜久久久久久久久| 欧美激情一二三| 欧美午夜片欧美片在线观看| 国产精品av网站| 成人有码视频在线播放| 亚洲精品国产综合区久久久久久久| 性欧美xxxx视频在线观看| 亚洲国产精品成人一区二区| 亚洲国产另类 国产精品国产免费| 91av视频在线播放| 亚洲国产日韩欧美在线99| 国产精品欧美在线| 久久久国产在线视频| 亚洲乱码一区av黑人高潮| 7m第一福利500精品视频| 亚洲国产黄色片| 久久精品福利视频| 国产一区二区三区视频在线观看| 欧美激情一二区| 国产美女久久久| 成人有码视频在线播放| 97在线精品视频| 欧美床上激情在线观看| 精品少妇v888av| 亚洲老司机av| 日韩成人网免费视频| 欧美激情视频一区| 97久久精品人人澡人人爽缅北| 欧美精品www在线观看| 成人羞羞国产免费| 92国产精品视频| 91久久综合亚洲鲁鲁五月天| 亚洲欧洲在线播放| 欧美日韩免费区域视频在线观看| 9.1国产丝袜在线观看| 疯狂蹂躏欧美一区二区精品| 一个色综合导航| 久久91精品国产| 91精品视频在线看| 亚洲天堂av女优| 久久久久久久电影一区| 欧美日韩福利在线观看| 国内精品久久久久| 精品国产一区二区三区四区在线观看| 国语自产精品视频在线看| 国产精品久久久久久久久免费看| 亚洲色图18p| 亚洲成人黄色在线观看| 久久亚洲精品网站| 亚洲女在线观看| 日韩禁在线播放| 91在线|亚洲| 91国产视频在线| 亚洲另类xxxx| 亚洲国产成人精品久久久国产成人一区| 亚洲欧洲日产国码av系列天堂| 欧美性猛交xxxx乱大交蜜桃| 欧美激情一区二区三区成人| 97在线免费观看| 欧美日韩国产中字| 国产精品大片wwwwww| 国产美女精品视频| 欧美成人免费网| 亚洲免费av片| 国产视频亚洲精品| 这里只有精品久久| 亚洲天堂av高清| 亚洲一区二区日本| 亚洲国产免费av| 国产精品视频网站| 成人国产精品免费视频| 精品调教chinesegay| 国产午夜精品美女视频明星a级| 欧美日韩免费区域视频在线观看| 日韩在线免费高清视频| 国产区亚洲区欧美区| 亚洲精品自产拍| 亚洲综合中文字幕68页| 欧美成人免费观看| 日韩欧美高清在线视频| 97碰碰碰免费色视频| 欧美丝袜一区二区三区| 亚洲人成网站777色婷婷|