1、環境及相關軟體介紹
作業系統:Ubuntu12.04_x64
源伺服器(推送):192.168.18.10
目标伺服器(備份):192.168.18.20
rsync:
rsync是unix系統下的資料鏡像備份工具,是一款快速增量備份工具(遠端同步),支援本地複制,或者與其他SSH(安全傳輸)、rsync主機同步。
rsync有以下常用的參數:
-v,--verbose 顯示同步過程的詳細資訊
-a,--archive 歸檔模式,表示以遞歸方傳輸檔案,并保持所有檔案屬性,等同于-rlptgoD
-r,--recursive 對子目錄以遞歸模式處理
-z,--compress 對備份的檔案在傳輸時進行壓縮處理
-l,--links 保留軟連接配接
-H,--hard-links 保留硬連結
--delete 删除那些DST中SRC沒有的檔案(源伺服器删除檔案,目标伺服器也同時删除)
--progress 顯示備份過程,等同于-P
--port=PORT 指定rsync服務端口
--exclude=FILE 排除一個目錄或檔案(排除多個目錄時,可以寫多個--exclude)
--exclude-from=FILE 排除多個目錄或檔案,FILE裡面寫多個要排除的目錄
inotify:
inotify是一個Linux特性,它監控檔案系統操作,比如讀取、寫入和建立,當檔案系統有變化時,則會觸發inotify。inotify提供inotify-tools工具,這個工具包含兩個功能,一個是inotifywait,用來監控檔案系統變化的事件,另一個是inotifywatch,用來統計檔案系統通路的次數。我們這次使用inotifywait結合rsync實作實時同步功能。
inotifywait有以下常用參數:
-m,--monitor 一直保持監聽事件
-r,--recursive 遞歸監控目錄
-q,--quiet 隻列印觸發的事件
-e,--event 指定監視時間
--timefmt 指定時間格式,用于-format選型中的%T格式
--format 指定輸出格式。
%w 表示發生事件的目錄
%f 表示發生事件的檔案
%e 表示發生的事件
%T 使用由—timefmt定義的時間格式
inotifywait常用監視事件:
access 檔案或目錄讀取
modify 檔案或目錄更改
attrib 檔案或目錄屬性更改
move 檔案或目錄移動
create 檔案或目錄建立
delete 檔案或目錄删除
2、目标伺服器安裝與配置
# sudo apt-get install rsync #ubuntu系統預設已安裝
# sudo cp/usr/share/doc/rsync/examples/rsyncd.conf /etc/
# sudo vi /etc/rsyncd.conf
# 以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
#以下是子產品選項配置
[home] #子產品名,在源伺服器指定這個名字
comment = sync rsync/home #描述資訊
path = /home/rsync #備份目錄
use chroot=no #不使用chroot,不用root權限
read only = no #設定本地備份目錄為讀寫權限
uid=root
gid=root
max connections=10 #用戶端最大連接配接數
auth users = rsync #指定資料同步使用者
secrets file = /etc/rsyncd.pass #指定資料同步使用者資訊檔案
hosts allow=192.168.18.0/24 #允許連接配接的用戶端
ignore errors = yes #忽略出現I/O錯誤
timeout = 600
#建立認證檔案
# sudo vi /etc/rsyncd.pass
rsync:123456 #格式是使用者名:密碼
# sudo chmod 600 /etc/rsyncd.pass #屬主要有權限讀這個檔案,否則會報沒權限
# sudo /etc/init.d/rsync start #如果啟動報如下錯誤,則根據提示打開/etc/default/rsync檔案,将RSYNC_ENABLE=false該為RSYNC_ENABLE=true,再重新開機即可。
* rsync daemon not enabled in/etc/default/rsync, not starting...
#,檢視是否啟動,有rsync監聽端口說明正常:
# sudo netstat -antp |grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 29605/rsync
部落格位址:http://lizhenliang.blog.51cto.com
3、源伺服器安裝與配置
# sudo apt-get install rsync inodify-tools
#rsync不用配置,因為我們隻使用rsync指令,緊接着建立認證檔案
# sudo vi /etc/rsyncd.pass
123456 #隻寫密碼
# sudo chmod 600/etc/rsyncd.pass
#此時基本配置完成,測試下是否能推送吧!
# rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync [email protected]::home #home即是目标伺服器上rsync裡面的子產品名
sending incremental file list
rsync/a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
sent 354 bytes received 126 bytes 960.00 bytes/sec
total size is 0 speedup is 0.00
#出現以上資訊說明同步正常,接下來,就該編寫Shell腳本,使用inotifywait做實時監控源目錄,加個while循環判斷源目錄是否有觸發,如果有變化則執行rsync同步,并記錄日志:
# vi inotify_rsync.sh
#!/bin/bash
SRC='/home/rsync'
DST='[email protected]::home'
/usr/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w %f %e' -e create,delete,move,modify $SRC|while read files
do
rsync -avzP --password-file=/etc/rsyncd.pass --delete $SRC $DST
echo "$files was rsynced.">> /tmp/rsync.log
done
4、測試實時同步
#先列印形式檢視腳本執行情況
# bash -x inotify_rsync.sh
+ SRC=/home/rsync/ #目錄結尾一定要加個/,否則會再目标伺服器再建立個目錄
[email protected]::home
+ read files
+ /usr/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' -e create,delete,move,modify,attrib /home/loongtao
+ rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@@192.168.18.213::home
sending incremental file list
rsync/
rsync/test.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/11)
sent 349 bytes received 32 bytes 762.00 bytes/sec
total size is 9380 speedup is 24.62
+ echo '15-04-24 13:33/home/rsync/test.txt CREATE was rsynced.'
+ read files
+ rsync -avzP--password-file=/etc/rsyncd.pass --delete /home/rsync [email protected]::home
sending incremental file list
sent 310 bytes received 10 bytes 640.00 bytes/sec
total size is 9380 speedup is 29.31
+ echo '15-04-24 13:33/home/rsync/test.txt ATTRIB was rsynced.'
+ read files
#可以看到以上資訊,無任何報錯,說明已經推送成功。
# chmod +x inotify_rsync.sh
# ./inotify_rsync.sh &