Rsync + inotify 實現文件實時同步

Rsync 用來實現觸發式的文件同步。
  Inotify-tools是一套組件,Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各類變化狀況,如文件存取、刪除、移動等。利用這一機制,能夠很是方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時做出響應;
因此使用inotify監控文件系統有任何變更時,而後就觸發rsync同步,達到了單向實時同步數據的功能。web

Rsyncshell

默認安裝 或者 源碼下載 安裝;
 yum install rsync -y  
同步的備機須要啓動服務 開啓 873 端口;
示例啓動
/usr/bin/rsync --daemon 能夠添加到 /etc/rc.load 啓動項中;

示例:bash

A: web-server    192.168.2.5
B: web-bak       192.168.2.6

1、web-bak 配置:服務器

在 bak 服務上 安裝 Rsync dom

默認端口是873,默認安裝時候沒有這個文件 須要手動建立配置文件 rsyncd.confssh

對於非匿名訪問的 rsync 服務器還要建立認證口令文;ui

一、建立配置文件:spa

# vi /etc/rsyncd.confcode

[root@web-bak ]# cat /etc/rsyncd.conf 
uid = root gid = root use chroot = no max connections = 100 timeout = 30 strict modes = yes pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [server1] path = /backup/ comment = backup file ignore errors read only = no write only = no hosts allow = 192.16.2.5
# 指定能進行同步的機器。 多個 IP 或者網段 用空格隔開; # hosts deny = * list = false uid = root gid = root auth users = bakup
# 驗證用戶 secrets file = /etc/rsync.pass
# 添加驗證密碼文件

二、建立 rsync.pass 文件 (須要設置爲當前用戶下的只讀權限)orm

chmod 600 /etc/rsync.pass

[root@web-bak ]# cat /etc/rsync.pass 
bakup:server1

三、默認啓動

默認啓動 
/usr/bin/rsync --daemon

同步 :

/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/user.passwd user@172.16.3.18::server /opt/bak/
#
# user.passwd 密碼路徑
# rsync dome 服務所在的服務器
# user@172.16.3.18::server 須要同步備份的服務目錄,指定 user 帳戶
# /opt/bak 本地機器路徑
# 若是 /opt/bak 在 user@172.16.3.18::server 前,就是本地同步到server服務器上
# 若是 /ope/bak 在後 就是,server 同步備份到本地。

2、web-server 配置:

一、建立  rsync.pass 文件

[root@web-server1 ]# cat /etc/rsync.pass 
server1

二、安裝 inotify-tools 

默認yum install 也能夠源碼進行。

三、建立 檢測同步腳本

  ( inotifywait 循環檢測文件  Rsync 從而達到實時同步 )

[root@web-server1 ]# cat rsync-inotify.sh 
#!/bin/bash bak=192.168.2.6 # 備份服務器
src=/bakup/
# 備份目錄 dst=server1 # 備份模塊
user=bakup 啓動帳戶 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.pass $src $user@$bak::$dst echo "${files} was rsynced ok ! " >>/tmp/rsync.log 2>&1
     done

四、Rsync 同步參數參考:

-v, --verbose    詳細模式輸出,詳細顯示數據傳輸備份狀況
-z, --compress    傳輸時進行壓縮以提升傳輸效率,--compress-level=NUM可按級別壓縮。局域網能夠不用壓縮
-a, --archive    歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等價於-rtopgDl
-r, --recursive(屬於-a參數)    對子目錄以遞歸模式,即目錄下的全部目錄都一樣傳輸
-t, --times(屬於-a參數)    保持文件時間屬性信息
-o, --owner(屬於-a參數)    保持文件屬主信息
-p, --perms(屬於-a參數)    保持文件權限
-g, --group(屬於-a參數)    保持文件屬組信息
-D, --devices (屬於-a參數)    保持設備文件信息
-l, --links(屬於-a參數)    保留軟連接(小寫字母l)
-P, --progress    顯示同步的過程及傳輸時的進度等信息
-e, --rsh=COMMAND    使用的信道協議(remote shell),指定替代rsh的shell程序。例如:ssh
--exclude=PATTERN    指定排除不須要傳輸的文件信息
--exclude-from=file    文件名所在的目錄文件,便可以實現排除多個文件
--bwlimit=RATE    實現數據傳輸過程限速傳輸,限制速率單位爲kbytes

3、後臺啓動運行同步腳本

nohup & 啓動後臺運行

# nohup sh rsync-inotify.sh &

4、 Rsync 是單向同步的;客戶端只保持與服務器端的鏡像同步;客戶端刪除並不會影響服務端數據。 

unison 能夠達到雙向鏡像同步。

相關文章
相關標籤/搜索