rsync簡介
rsync是Linux和UNIX系統下的檔案同步和資料傳輸工具,它采用了“rsync”算法使一個客戶機和遠端檔案伺服器之間的檔案同步,它不同于cp和wget指令完整複制的局限性,它支援增量備份,是以檔案傳輸效率高,因而同步時間很短,具體特性如下:
1、可以鏡像儲存整個目錄樹和檔案系統
2、可以增量同步資料。檔案傳輸效率高。
3、可以保持原有檔案的權限、時間等屬性。
4、加密傳輸資料,保證資料的安全性。
5、可以使用rcp、ssh等方式來傳輸檔案。
搭建遠端容災備份系統
Web伺服器為了保證資料安全,每天淩晨2點将資料備份到遠端容災伺服器上,由于資料量比較大,每年隻能進行增量備份,僅備份當天新增資料,系統環境如下:
作業系統
RHEL5.8
核心版本
2.6.18-308.el5
web伺服器位址
192.168.1.104
遠端容災伺服器位址
192.168.1.110
Web端配置
主配置檔案/etc/rsyncd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<code>uid = nobody</code>
<code>gid = nobody</code>
<code>use chroot = no</code>
<code>max connections = 10</code>
<code>strict modes = </code><code>yes</code>
<code>pid </code><code>file</code> <code>= </code><code>/var/run/rsyncd</code><code>.pid</code>
<code>lock </code><code>file</code> <code>= </code><code>/var/run/rsync</code><code>.lock</code>
<code>log </code><code>file</code> <code>= </code><code>/var/log/rsyncd</code><code>.log</code>
<code>[ixdba]</code>
<code>path = </code><code>/webdata</code>
<code>commnet = ixdba </code><code>file</code>
<code>ignore errors</code>
<code>read</code> <code>only = no</code>
<code>write only = no</code>
<code>hosts allow = *</code>
<code>hosts deny = 192.168.1.200</code>
<code>list = </code><code>false</code>
<code>uid = root</code>
<code>gid = root</code>
<code>auth </code><code>users</code> <code>= backup</code>
<code>secrets </code><code>file</code> <code>= </code><code>/etc/server</code><code>.pass</code>
密碼檔案chmod 600 /etc/server.pass
<code>backup:ixdba123</code>
啟動rsync守護程序
<code>/usr/local/bin/rsync</code> <code>--daemon</code>
遠端容災端配置
密碼檔案chmod 600 /etc/server.pass
<code>ixdba123</code>
添加計劃任務crontab -e
<code>1 3 * * * </code><code>/usr/local/bin/rsync</code> <code>-vzrtopg --delete --progress --exclude </code><code>"*access*"</code> <code>--exclude </code><code>"debug*"</code> <code>[email protected]::ixdba </code><code>/ixdba</code><code>.</code><code>dir</code> <code>--password-</code><code>file</code><code>=</code><code>/etc/server</code><code>.pass</code>
分析不足
此時一個遠端容災系統已經搭建完成,但這并非是一個完整意義上的容災方案,由于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
/web1/wwwroot
Web2
192.168.1.160
/web2/wwwroot
Server
/web/wwwroot
Web1端配置
<code>[web1]</code>
<code>path = </code><code>/web1/wwwroot</code>
<code>commnet = web1 </code><code>file</code>
<code>hosts allow = 192.168.1.104</code>
<code>hosts deny = *</code>
<code>auth </code><code>users</code> <code>= web1user</code>
<code>web1user:ixdba123</code>
啟動rsync守護程序并添加開機自動啟動
<code>echo</code> <code>"/usr/local/bin/rsync"</code> <code>>></code><code>/etc/rc</code><code>.</code><code>local</code>
<code>/usr/local/bin/rsync--daemon</code>
Web2端配置
<code>[web2]</code>
<code>path = </code><code>/web2/wwwroot</code>
<code>commnet = web2 </code><code>file</code>
<code>auth </code><code>users</code> <code>= web2user</code>
<code>web2user:ixdba123</code>
Server端配置
安裝inotify-tools
<code>tar</code> <code>xf </code><code>rsync</code><code>-3.0.7.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>rsync</code><code>-3.0.7</code>
<code>.</code><code>/configure</code>
<code>make</code> <code>&& </code><code>make</code> <code>install</code>
監控目錄變化并同步Web節點腳本
<code>#!/bin/sh</code>
<code>host1=192.168.1.110</code>
<code>host2=192.168.1.160</code>
<code>dir</code><code>=</code><code>/web/wwwroot/</code>
<code>dst1=web1</code>
<code>dst2=web2</code>
<code>usr1=web1user</code>
<code>usr2=web2user</code>
<code>/usr/local/bin/inotifywait</code> <code>-mrq --timefmt </code><code>'%d/%m/%y %H:%M'</code> <code>--</code><code>format</code> <code>'%T %w%f%e'</code> <code>-e close_write,delete,create,attrib $</code><code>dir</code> <code>\</code>
<code>| </code><code>while</code> <code>read</code> <code>files</code>
<code> </code><code>do</code>
<code> </code><code>/usr/bin/rsync</code> <code>-vzrtopg --delete --progress --password-</code><code>file</code><code>=</code><code>/etc/server</code><code>.pass $</code><code>dir</code> <code>$usr1@$host1::$dst1</code>
<code> </code><code>/usr/bin/rsync</code> <code>-vzrtopg --delete --progress --password-</code><code>file</code><code>=</code><code>/etc/server</code><code>.pass $</code><code>dir</code> <code>$usr2@$host2::$dst2</code>
<code> </code><code>echo</code> <code>"${files} was rsynced"</code> <code>>> </code><code>/tmp/rsync</code><code>.log 2>&1</code>
<code> </code><code>done</code>
指定權限并放入背景運作
<code>chmod</code> <code>755 </code><code>/web/wwwroot/inotifyrsync</code><code>.sh</code>
<code>/web/wwwroot/inotifyrsync</code><code>.sh &</code>
為此腳本添加開機自動啟動
<code>echo</code> <code>"/web/wwwroot/inotifyrsync.sh &"</code> <code>>> </code><code>/etc/rc</code><code>.</code><code>local</code>
測試結果
Server端(rsync用戶端)建立測試檔案,如圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/213932523.png"></a>
Web1端檢視,如圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/214125433.png"></a>
Web2端檢視,如圖:
<a target="_blank" href="http://blog.51cto.com/attachment/201308/214223457.png"></a>
本文轉自 ftmoonfans 51CTO部落格,原文連結:http://blog.51cto.com/soulboy/1281704