摘要:數據是最寶貴的財產!公司的服務器都是需要對數據有着完整的備份策略,利用腳本、計劃任務、開源軟件等等,無論那種途徑,能夠對數據的實時同步,纔是最理想的效果!下面詳細介紹利用rsync配合inotify實現數據實時的觸發同步。
rsync:可以鏡像保存整個目錄樹和文件系統。可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。
方案:起初用rsync進行數據備份是利用計劃任務,定時執行一下命令實現rsync的同步,但最近開發這邊修改比較頻繁,看來需要實時同步備份來完善備份機制!所以需要利用inotify觸發器來改善!達到一旦指定的位置有了新的變動就將其同步!
環境:
CentOS 6.4 64位
rsync-3.0.9
inotify-tools-3.14
說明:
10.10.1.6 (rsync+inotify)----------網站程序(/data0/htdocs/)
10.10.1.9 (rsync)------------------網站程序備份(/data0/htdocs/)
目的:
實現10.10.1.6的/data0/htdocs/目錄下發生任何變動都將實時同步到10.10.1.9的/data0/htdocs/上
(另,這兩臺都跑有keepalived+nginx,來實現出現故障自動切換的容災,詳細配置會在後面補上)
一、web服務器10.10.1.6 (rsync+inotify)
1、準備軟件包
# mkdir /data/ftpdata
# wget http://rsync.samba.org/ftp/rsync/rsync-3.1.0.tar.gz
# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
2、安裝Rsync
1 2 3 4 5 | tar -zxvf rsync -3.1.0. tar .gz cdrsync-3.1.0 . /configure--prefix = /usr/local/rsync make make install |
建立密碼認證文件
[root@ftp ~]# echo "111111">/etc/rsyncd/rsyncd.secrets建立密碼認證文件
*其中111111可以自己設置密碼,rsyncd.secrets名字也可以自己設置;
權限:要將/etc/rsyncd/rsyncd.secrets設置爲root擁有, 且權限爲600。
# chmod 600 /etc/rsyncd/rsyncd.secrets
3、安裝inotify
1 2 3 4 5 | tar -zxvf inotify-tools-3.14. tar .gz cd inotify-tools-3.14 . /configure --prefix= /usr/local/inotify make make install |
4、創建rsync複製腳本
此項功能主要是將ftp端的目錄/data0/htdocs/裏的內容,如果修改了(無論是添加、修改、刪除文件)能夠通過inotify監控到,並通過rsync實時的同步給10.10.1.9的/data0/htdocs裏,下面是通過shell腳本實現的。
[root@web ~]# vim /root/shell/rsync.sh
1 2 3 4 5 6 7 8 | #!/bin/bash host=10.10.1.9 src= /data0/htdocs/ /usr/local/inotify/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 --password- file = /etc/rsyncd/rsyncd .secrets $src root@$host::htdocs> /dev/null echo "${files} was rsynced" >> /var/log/rsync .log 2>&1 done |
[root@web ~]# chmod u+x /root/shell/rsync.sh
[root@web ~]# setsid /root/shell/rsync.sh &
#後臺運行腳本,關閉shell終端繼續後臺運行
rsync.sh腳本加入開機啓動項
# echo "/root/shell/rsync.sh" >> /etc/rc.local
防火牆開啓rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重啓:
# /etc/init.d/iptables restart
二、備份服務器10.10.1.9(rsync)
1、準備工作
創建備份目錄:
# mkdir /data0/htdocs
2、安裝rsync(備份主機只安裝rsync)
1 2 3 4 5 | tar -zxvf rsync -3.1.0. tar .gz cd rsync -3.1.0 . /configure --prefix= /usr/local/rsync make make install |
3、建立用戶與密碼認證文件
[root@backup ~]# echo "root:111111" > /etc/ rsyncd/rsyncd.secrets
[root@backup ~]# less /etc/rsyncd/rsyncd.secrets
root:111111
注意:
請記住,在10.10.1.6端建立的密碼文件,只有密碼,沒有用戶名;而在10.10.1.9裏建立的密碼文件,用戶名與密碼都有。
權限:要將/etc/rsyncd/rsyncd.secrets設置爲root擁有, 且權限爲600。
#chmod 600 /etc/rsyncd/rsyncd.secrets
4、建立rsync配置文件
[root@backup ~]# vim /etc/rsyncd/rsyncd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | pid file = /var/run/rsyncd .pid port = 873 address = 10.10.1.9 #uid = nobody #gid = nobody uid = root gid = root use chroot = no readonly = no #limit access to private LANs hosts allow=10.10.1.0 /255 .255.255.0 hosts deny=* max connections = 5 motd file = /etc/rsyncd/rsyncd .motd #This will give you a separate log file log file = /var/log/rsync .log #transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 [htdocs] path = /data0/htdocs list= yes ignore errors auth users = root secrets file = /etc/rsyncd/rsyncd .secrets #comment = rsync htdocs |
啓動rsync服務
# /usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf
# ps -ef |grep rsync
Rsync服務加入開機啓動項
# echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.local
防火牆開啓rsync端口:873
添加:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -jACCEPT
重啓:
# /etc/init.d/iptables restart
完成,其實這個時候數據已經同步了!
測試一下:
由於/data0/htdocs/下涉及到一些公司信息,所以就以/data0/htdocs/tmp/爲例
主機名可以區別是兩臺機器,裏面的內容完全一直,連文件的屬性都一樣
再對裏面修改一下試試,創建一個文件,然後刪除user目錄試試
有人說使用mv移動目錄有時會碰到數據同步位置錯誤,特意測試了一下,沒有發生這種情況,以後碰到再補充!