rsync+inotify-tools實現文件遠程實時備份

rsync的優點與不足:
      與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如定期的備份文件服務器數據到遠端服務器,對本地磁盤定期做數據鏡像等。隨着應用系統規模的不斷擴大,對數據的安全性和可靠性也提出更高的求,rsync在高端業務系統中也逐漸暴露出了很多不足,首先,rsync同步數據時,需要掃描所有文件後進行比對,進行差量傳輸。如果文件數量達到了百萬甚至千萬量級,掃描所有文件將是非常耗時的。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它可以通過linux守護進程的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端數據可能出現不一致,無法在應用故障時完全的恢復數據。基於以上原因,rsync+inotify組合出現了!

       Inotify 是一種強大的、細粒度的、異步的文件系統事件監控機制,通過Inotify可以監控文件系統中添加、刪除,修改、移動、權限等各種細微事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟件。rsync可以實現觸發式的文件同步,但是通過crontab守護進程方式進行觸發,同步的數據和實際數據會有差異 ,而inotify可以監控文件系統的各種變化,當文件有任何變動時,就觸發rsync同步,這樣剛好解決了同步數據的實時性問題。


測試環境

    hostname       IP                       用途
    rac1               172.18.1.106        主服務器
    rac2               172.18.1.108        備份服務器,當主服務器有數據更新時實時同步到備份服務器

rac1主服務器操作如下:

step1:安裝rsync

yum -y install rsync
rpm -qa | grep rsync


step2:安裝inotify-tools

注意:在安裝inotify-tools前請先確認你的linux內核是否支持inotify,並且在編譯時開啓了        CONFIG_INOTIFY選項,可以通過以下命令檢測:
 ls /proc/sys/fs/inotify/

#輸出結果爲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/創建或修改文件,來觸發實時同步任務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章