天天看點

Rsync企業實戰之異地自動化備份

Rsync, 故名思議,是一個遠端資料同步工具,可以鏡像整個目錄樹和檔案系統,也可以保持源檔案的權限,時間和軟硬連結,可以優化資料,檔案重複資料的删除,也可以 在LAN/WAN之間快速的同步多台主機的資料,這主要得益于Rsync的壓縮和Rsync的核心算法,其算法,是本地和遠端兩台主機之間的檔案達到同步 并保持一緻,并且隻傳送兩個檔案的不同部分,而不是整個資料進行傳送,是以,速度非常快;

一個Rsync server能夠同時備份多個用戶端資料,也可以一個用戶端備份多個Rsync server的資料;

Rsync 支援搭配scp,ssh和daemon模式,預設端口是873,當第一次連接配接的時候,會對資料進行完整備份,之後的所有備份,都是進行增量備份,隻備份又變化的資料;

Rsync隻支援單向備份,不支援雙向,如果需要雙向同步的,可以使用Unison;如果需要實時同步的,可以結合Rsync+inotify;

Rsync服務以隻讀方式提供要備份的資料,避免破壞生産環境的資料;

在這裡,有必要對Rsync的核心算法,進行講解:

假定在名為 α 和 β 的兩台計算機之間同步相似的檔案 A 與 B,其中 α 對檔案A擁有通路權,β 對檔案 B 擁有通路權。并且假定主機 α 與 β 之間的網絡帶寬很小。那麼 Rsync 算法将通過下面的五個步驟來完成:

β 将檔案 B 分割成一組不重疊的固定大小為 S 位元組的資料塊。最後一塊可能會比 S 小。   

β 對每一個分割好的資料塊執行兩種校驗:一種是32位的滾動弱校驗,另一種是128位的 MD4 強校驗。    

β 将這些校驗結果發給 α。    

α 通過搜尋檔案 A 的所有大小為 S 的資料塊(偏移量可以任選,不一定非要是 S 的倍數),來尋找與檔案B 的某一塊有着相同的弱校驗碼和強校驗碼的資料塊。這項工作可以借助滾動校驗的特性很快完成。    

α 發給 β 一串指令來生成檔案 A 在 β 上的備份。這裡的每一條指令要麼是對檔案 B 經擁有某一個資料塊而不須重傳的證明,要麼是一個資料塊,這個資料塊肯定是沒有與檔案 B 的任何一個資料塊比對上的。

Rsync适用于linux、solaris和bsd,在windows平台下,有cwRsync。

本文,将以Linux的Rsync和以window的cwRsync為例講解。

源碼安裝

下載下傳rsync服務端程式,

tar zxvf rsync-2.6.9.tar.gz

cd rsync-2.6.9

./configure --prefix=/usr/local/rsync

make

make install

rpm安裝

yum install rsync

本文以yum來安裝

模式選擇

對于負載比較重的,選擇獨立服務啟動

對于負載比較輕的,選擇以xinet.d啟動,選擇此模式,記得要安裝xinet.d (yum install xinet.d)

獨立運作模式

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf (本例選擇此方法)

如果需要系統開機啟動,可以把上面指令加入到/etc/rc.local檔案中。

建立配置檔案和密碼檔案

touch /etc/rsyncd.conf 主要配置檔案

touch /etc/rsync.pas 密碼檔案,此檔案需要注意用戶端和伺服器端的格式,後續會講解

關于配置檔案rsyncd.conf講解

Rsync的配置檔案,分為兩個部分,全局配置和子產品配置,

#全局設定

uid = root 指定子產品以root使用者來傳輸檔案,如果匿名使用者的話,這裡填寫nobody

gid = root 指定子產品以root使用者組來傳輸檔案,如果匿名傳輸的話,這裡填寫nobody

use chroot = yes 設定為YES,表示在傳輸檔案之前,定位到根目錄下,即PATH指定的目錄,這樣做,主要是出于安全考慮

pid file = /var/run/rsyncd.pid Rsync守護程序把其PID寫入的檔案

lock file = /var/run/rsync.lock 指定支援max connections的鎖檔案

log file = /var/log/rsyncd.log 指定Rsync守護程序産生的日志檔案,而不是傳送給syslog

#子產品設定

[Jindie] 子產品名稱,後續上傳下載下傳檔案配置時,直接使用此名稱名來指定

path = /sda1/JDdatabase 指定此子產品的根目錄,即檔案上傳下載下傳都是在此目錄下進行

ignore errors 指定在 rsync 伺服器上運作 delete 操作時是否忽略 I/O 錯誤

read only = false 指定是否允許上傳,false代表允許上傳。

write only = false 指定是否允許下載下傳,false代表允許下載下傳。

list = true 指定當客戶請求列出可以使用的子產品,該子產品是否被列出。如果false,可以建立隐藏的子產品。

hosts allow = 192.168.1.65 指定哪些用戶端可以通路連接配接此子產品,可以指定單個IP,整個網段,比如此例為單個IP

hosts deny = 0.0.0.0/0 指定哪些用戶端不允許連接配接此子產品,此例為0.0.0.0/0網段,代表整個網絡

通常表示用戶端表示方式,有如下:

單個IP:192.168.1.65

網段IP:192.168.1.0/24

域内主機:*.wine9.com

所有主機:*

多個清單項,要用空格隔開;

auth users = xy 指定認證使用者名,通常由空格或者逗号分隔使用者名清單,隻有這些使用者可以連接配接此子產品,使用者名和密碼,以明文形式,儲存在密碼檔案中

syslog facility = local5 指定日志等級,一般指發送給rsyslog的日志等級;

secrets file = /etc/rsync.pas 指定Rsync認證密碼檔案,隻有配置了auth users,此配置才生效,這裡要注意用戶端和服 務器端的配置格式。

ignore nonreadable 指定 rysnc 伺服器完全忽略那些使用者沒有通路權限的檔案,這對于在需要備份的目錄中有些不應該被備份者擷取的檔案時非常有意義

timeout 600 設定用戶端連接配接逾時時間,確定伺服器不會永遠等待一個奔潰的用戶端。

dont compress=*.gz 指定哪些檔案在傳輸之前,不需要進行壓縮的檔案。

max connections = 4 指定此子產品最大的并發連接配接數為4,超過的告知随後再試

exclude指定多個由空格隔開的多個檔案或目錄(相對路徑),并将其添加到 exclude 清單中。這等同于在用戶端指令中使用 –exclude 來指定模式。

Exclude from指定一個包含 exclude 規則定義的檔案名,伺服器從該檔案中讀取 exclude 清單定義

include指定多個由空格隔開的多個檔案或目錄(相對路徑),并将其添加到 include 清單中。這等同于在用戶端指令中使用 –include 來指定模式

Include from指定一個包含 include 規則定義的檔案名,伺服器從該檔案中讀取 include 清單定義

建立密碼檔案

touch /etc/rsync.pas #密碼檔案,儲存Rsync使用者和密碼驗證資訊,不需要是系統賬号;

vi /etc/rsync.pas

xy:abc123 #格式為 使用者名:密碼,此賬号不用是系統賬号

<a href="http://s3.51cto.com/wyfs02/M00/86/36/wKioL1e4PHDAcwfqAAATByRG5kY655.jpg" target="_blank"></a>

注意與後面的用戶端密碼檔案的格式進行比較,相較兩者不同點,這一點,有很多童鞋容易弄錯了,重要的事情說三遍,注意格式,注意格式,注意格式。

密碼檔案,需要設定密碼檔案權限,這一步同樣非常重要,Rsync對權限的要求還是比較敏感的。

#chown root:root /etc/rsync.pas #root:root 指的是目前啟動此服務的使用者,并設定為屬主

#chmod 600 /etc/rsync.pas #指定啟動此Rsync服務的使用者的權限為隻讀權限,也就是前面提到的屬主的權限。

用戶端本例,選擇windows的cwrsync工具,安裝不用多說。

建立rsync.pas檔案,添加内如如下:

因為我使用的使用者名是xy,此設定的密碼,必須跟伺服器端rsync.pas密碼檔案中設定的密碼一樣,比如本例密碼為abc123;

那麼,本例中設定為:

abc123

<a href="http://s3.51cto.com/wyfs02/M01/86/36/wKiom1e4PHCyjfWjAAAj15rLQBQ457.jpg" target="_blank"></a>

windows 密碼檔案的權限一定要設定正确,否則驗證無法通過,應将密碼檔案c:\rsync.pas的權限加入系統登入的賬号讀取權限以及設定其為該檔案的所有者 (這裡跟伺服器端有點不同,正常來說,無論windows還是liunx,伺服器端的這個使用者名,應該是啟動Rsync服務的使用者名,但是對于 windows用戶端來說,一般都是系統登入賬号)

定位到cwRsync用戶端安裝目錄,C:\Program Files (x86)\cwRsync\bin

chmod 600 /cygdrive/c/rsync.pas

chown administrator /cygdrive/c/rsync.pas #如果沒有chown.exe檔案,可以從伺服器端的安裝目錄的bin目錄下直接複制過來就可以使用,

注:Rsync對路徑的書寫格式,與windows不同,它是遵循,postfix書寫格式,

Rsync同步的六種格式

當Rsync已經做好伺服器端和用戶端的配置之後,接下來就是通過Rsync指令,像伺服器發起指令請求,來完成檔案的同步操作,Rsync的功能非常強大,提供了六種格式,來支援Rsync的六種工作方式;

rsync [OPTION]... SRC DEST   

rsync [OPTION]... SRC [USER@]HOST:DEST    

rsync [OPTION]... [USER@]HOST:SRC DEST    

rsync [OPTION]... [USER@]HOST::SRC DEST    

rsync [OPTION]... SRC [USER@]HOST::DEST    

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

對于以上六種指令格式,

1) rsync [OPTION]... SRC DEST

拷貝本地檔案,當SRC和DEST路徑資訊都不包含有單個冒号“:“,就啟動此工作模式,

rsync.exe –vzrtopg /data /backup

2) rsync [OPTION]... SRC [USER@]HOST:DEST

使用一個遠端shell程式(如rsh、ssh)來實作将本地機器的内容拷貝到遠端機器。當DST路徑位址包含單個冒号":"分隔符時啟動該模式。如:rsync -avz *.c foo:src

3) rsync [OPTION]... [USER@]HOST:SRC DEST   

使用一個遠端shell程式(如rsh、ssh)來實作将遠端機器的内容拷貝到本地機器。當SRC位址路徑包含單個冒号":"分隔符時啟動該模式。如:rsync -avz foo:src/bar /data

4) rsync [OPTION]... [USER@]HOST::SRC DEST   

從遠端rsync伺服器中拷貝檔案到本地機。當SRC路徑資訊包含"::"分隔符時啟動該模式。如:rsync -av [email protected]::www /databack,其中www是在rsync配置檔案中,指定的子產品的名稱。

5) rsync [OPTION]... SRC [USER@]HOST::DEST   

6) rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]   

列遠端機的檔案清單。這類似于rsync傳輸,不過隻要在指令中省略掉本地機資訊即可。如:rsync -v rsync://172.16.78.192/www

上傳同步檔案

rsync.exe -vzrtopg --progress --delete /cygdrive/c/test/*.txt [email protected]::Jindie --password-file=/cygdrive/c/rsync.pas

解釋:

rsync.exe 即rsync指令

vzrtopg 指定參數,傳輸的詳細資訊;

--delete 删除哪些在DST中存在,而SRC中沒有存在的檔案或者目錄

/cygdrive/c/test/*.txt 注意這裡的格式,不能使用windows的格式,必須使用POSTFIX标準格式;

[email protected]::Jindie xy是有權通路伺服器的使用者名,192.168.31.13是伺服器位址,Jindie是伺服器端配置檔案中指定的子產品,這個子產品中指定使用者資訊和同步路徑;伺服器位址和子產品之間,用兩個冒号隔開。

--password-file=/cygdrive/c/rsync.pas 密碼檔案,當中含有xy賬号的密碼,要與伺服器端配置檔案rsyncd.conf中指定的密碼檔案中設定的密碼相同。

下載下傳同步檔案

rsync.exe -vzrtopg --progress --delete [email protected]::Jindie /cygdrive/c/test --password-file=/cygdrive/c/rsync.pas

通常,因為上傳和下載下傳的方向性不同,直接調換源檔案路徑和目标位址的路徑,即可。

把上面的指令寫入到批處理器檔案中,比如test.bat,通過任務計劃來實作定時備份。

C:\Program Files (x86)\cwRsync\bin

複制上面指令,儲存到test.bat檔案中,

開始 -- 所有程式-- 附件--系統工具--任務計劃程式

展開 任務計劃程式庫--Microsoft,右擊 “建立基本任務“

<a href="http://s3.51cto.com/wyfs02/M01/86/36/wKiom1e4PHGiY3JMAACKTBtqviM092.jpg" target="_blank"></a>

建立基本任務向導,輸入 ”名稱”

<a href="http://s3.51cto.com/wyfs02/M02/86/36/wKiom1e4PHLRCJP2AAB_9tDkbw8368.jpg" target="_blank"></a>

點選 “下一步”

<a href="http://s3.51cto.com/wyfs02/M01/86/36/wKioL1e4PHOgPc3vAABgd3rf-mU840.jpg" target="_blank"></a>

任務觸發器,根據實際需要,設定每日,每周,每月同步,這裡,我選擇每日備份,可以減少帶寬壓力。

<a href="http://s3.51cto.com/wyfs02/M00/86/36/wKiom1e4PHPBI8mYAABeDVIYKRY836.jpg" target="_blank"></a>

設定,每日啟動的時間,這裡設定每日,淩晨1點,點選 “下一步”

<a href="http://s3.51cto.com/wyfs02/M01/86/36/wKiom1e4PHSwxvIgAABaIHsae8g040.jpg" target="_blank"></a>

選擇 “啟動程式“

<a href="http://s3.51cto.com/wyfs02/M02/86/36/wKioL1e4PHXAp2RmAABtfJE_6aY256.jpg" target="_blank"></a>

浏覽,選擇 腳本檔案

<a href="http://s3.51cto.com/wyfs02/M02/86/36/wKiom1e4PHaBTVhQAACSOLtDORk740.jpg" target="_blank"></a>

點選 “完成 ”

到此,部署,已經全部完成。

本文轉自 dengaosky 51CTO部落格,原文連結:http://blog.51cto.com/dengaosky/1852306,如需轉載請自行聯系原作者