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端查看,如圖: