2021-03-05 分類: 網(wǎng)站建設(shè)
在企業(yè)日常web應(yīng)用中,某些特殊的數(shù)據(jù)需要要求保持跟服務(wù)器端實(shí)時(shí)同步,那我們?cè)撊绾蝸?lái)配置呢?如何來(lái)實(shí)現(xiàn)呢?這里可以采用rsync+inotify來(lái)實(shí)現(xiàn)需求。
一、Inotify簡(jiǎn)介
Inotify 是一個(gè) Linux特性,它監(jiān)控文件系統(tǒng)操作,比如讀取、寫入和創(chuàng)建。Inotify 反應(yīng)靈敏,用法非常簡(jiǎn)單,并且比 cron 任務(wù)的繁忙輪詢高效得多。
Inotify,它是在內(nèi)核 2.6.13 版本中引入的一個(gè)新功能,它為用戶態(tài)監(jiān)視文件系統(tǒng)的變化提供了強(qiáng)大的支持,允許監(jiān)控程序打開一個(gè)獨(dú)立文件描述符,并針對(duì)事件集監(jiān)控一個(gè)或者多個(gè)文件,例如打開、關(guān)閉、移動(dòng)/重命名、刪除、創(chuàng)建或者改變屬性。
在inotify 的前身是 dnotify。由于 dnotify 的局限性太大,加之用戶始終都希望用到更好的產(chǎn)品。因此,inotify 順理成章的取代了 dnotify。
Rsync安裝完畢后,需要安裝inotify文件檢查軟件。同時(shí)為了同步的時(shí)候不需要輸入密碼,這樣可以使用ssh免密鑰方式進(jìn)行同步。
二、Rsync認(rèn)證方式-兩種方式
rsync-daemon
ssh
注意:在使用rsync時(shí),同步端和被同步端都必須安裝rsync程序。
1)rsync-daemon認(rèn)證
在rsync-daemon認(rèn)證方式下,默認(rèn)監(jiān)聽tcp的873端口
在rsync-daemon認(rèn)證下,rsync可以把密碼寫入到一個(gè)文件中。
注意:被同步端的rsync必須啟動(dòng),配置文件。同步端可以不起動(dòng)服務(wù),但必須有這個(gè)應(yīng)用。
2)ssh認(rèn)證
通過ssh隧道進(jìn)行傳輸,類似于scp工具,同步操作不在局限于rsync中定義的同步文件夾,并且雙方只要安裝rsync,也不要雙方啟動(dòng)rsync。
Rsync安裝配置參考我另一篇文章:
這里采用Rsync基于SSH認(rèn)證方式+inotify實(shí)時(shí)同步
服務(wù)端IP:192.168.8.7
客戶端IP:192.168.8.8
三、安裝inotify
1)下載inotify-tools安裝包
[root@localhost ~]# wget inotify-tools-3.14.tar.gz
1
2)解壓,安裝
[root@localhost ~]# tar zxf inotify-tools-3.14.tar.gz
[root@localhost ~]# cd inotify-tools-3.14
[root@localhost inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify
[root@localhost inotify-tools-3.14]# make && make install
2
3
3)配置免密鑰認(rèn)證,這里不再介紹,SSH免密鑰認(rèn)證可以參考我另一篇文章:
4)編寫腳本
vim rsync_inotify.sh,內(nèi)容如下
#!/bin/sh #2019-05-01 22:05:29 #by author fei ##本地需要同步的目錄 SRC=/test/ ##遠(yuǎn)程目錄 DATA=/test/ ##遠(yuǎn)程同步IP IP=192.168.8.8 inotifywait -mrq --timefmt '%Y-%m-%d-%H:%M' --format '%T %w %f' -e modify,delete,create,attrib,move $SRC | while read file do rsync -aP --delete $SRC root@$IP:$DATA done
保存退出~~
5)在服務(wù)端啟動(dòng)該腳本,創(chuàng)建測(cè)試文件
[root@localhost ~]# ln -s /usr/local/inotify/bin/* /usr/sbin //創(chuàng)建軟連接
[root@localhost ~]# mkdir /test
[root@localhost ~]# sh -x rsync_inotify.sh
[root@localhost ~]# cd /test/
[root@localhost test]# touch test.txt
4
6)在客戶端查看是否同步,如有數(shù)據(jù)代表同步
5
實(shí)時(shí)同步成功~~~
PS:創(chuàng)建文件、刪除文件、移動(dòng)文件(重命名)、訪問文件、修改文件都會(huì)被記錄
7)后臺(tái)運(yùn)行此腳本
nohup sh rsync_inotify.sh &
注:日志會(huì)記錄到nohup.out文件
其他Linux發(fā)行版安裝方法可以參見:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting
四、inotifywait命令
Inotify一種強(qiáng)大的、細(xì)粒度的、異步文件系統(tǒng)監(jiān)控機(jī)制,它滿足各種各樣的文件監(jiān)控需要,可以監(jiān)控文件系統(tǒng)的訪問屬性、讀寫屬性、權(quán)限屬性、刪除創(chuàng)建、移動(dòng)等操作,也就是可以監(jiān)控文件發(fā)生的一切變化。。
inotify-tools是一個(gè)C庫(kù)和一組命令行的工作提供Linux下inotify的簡(jiǎn)單接口。inotify-tools安裝后會(huì)得到inotifywait和inotifywatch這兩條命令:
1)inotifywait命令可以用來(lái)收集有關(guān)文件訪問信息,Linux發(fā)行版一般沒有包括這個(gè)命令,需要安裝inotify-tools,這個(gè)命令還需要將inotify支持編譯入Linux內(nèi)核,好在大多數(shù)Linux發(fā)行版都在內(nèi)核中啟用了inotify。
2)inotifywatch命令用于收集關(guān)于被監(jiān)視的文件系統(tǒng)的統(tǒng)計(jì)數(shù)據(jù),包括每個(gè) inotify 事件發(fā)生多少次。
開始之前需要檢測(cè)系統(tǒng)內(nèi)核是否支持inotify:
使用uname -r命令檢查L(zhǎng)inux內(nèi)核,如果低于2.6.13,就需要重新編譯內(nèi)核加入inotify的支持。
inotify相關(guān)參數(shù)
inotify定義了下列的接口參數(shù),可以用來(lái)限制inotify消耗kernel memory的大小。由于這些參數(shù)都是內(nèi)存參數(shù),因此,可以根據(jù)應(yīng)用需求,實(shí)時(shí)的調(diào)節(jié)其大小:
1) /proc/sys/fs/inotify/max_queued_evnets表示調(diào)用inotify_init時(shí)分配給inotify instance中可排隊(duì)的event的數(shù)目的大值,超出這個(gè)值的事件被丟棄,但會(huì)觸發(fā)IN_Q_OVERFLOW事件。
2)/proc/sys/fs/inotify/max_user_instances表示每一個(gè)real user id可創(chuàng)建的inotify instatnces的數(shù)量上限。
3)/proc/sys/fs/inotify/max_user_watches表示每個(gè)inotify instatnces可監(jiān)控的大目錄數(shù)量。如果監(jiān)控的文件數(shù)目巨大,需要根據(jù)情況,適當(dāng)增加此值的大小。
inotifywait命令參數(shù)
-m是要持續(xù)監(jiān)視變化。
-r使用遞歸形式監(jiān)視目錄。
-q減少冗余信息,只打印出需要的信息。
-e指定要監(jiān)視的事件列表。
--timefmt是指定時(shí)間的輸出格式。
--format指定文件變化的詳細(xì)信息。
可監(jiān)聽的事件
分享名稱:在Linux上如何部署Rsync+inotify實(shí)時(shí)同步?
網(wǎng)站網(wǎng)址:http://jinyejixie.com/news43/104343.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信小程序、網(wǎng)站收錄、網(wǎng)站策劃、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容