1. 程式人生 > >使用Inotify實時同步資料夾

使用Inotify實時同步資料夾

接上篇:http://blog.csdn.net/oldmtn/article/details/47836859

這篇文章是我檢視參考1之後,轉的,但是是過本人的驗證的,真實可靠的,並不是胡亂轉載的。

並且經過細微的修改。

以下的操作都需要在源伺服器上面進行。。。

安裝Inotify-tools工具,實時觸發rsync進行同步

1、檢視伺服器核心是否支援inotify

ll /proc/sys/fs/inotify   #列出檔案目錄,出現下面的內容,說明伺服器核心支援inotify

-rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events

-rw-r--r-- 1 root root 0 Mar  7 02:17 max_user_instances

-rw-r--r-- 1 root root 0 Mar  7 02:17 max_user_watches

備註:Linux下支援inotify的核心最小為2.6.13,可以輸入命令:uname -a檢視核心

CentOS 5.X 核心為2.6.18,預設已經支援inotify

2、安裝inotify-tools

yum install make  gcc gcc-c++  #安裝編譯工具

inotify-tools下載地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

上傳inotify-tools-3.14.tar.gz到/usr/local/src目錄下

cd /usr/local/src

tar zxvf inotify-tools-3.14.tar.gz  #解壓

cd inotify-tools-3.14 #進入解壓目錄

./configure --prefix=/usr/local/inotify  #配置

make  #編譯

make install  #安裝

3、設定系統環境變數,新增軟連線

echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh

source /etc/profile.d/inotify.sh  #使設定立即生效

echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf

ln -s /usr/local/inotify/include  /usr/include/inotify

4、修改inotify預設引數(inotify預設核心引數值太小)

檢視系統預設引數值

sysctl -a | grep max_queued_events

結果是:fs.inotify.max_queued_events = 16384

sysctl -a | grep max_user_watches

結果是:fs.inotify.max_user_watches = 8192

sysctl -a | grep max_user_instances

結果是:fs.inotify.max_user_instances = 128

修改引數:

sysctl -w fs.inotify.max_queued_events="99999999"

sysctl -w fs.inotify.max_user_watches="99999999"

sysctl -w fs.inotify.max_user_instances="65535"

vi /etc/sysctl.conf #新增以下程式碼

fs.inotify.max_queued_events=99999999

fs.inotify.max_user_watches=99999999

fs.inotify.max_user_instances=65535

:wq! #儲存退出

引數說明:

max_queued_events

inotify佇列最大長度,如果值太小,會出現"** Event Queue Overflow **"錯誤,導致監控檔案不準確

max_user_watches

要同步的檔案包含多少目錄,可以用:find /root/ceshi -type d | wc -l 統計,必須保證max_user_watches值大於統計結果(這裡/root/ceshi為同步檔案目錄)

max_user_instances

每個使用者建立inotify例項最大值

5、建立指令碼,實時觸發rsync進行同步

vi /usr/local/inotify/rsync.sh   #編輯,新增以下程式碼

======================================

#!/bin/sh

srcdir=/home/www.osyunwei.com/

dstdir=home_www.osyunwei.com

rsyncuser=home_www.osyunwei.com_user

rsyncpassdir=/etc/passwd.txt

dstip="192.168.11.128"

for ip in $dstip

do

rsync -avH --port=873 --progress --delete  $srcdir [email protected]$ip::$dstdir --password-file=$rsyncpassdir

done

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |  while read file

do

for ip in $dstip

do

rsync -avH --port=873 --progress --delete  $srcdir [email protected]$ip::$dstdir --password-file=$rsyncpassdir

echo "  ${file} was rsynced" >> /tmp/rsync.log 2>&1

done

done

======================================

chmod +x /usr/local/inotify/rsync.sh   #新增指令碼執行許可權

指令碼引數說明:

srcdir=/root/ceshi/  #源伺服器同步目錄

dstdir=test1    #目標伺服器rsync同步目錄模組名稱

rsyncuser=root  #目標伺服器rsync同步使用者名稱

rsyncpassdir=/etc/passwd.txt  #目標伺服器rsync同步使用者的密碼在源伺服器的存放路徑

dstip="192.168.11.128"  #目標伺服器ip,多個ip用空格分開

/tmp/rsync.log  #指令碼執行日誌記錄

6、設定指令碼開機自動執行

vi /etc/rc.d/rc.local  #編輯,在最後新增一行

sh /usr/local/inotify/rsync.sh & #設定開機自動在後臺執行指令碼

:wq!  #儲存退出

7、測試inotify實時觸發rsync同步指令碼是否正常執行

在源伺服器192.168.11.130上建立檔案inotify_rsync_ceshi

mkdir /root/ceshi/inotify_rsync_ceshi

重新啟動源伺服器192.168.11.130

等系統啟動之後,檢視兩臺目標伺服器192.168.11.128的/root/folder下是否有inotify_rsync_ceshi資料夾

然後再在源伺服器192.168.11.130建立資料夾inotify_rsync_ceshi_new

mkdir /root/ceshi/inotify_rsync_ceshi_new

繼續檢視目標伺服器192.168.11.128的/root/folder1下是否有inotify_rsync_ceshi_new資料夾

如果以上測試都通過,說明inotify實時觸發rsync同步指令碼執行正常。

至此,Linux下Rsync+Inotify-tools實現資料實時同步完成。

擴充套件閱讀:

============================================

inotify引數

-m 是保持一直監聽

-r 是遞迴檢視目錄

-q 是打印出事件

-e create,move,delete,modify,attrib 是指 “監聽 建立 移動 刪除 寫入 許可權” 事件

rsync引數

============================================

-v, --verbose 詳細模式輸出

-q, --quiet 精簡輸出模式

-c, --checksum 開啟校驗開關,強制對檔案傳輸進行校驗

-a, --archive 歸檔模式,表示以遞迴方式傳輸檔案,並保持所有檔案屬性,等於-rlptgoD

-r, --recursive 對子目錄以遞迴模式處理

-R, --relative 使用相對路徑資訊

-b, --backup 建立備份,也就是對於目的已經存在有同樣的檔名時,將老的檔案重新命名為~filename。可以使用--suffix選項來指定不同的備份檔案字首。

--backup-dir 將備份檔案(如~filename)存放在在目錄下。

-suffix=SUFFIX 定義備份檔案字首

-u, --update 僅僅進行更新,也就是跳過所有已經存在於DST,並且檔案時間晚於要備份的檔案。(不覆蓋更新的檔案)

-l, --links 保留軟鏈結

-L, --copy-links 想對待常規檔案一樣處理軟鏈結

--copy-unsafe-links 僅僅拷貝指向SRC路徑目錄樹以外的鏈結

--safe-links 忽略指向SRC路徑目錄樹以外的鏈結

-H, --hard-links 保留硬鏈結

-p, --perms 保持檔案許可權

-o, --owner 保持檔案屬主資訊

-g, --group 保持檔案屬組資訊

-D, --devices 保持裝置檔案資訊

-t, --times 保持檔案時間資訊

-S, --sparse 對稀疏檔案進行特殊處理以節省DST的空間

-n, --dry-run現實哪些檔案將被傳輸

-W, --whole-file 拷貝檔案,不進行增量檢測

-x, --one-file-system 不要跨越檔案系統邊界

-B, --block-size=SIZE 檢驗演算法使用的塊尺寸,預設是700位元組

-e, --rsh=COMMAND 指定使用rsh、ssh方式進行資料同步

--rsync-path=PATH 指定遠端伺服器上的rsync命令所在路徑資訊

-C, --cvs-exclude 使用和CVS一樣的方法自動忽略檔案,用來排除那些不希望傳輸的檔案

--existing 僅僅更新那些已經存在於DST的檔案,而不備份那些新建立的檔案

--delete 刪除那些DST中SRC沒有的檔案

--delete-excluded 同樣刪除接收端那些被該選項指定排除的檔案

--delete-after 傳輸結束以後再刪除

--ignore-errors 及時出現IO錯誤也進行刪除

--max-delete=NUM 最多刪除NUM個檔案

--partial 保留那些因故沒有完全傳輸的檔案,以是加快隨後的再次傳輸

--force 強制刪除目錄,即使不為空

--numeric-ids 不將數字的使用者和組ID匹配為使用者名稱和組名

--timeout=TIME IP超時時間,單位為秒

-I, --ignore-times 不跳過那些有同樣的時間和長度的檔案

--size-only 當決定是否要備份檔案時,僅僅察看檔案大小而不考慮檔案時間

--modify-window=NUM 決定檔案是否時間相同時使用的時間戳視窗,預設為0

-T --temp-dir=DIR 在DIR中建立臨時檔案

--compare-dest=DIR 同樣比較DIR中的檔案來決定是否需要備份

-P 等同於 --partial

--progress 顯示備份過程

-z, --compress 對備份的檔案在傳輸時進行壓縮處理

--exclude=PATTERN 指定排除不需要傳輸的檔案模式

--include=PATTERN 指定不排除而需要傳輸的檔案模式

--exclude-from=FILE 排除FILE中指定模式的檔案

--include-from=FILE 不排除FILE指定模式匹配的檔案

--version 列印版本資訊

--address 繫結到特定的地址

--config=FILE 指定其他的配置檔案,不使用預設的rsyncd.conf檔案

--port=PORT 指定其他的rsync服務埠

--blocking-io 對遠端shell使用阻塞IO

-stats 給出某些檔案的傳輸狀態

--progress 在傳輸時現實傳輸過程

--log-format=formAT 指定日誌檔案格式

--password-file=FILE 從FILE中得到密碼

--bwlimit=KBPS 限制I/O頻寬,KBytes per second

-h, --help 顯示幫助資訊


參考:

1. http://www.osyunwei.com/archives/7435.html

相關推薦

使用Inotify實時同步資料

接上篇:http://blog.csdn.net/oldmtn/article/details/47836859 這篇文章是我檢視參考1之後,轉的,但是是過本人的驗證的,真實可靠的,並不是胡亂轉載的。 並且經過細微的修改。 以下的操作都需要在源伺服器上面進行。。。 安

rsync+inotify 實時同步腳本學習筆記

rsync+inotify 實時同步腳本學習筆記#!/bin/sh#parahost01=192.168.100.61src=/backupdst=oldboyuser=rsync_backuprsync_passfile=/etc/rsync.passwordinotify_home=/usr/local/

(轉)rsync+inotify實時同步

inside disable 失敗 文件名 -c users localhost tin 常見 原文:http://lxw66.blog.51cto.com/5547576/1331048 聲明:rsync inotify 需要逆向思考,當只做rsync不實時同步時,我們一

rsync+inotify實時同步

rsync+inotify實時同步Rsync+Inotify實時同步Rsync:rsync是類unix系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。Inotify:Inotify 是一個 Linux特性,它監控文件系統操作

rsync同步操作 、 發布rsync共享 、 inotify實時同步 、 Split分離解析

rsync 虛擬機A 1. 將防火墻狀態設置為trusted 2.SELinux當前修改為permissive 3.SELinux永久狀態修改為permissive 4.清空Yum緩存,檢查Yum是否可用 虛擬機B 1. 將防火墻狀態設置為trusted 2.SELinu

rsync遠程同步+inotify實時同步

ima 51cto vpd 備份 mage ssp fde ces 實時 rsync遠程同步備份服務器 客戶端發生改變,數據同步到服務器 rsync遠程同步+inotify實時同步

在CentOS7上配置rsync源服務器+inotify實時同步

-c sha .tar.gz clu nag 一次 一個 for mar 概述 rsync是一個開源的快速備份工具,可以再不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈接和權限,且采用優化的同步算法,再傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務器等應用。 原理

Centos7 下 配置 rsync 以及 rsync+inotify 實時同步

否則 tst rsync服務 notify 檢測 日誌 文件備份 過程 ddr Centos 7 下 配置 Rsync 以及 rsync+inotify 實時同步 rsync介紹 rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持鏈

rsync + inotify 實時同步【附送源碼包】

服務器 路徑和 sync 執行權 chm 發生 都是 blog src 項目:配置Rsync+inotify 實時備份 簡介:·Rsync:是一個開源的快速備份工具,它可以在不同的主機之間同步整個目錄樹,並且可以保持連接和權限在傳輸前執行壓縮,因此很適用於異地備份、鏡像服務

配置rsync+inotify 實時同步

process 認同 本機 賬號 creat 配置文件 下載到本地 inux wall rsync簡介:rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且采用優化的同步算法,在傳輸前執行壓縮,因此非常適用於異地備份,鏡

rsync遠程同步及rsync+inotify實時同步

samba 路徑 支持 避免 fat 配置 授權 let 解釋 rsync遠程同步及rsync+inotify實時同步 思維代入 正確、有效的備份方案是保障系統及數據安全的重要手段。在服務器中,通常會結合計劃性任務、shell腳本來執行本地備份。但有時候為了提高備份的可靠性

Rsync+Sersync實時同步資料目錄

第1章 Rsync簡介 1.1 Rsync基本概述 rsync是一款開源的備份工具,可以在不同主機之間進行同步,可實現全量備份與增量備份 全量:將全部資料,進行傳輸覆蓋 增量:只傳輸差異部分的資料 1.2 實現增量複製的原理 Rsync通過其獨特的“quick check”演算法,實現增量傳輸資料

rsync+inotify 實時同步

案例 1、在1.10伺服器上配置為服務端,修改rsync的配置檔案/etc/rsyncd.conf,並啟動rsync服務程式。 2、在1.20上使用rsync命令驗證是否能夠從服務端(/var/www/html)下載檔案到客戶機端(/var/www/html)。

雲展網教程 | 編輯書櫥標題、密碼、開啟方式、同步資料

雲展網提供了書櫥功能,方便使用者通過書櫥整合展示一系列書籍。下面我們對書櫥的相應內容進行設定: 標題:書櫥的名稱,顯示在書櫥上方,微信等分享平臺分享書櫥時顯示的標題。 密碼:使用者訪問書櫥需要輸入密碼才能看見書籍。密碼設定可見情況下設定。 同步資料夾:勾選是否同步資料夾,選擇是的情

更改 OneDrive 同步資料位置

快盤、360雲盤個人雲盤服務被關閉後,目前最好的免費同步盤替代方案! 2018-5-12更新 還沒體驗過oneDrive的童鞋,可以不用看下面的內容,直接 點上面的連結註冊帳號,作為新客戶您會獲得預設的5GB儲存空間,除此之外您還會額外獲得0.5 G

在CentOS7上配置rsync源伺服器+inotify實時同步

概述 rsync是一個開源的快速備份工具,可以再不同主機之間映象同步整個目錄樹,支援增量備份,保持連結和許可權,且採用優化的同步演算法,再傳輸前執行壓縮,因此非常適用於異地備份、映象伺服器等應用。 原理 再遠端同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而

ODI利用CDC實現實時同步資料

(內容有借鑑其他文件,親身實踐成功~) 需求: table_02作為目標表,需要實時的與源資料表table_01同步(即table_01更新或者是插入或者是刪除了一行記錄,table_02能夠實時的同步此操作----此處設定為延時10s同步------已經很了不得了 好伐!

kettle 實時同步資料(插入/更新/刪除資料

首先需要下載kettle工具,本人的環境為:jdk1.8。下載地址:https://jaist.dl.sourceforge.net/project/pentaho/Data%20Integration/7.1/pdi-ce-7.1.0.0-12.zip來接mysql資料庫需

cp,scp,rsync同步資料使用方法

//web1伺服器建立rsync同步使用者 [[email protected] ~]#useradd rsync //建立rsync使用者的密碼 [[email protected] ~]# [email protected] |passwd --stdin rsync pa

rsync+inotify實時同步環境部署記錄

關閉selinux rsync服務 rule 雙向同步 data 頁面 操作 配置文件 多少 rsync+inotify實時同步環境部署記錄在使用rsync首次全量同步後,結合inotify對源目錄進行實時監控,只有有文件變動或新文件產生,就會立刻同步到目標目錄下,非常高效