企業Linux服務器數據實時同步備份的解決方案

摘要:數據是最寶貴的財產!公司的服務器都是需要對數據有着完整的備份策略,利用腳本、計劃任務、開源軟件等等,無論那種途徑,能夠對數據的實時同步,纔是最理想的效果!下面詳細介紹利用rsync配合inotify實現數據實時的觸發同步。


rsync:可以鏡像保存整個目錄樹和文件系統。可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。


方案:起初用rsync進行數據備份是利用計劃任務,定時執行一下命令實現rsync的同步,但最近開發這邊修改比較頻繁,看來需要實時同步備份來完善備份機制!所以需要利用inotify觸發器來改善!達到一旦指定的位置有了新的變動就將其同步!


環境:

CentOS 6.4 64位

rsync-3.0.9

inotify-tools-3.14

134209883.jpg

說明:

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
makeinstall

建立密碼認證文件
[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
cdinotify-tools-3.14
./configure--prefix=/usr/local/inotify
make
makeinstall

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| whilereadfiles
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
cdrsync-3.1.0
./configure--prefix=/usr/local/rsync
make
makeinstall

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/爲例

144006325.jpg

144006518.jpg

主機名可以區別是兩臺機器,裏面的內容完全一直,連文件的屬性都一樣


再對裏面修改一下試試,創建一個文件,然後刪除user目錄試試


144714593.jpg

144714184.jpg


有人說使用mv移動目錄有時會碰到數據同步位置錯誤,特意測試了一下,沒有發生這種情況,以後碰到再補充!


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