在Linux上如何部署Rsync+inotify實(shí)時(shí)同步?

2021-03-05    分類: 網(wǎng)站建設(shè)

在企業(yè)日常web應(yīng)用中,某些特殊的數(shù)據(jù)需要要求保持跟服務(wù)器端實(shí)時(shí)同步,那我們?cè)撊绾蝸砼渲媚兀咳绾蝸韺?shí)現(xiàn)呢?這里可以采用rsync+inotify來實(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安裝配置參考我另一篇文章:

CentOS6.9配置安裝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)證可以參考我另一篇文章:

SSH免密鑰認(rèn)證部署實(shí)戰(zhà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庫和一組命令行的工作提供Linux下inotify的簡(jiǎn)單接口。inotify-tools安裝后會(huì)得到inotifywait和inotifywatch這兩條命令:

1)inotifywait命令可以用來收集有關(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ù),可以用來限制inotify消耗kernel memory的大小。由于這些參數(shù)都是內(nèi)存參數(shù),因此,可以根據(jù)應(yīng)用需求,實(shí)時(shí)的調(diào)節(jié)其大?。?/p>

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://www.muchs.cn/news43/104343.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、微信小程序、網(wǎng)站收錄網(wǎng)站策劃、網(wǎng)站建設(shè)、網(wǎng)頁設(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í)需注明來源: 創(chuàng)新互聯(lián)