1. 程式人生 > >Rsync + inotify 實現文件實時同步

Rsync + inotify 實現文件實時同步

匿名 實現 nis strong -- --delete 單向 cat wait

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

Rsync

默認安裝  yum install rsync -y  或者 源碼下載 安裝;
示例啟動  /usr/bin/rsync --daemon
可以添加到 /etc/rc.load 啟動項中;

示例:

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

一、web-bak 配置:

在bak 服務上 安裝 Rsync

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

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

1、創建配置文件:

# vi /etc/rsyncd.conf

[root@localhost ~]# 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            
# hosts deny = * 
list = false 
uid = root 
gid = root 
auth users = bakup
secrets file = /etc/rsync.pass

2、創建 rsync.pass 文件

[root@localhost ~]# cat /etc/rsync.pass 
bakup:server1

web-server 配置:

1、創建 rsync.pass 文件

[root@localhost ~]# cat /etc/rsync.pass 
server1

2、安裝 inotify-tools

默認yum install 也可以源碼進行。

3、創建 檢測同步腳本

[root@localhost hdb1]# 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

三、後臺啟動運行同步腳本

# nohup sh rsync-inotify.sh &

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

unison 可以達到雙向鏡像同步。

Rsync + inotify 實現文件實時同步