1. 程式人生 > >Rsync+Inotify遠程實時同步

Rsync+Inotify遠程實時同步

Rsync Linux Inotify

Rsync簡介

rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。
官方網站:http://rsync.samba.org/
技術分享圖片

開始部署Rsync

1、在服務器A和服務器B上同時安裝rsync服務和Xinetd服務
yum -install rsync
2、在服務器A上編輯/etc/rsyncd.conf配置文件(沒有這個文件的話可自行創建)

uid = nobody
gid = nobody
use chroot = yes
address = 47.88.56.104     #本機地址
port 873     #監聽的端口
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 118.25.48.231     #允許訪問的客戶機地址

[web]     #項目名稱
path = /var/www/html     #項目路徑
comment = Web Directory     #項目描述
read only = yes     #只讀
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z     #同步時不再壓縮的文件
auth users = rsync     #用戶認證信息
secrets file = /etc/rsync_users.db     #用戶認證信息存放的路徑

3、在服務器A上創建用戶認證信息文件,格式:[賬號]:[密碼]

vim /etc/rsyncd_users.db
rsync:123456
:wq

4、在服務器A上啟動Rsync服務程序,修改/etc/xinetd.d/rsync文件

service rsync
{
        disable = no     #將原來的yes改為no
        flags           = IPv4     #將原來的IPv6改為IPv4
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

service xinetd restart
5、在服務器B上測試同步(防火墻記得開放端口喲!!!)
/usr/bin/rsync -vzrtopg --delete --exclude ".svn/" --password-file=/etc/rsync_users.pass [email protected]::web /var/www/html/

#-v, --verbose 詳細模式輸出
#-z, --compress 對備份的文件在傳輸時進行壓縮處理
#-r, --recursive 對子目錄以遞歸模式處理
#-t, --times 保持文件時間信息
#-o, --owner 保持文件屬主信息
#-p, --perms 保持文件權限

#-g, --group 保持文件屬組信息
#--delete 刪除那些DST中SRC沒有的文件
#--exclude=PATTERN 指定排除不需要傳輸的文件模式
#--progress 在傳輸時現實傳輸過程
#--password-file=FILE 從FILE中得到密碼,這個文件必須是600權限,chmod 600 /etc/rsync_users.pass

技術分享圖片
6、將Rsync加入任務計劃中,每隔2分鐘同步一次
crontab -e
技術分享圖片

定期同步的不足

1、執行備份的時間固定,延遲明顯、實時性差
2、當同步源長期不變化時,密集的定期任務是不必要的

實時同步的優點

1、一旦同步源出現變化,立即啟動備份
2、只要同步源無變化,則不執行備份
技術分享圖片

Inotify簡介

Inotify 是一個 Linux特性,從版本2.6.13開始提供,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。

開始配置Inotify

*註:在開始之前需要在服務器B上也安裝好Rsync並且開啟服務

1、在服務器A上調整inotify內核參數,vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

技術分享圖片
2、使調整inotify內核參數立刻生效
sysctl -p
3、安裝Inotify-Tool工具
yum install -y inotify-tools
4、打開兩個終端,一個終端執行創建刪除等操作,另一個執行Inotify-Tool工具,測試Inotify-Tool工具時候正常
inotifywait -mrq -e modify,create,move,delete /var/www/html

inotifywait:用於持續監控,實時輸出結果
inotifywatch:用於短期監控,任務完成後再出結果

技術分享圖片
5、編寫觸發式腳本,vim /root/inotify_rsync.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]:/var/www/html"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done

6、添加開機自動後臺自動運行,編輯/etc/profile文件,在最後一行加入下面語句
/bin/bash /root/inotify_rsync.sh &

End。。。。。。。。。

Rsync+Inotify遠程實時同步