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