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 能夠達到雙向鏡像同步。