天天看點

通過rsync+inotify實作伺服器之間資料的實時備份

在上一篇部落格中,我們隻使用了rsync來實作資料的備份,但卻不能做到實時,因為守護程序觸發和執行有一段的時間間隔,如果對于資料量大的網站來說,一旦崩潰,就很難做到資料的完整性。在本篇文章中我們使用rsync+inotify的方式來解決這一問題。

inotify是一種強大的、細粒度的、異步的檔案系統時間監控機制,Linux核心從2.6.13版本開始就加入了對它的支援,通過它可以監控檔案系統中添加、删除、修改、移動等各種細微事件。

接下來使用rsync+inotify搭建實時同步系統:

現在有兩台伺服器:A伺服器(網站伺服器)、B伺服器(備份伺服器),當inotify工具檢測到A伺服器上檔案發生變化時,就會檢測差異,然後同步到B伺服器上。

1、安裝inotify工具inotify-tools

yum install inotify-tools
           

2、配置B伺服器上的rsyncd.conf檔案

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

 uid = nobody
 gid = nobody
 use chroot = no
 max connections = 
 strict modes = no
 pid file = /var/run/rsyncd.pid
 lock file = /var/run/rsyncd.lock
 log file = /var/run/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
[betterlife]
path = /var/www
comment = betterlife file
ignore errors
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass
           

其中server.pass檔案内容如下:

backup:密碼
           

修改server.pass檔案權限

然後啟動rsync守護程序

将rsync加入到自啟問價中

echo "rsync --daemon" >>/etc/rc.local
           

3、配置A伺服器

建立同步腳本

#!/bin/bash

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib 監測目錄 \
| while read files
        do
        rsync -vzrtopg --delete --progress --password-file=/etc/server.pass 同步檔案目錄   [email protected]伺服器位址::子產品名
                echo "${files} was rsynced" >>/tmp/rsync.log >&
        done
           

其中server.pass内容如下:

密碼
           

修改腳本檔案權限

chmod  /var/www/inotifyrsync.sh
           

運作該腳本,并放入到背景

./inotifyrsync.sh >>/var/www/inotifyrsync.log &
           

最後将該指令放入到自啟檔案中

echo "./inotifyrsync.sh >>/var/www/inotifyrsync.log &" >>/etc/rc.local
           

至此,實時同步系統就算搭建完畢,但在搭建過程中,遇到一個問題,就是,将A伺服器檔案rsyncd.conf中的使用者名改成其他的名字,執行過程中會出現unauthorized user錯誤,但将使用者名改為backup就不會出現該錯誤,也不知道是什麼原因。

利用以上方式,結合crontab定時守護程序,可以完成定時資料庫備份,并且将備份的資料庫同步到另外一台伺服器上去。

定時備份資料庫代碼如下:

cronab -e
  * *   mysqldump -uroot -p密碼 需要備份的資料庫 >> 備份檔案存放位置
           

文章來源:http://www.turtletl.com

繼續閱讀