rsync的優勢與不足:
與傳統的cp、tar備份方式相比,rsync具備安全性高、備份迅速、支持增量備份等優勢,經過rsync能夠解決對實時性要求不高的數據備份需求,例如按期的備份文件服務器數據到遠端服務器,對本地磁盤按期作數據鏡像等。隨着應用系統規模的不斷擴大,對數據的安全性和可靠性也提出更高的求,rsync在高端業務系統中也逐漸暴露出了不少不足,首先,rsync同步數據時,須要掃描全部文件後進行比對,進行差量傳輸。若是文件數量達到了百萬甚至千萬量級,掃描全部文件將是很是耗時的。並且正在發生變化的每每是其中不多的一部分,這是很是低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它能夠經過linux守護進程的方式進行觸發同步,可是兩次觸發動做必定會有時間差,這樣就致使了服務端和客戶端數據可能出現不一致,沒法在應用故障時徹底的恢復數據。基於以上緣由,rsync+inotify組合出現了!html
Inotify 是一種強大的、細粒度的、異步的文件系統事件監控機制,經過Inotify能夠監控文件系統中添加、刪除,修改、移動、權限等各類細微事件,利用這個內核接口,第三方軟件就能夠監控文件系統下文件的各類變化狀況,而inotify-tools就是這樣的一個第三方軟件。rsync能夠實現觸發式的文件同步,可是經過crontab守護進程方式進行觸發,同步的數據和實際數據會有差別 ,而inotify能夠監控文件系統的各類變化,當文件有任何變更時,就觸發rsync同步,這樣恰好解決了同步數據的實時性問題。linux
測試環境
hostname IP 用途
rac1 172.18.1.106 主服務器
rac2 172.18.1.108 備份服務器,當主服務器有數據更新時實時同步到備份服務器
rac1主服務器操做以下:
step1:安裝rsyncweb
yum -y install rsync
rpm -qa | grep rsyncvim
step2:安裝inotify-tools安全
注意:在安裝inotify-tools前請先確認你的linux內核是否支持inotify,而且在編譯時開啓了 CONFIG_INOTIFY選項,能夠經過如下命令檢測:
ls /proc/sys/fs/inotify/
bash
#輸出結果爲max_queued_events max_user_instances max_user_watches這表示支持此功能
服務器
下載inotify-tools 軟件包
tar zxvf inotify-tools-3.14.tar.gz
cd inodify-tools-3.14
./configure
make && make install
step3:建立密碼認證文件
vim /etc/rsyncd.passwd
rootroot
wq
step4:修改權限爲600,否者會報錯
chmod 600 /etc/rsyncd.passwd | ls -l /etc/rsyncd.passwd
-rw-------. 1 root root 30 5月 9 12:07 /etc/rsyncd.passwd
step5:建立同步目錄用於測試,也能夠直接使用網站目錄/var/www/html/
mkdir -p /data/www/
step6:建立rsync.sh腳本,並給腳本執行權限
vim /rsync.sh
#!/bin/bash
host=192.168.1.108
src=/var/www/html/
des=web
user=root
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib ${src} | while read files
do
/usr/bin/rsync -vzrtopg --delete --progress ${src} ${usr}@${host}::${des} --password-file=/etc/rsyncd.passwd && echo "${files} was rsynced">>/tmp/rsync.log 2>&1
echo "---------------------------------------------------"
done
chmod +x /rsync.sh | ls -l /rsync.sh
rac2備份服務器操做以下:
step1:安裝rsync
yum install -y rsync
step2:建立並定義rsync配置文件
vim /etc/rsyncd.conf
uid=root
gid=root
use chroot=no
max connections=100
timeout=600
pid file=/var/run/rsyncd.pid
lock file=/var/log/rsyncd.lock
log file=/var/log/rsyncd.log
[web]
path=/var/www/html/
comment files=web files
ignore errors=yes
read only=no
list=no
hosts allow=192.168.1.0/16
hosts deny=*
auth users=root
secrets file=/etc/rsyncd.passwd
wq
step3:建立密碼認證文件,路徑及文件名與rsyncd.conf中一致,而且修改權限爲600
vim /etc/rsyncd.passwd
root:rootroot
wq
chmod 600 /etc/rsyncd.passwd | ls -l /etc/rsyncd.passwd
啓動rsync,並設置開機自啓動
rsync --daemon 若rsyncd.conf文件不在/etc/目錄下則須要指明路徑如rsync --daemon --config=/etc/rsync/rsycnd.conf
echo "/usr/bin/rsync --daemon">>/etc/rc.local
rac1操做:
在rac2上配置完後,需在rac1上執行rsync.sh腳本在後臺運行,並添加到開機自啓動中
[root@rac1 ~]# sh /rsync.sh
[root@rac1 /]# echo "/bin/sh /rsync.sh ">> /etc/rc.local異步
完成以上操做後,rac1上的/var/www/html/目錄下的文件,並不會馬上同步到rac2上,而須要在rac1上的/var/www/html/建立或修改文件,來觸發實時同步任務
ide