rsync+inotify搭建實時同步系統

rsync簡介web

   rsync是Linux和UNIX系統下的文件同步和數據傳輸工具,它採用了「rsync」算法使一個客戶機和遠程文件服務器之間的文件同步,它不一樣於cp和wget命令完整複製的侷限性,它支持增量備份,所以文件傳輸效率高,於是同步時間很短,具體特性以下:算法

   一、能夠鏡像保存整個目錄樹和文件系統安全

   二、能夠增量同步數據。文件傳輸效率高。bash

   三、能夠保持原有文件的權限、時間等屬性。服務器

   四、加密傳輸數據,保證數據的安全性。ssh

   五、可使用rcp、ssh等方式來傳輸文件。異步


搭建遠程容災備份系統ide

   Web服務器爲了保證數據安全,天天凌晨2點將數據備份到遠程容災服務器上,因爲數據量比較大,每一年只能進行增量備份,僅備份當天新增數據,系統環境以下:工具

操做系統 RHEL5.8
內核版本 2.6.18-308.el5
web服務器地址 192.168.1.104
遠程容災服務器地址 192.168.1.110

Web端配置
測試

主配置文件/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[ixdba]
path = /webdata
commnet = ixdba file
ignore errors
read only = no
write only = no
hosts allow = *
hosts deny = 192.168.1.200
list = false
uid = root
gid = root
auth users = backup
secrets file = /etc/server.pass

密碼文件chmod 600 /etc/server.pass

backup:ixdba123

啓動rsync守護進程

/usr/local/bin/rsync --daemon

遠程容災端配置

密碼文件chmod 600 /etc/server.pass

ixdba123

添加計劃任務crontab -e

1 3 * * *  /usr/local/bin/rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" backup@192.168.1.104::ixdba /ixdba.dir --password-file=/etc/server.pass

分析不足

此時一個遠程容災系統已經搭建完成,但這並不是是一個完整意義上的容災方案,因爲rsync須要經過觸發才能將服務器端數據同步,所以兩次觸發同步的時間間隔內,服務器和客戶端的數據可能不一致,若是在這個時間間隔內,網站系統出現問題,數據必然丟失,Linux 2.6.13之後的內核提供了inotify文件系統監控機制,用過rsync與inotify的組合,徹底能夠實現rsync服務器端和客戶端的實時數據同步。


rsync+inotify實現數據的實時備份

   inotify是一種強大的、細粒度的、異步的文件系統時間監控機制,Linux內核從2.6.13版本起,加入了對inotify的支持。經過inotify能夠監控文件系統中添加、刪除、修改、移動等各類細微事件,利用這個內核接口,第三方軟件能夠監控文件系統下文件的各類變化狀況,inotify-tools軟件正是基於這種需求實現的一個第三方軟件。

   內容分發服務器實時同步數據對2個Web服務器上,inotify是用來監控文件系統變化的工具,所以必須安裝在內容發佈節點上,內容發佈節點(Server)充當了rsync客戶端的角色,2個Web節點充當了rsync服務器端的角色,整個數據同步過程就是一個從客戶端向服務器端發送數據的過程,與前面案例中的邏輯結構恰好相反,系統環境以下:

     節點名稱      內核版本        IP地址 網頁數據存放路徑
Web1 2.6.18-308.el5 192.168.1.110 /web1/wwwroot
Web2 2.6.18-308.el5 192.168.1.160 /web2/wwwroot
Server 2.6.18-308.el5 192.168.1.104 /web/wwwroot

Web1端配置

主配置文件/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web1]
path = /web1/wwwroot
commnet = web1 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.1.104
hosts deny = *
list = false
uid = root
gid = root
auth users = web1user
secrets file = /etc/server.pass

密碼文件chmod 600 /etc/server.pass

web1user:ixdba123

啓動rsync守護進程並添加開機自動啓動

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

Web2端配置

主配置文件/etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web2]
path = /web2/wwwroot
commnet = web2 file
ignore errors
read only = no
write only = no
hosts allow = 192.168.1.104
hosts deny = *
list = false
uid = root
gid = root
auth users = web2user
secrets file = /etc/server.pass

密碼文件chmod 600 /etc/server.pass

web2user:ixdba123

啓動rsync守護進程並添加開機自動啓動

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

Server端配置

安裝inotify-tools

tar xf rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure
make && make install

密碼文件chmod 600 /etc/server.pass

ixdba123

監控目錄變化並同步Web節點腳本

#!/bin/sh
host1=192.168.1.110
host2=192.168.1.160
dir=/web/wwwroot/
dst1=web1
dst2=web2
usr1=web1user
usr2=web2user
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $dir \
| while read files
        do
        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $dir $usr1@$host1::$dst1
        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $dir $usr2@$host2::$dst2
        echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
        done

指定權限並放入後臺運行

chmod 755 /web/wwwroot/inotifyrsync.sh
/web/wwwroot/inotifyrsync.sh &

爲此腳本添加開機自動啓動

echo "/web/wwwroot/inotifyrsync.sh &" >> /etc/rc.local

測試結果

Server端(rsync客戶端)建立測試文件,如圖:

Web1端查看,如圖:

Web2端查看,如圖:

相關文章
相關標籤/搜索