Rsync,故名思議,是一個遠程數據同步工具,能夠鏡像整個目錄樹和文件系統,也能夠保持源文件的權限,時間和軟硬連接,能夠優化數據,文件重複數據的刪除,也能夠在LAN/WAN之間快速的同步多臺主機的數據,這主要得益於Rsync的壓縮和Rsync的核心算法,其算法,是本地和遠程兩臺主機之間的文件達到同步並保持一致,而且只傳送兩個文件的不一樣部分,而不是整個數據進行傳送,因此,速度很是快;linux
一個Rsync server可以同時備份多個客戶端數據,也能夠一個客戶端備份多個Rsync server的數據;算法
Rsync 支持搭配scp,ssh和daemon模式,默認端口是873,當第一次鏈接的時候,會對數據進行完整備份,以後的全部備份,都是進行增量備份,只備份又變化的數據;shell
Rsync只支持單向備份,不支持雙向,若是須要雙向同步的,可使用Unison;若是須要實時同步的,能夠結合Rsync+inotify;windows
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。ssh
本文,將以Linux的Rsync和以window的cwRsync爲例講解。ide
源碼安裝
下載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
可解析的主機地址:www.baidu.com
域內主機:*.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 #格式爲 用戶名:口令,此帳號不用是系統帳號
注意與後面的客戶端口令文件的格式進行比較,相較二者不一樣點,這一點,有不少童鞋容易弄錯了,重要的事情說三遍,注意格式,注意格式,注意格式。
口令文件,須要設置口令文件權限,這一步一樣很是重要,Rsync對權限的要求仍是比較敏感的。
#chown root:root /etc/rsync.pas #root:root 指的是當前啓動此服務的用戶,並設置爲屬主
#chmod 600 /etc/rsync.pas #指定啓動此Rsync服務的用戶的權限爲只讀權限,也就是前面提到的屬主的權限。
客戶端本例,選擇windows的cwrsync工具,安裝不用多說。
新建rsync.pas文件,添加內如以下:
由於我使用的用戶名是xy,此設置的密碼,必須跟服務器端rsync.pas口令文件中設置的密碼同樣,好比本例口令爲abc123;
那麼,本例中設置爲:
abc123
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 root@172.16.78.192::www /databack,其中www是在rsync配置文件中,指定的模塊的名稱。
5) rsync [OPTION]... SRC [USER@]HOST::DEST
從本地機器拷貝文件到遠程rsync服務器中。當DST路徑信息包含"::"分隔符時啓動該模式。如:rsync -av /databackroot@172.16.78.192::www,其中www是在rsync配置文件中,指定的模塊的名稱。
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 xy@192.168.31.13::Jindie --password-file=/cygdrive/c/rsync.pas
解釋:
rsync.exe 即rsync命令
vzrtopg 指定參數,傳輸的詳細信息;
--delete 刪除哪些在DST中存在,而SRC中沒有存在的文件或者目錄
/cygdrive/c/test/*.txt 注意這裏的格式,不能使用windows的格式,必須使用POSTFIX標準格式;
xy@192.168.31.13::Jindie xy是有權訪問服務器的用戶名,192.168.31.13是服務器地址,Jindie是服務器端配置文件中指定的模塊,這個模塊中指定用戶信息和同步路徑;服務器地址和模塊之間,用兩個冒號隔開。
--password-file=/cygdrive/c/rsync.pas 口令文件,當中含有xy帳號的密碼,要與服務器端配置文件rsyncd.conf中指定的口令文件中設置的密碼相同。
下載同步文件
rsync.exe -vzrtopg --progress --delete xy@192.168.31.13::Jindie /cygdrive/c/test --password-file=/cygdrive/c/rsync.pas
一般,由於上傳和下載的方向性不一樣,直接調換源文件路徑和目標地址的路徑,便可。
把上面的命令寫入到批處理器文件中,好比test.bat,經過任務計劃來實現定時備份。
C:\Program Files (x86)\cwRsync\bin
rsync.exe -vzrtopg --progress --delete /cygdrive/c/test/*.txt xy@192.168.31.13::Jindie --password-file=/cygdrive/c/rsync.pas
複製上面命令,保存到test.bat文件中,
開始 -- 全部程序-- 附件--系統工具--任務計劃程序
展開 任務計劃程序庫--Microsoft,右擊 「建立基本任務「
建立基本任務嚮導,輸入 」名稱」
點擊 「下一步」
任務觸發器,根據實際須要,設置每日,每週,每個月同步,這裏,我選擇每日備份,能夠減小帶寬壓力。
設置,每日啓動的時間,這裏設置每日,凌晨1點,點擊 「下一步」
選擇 「啓動程序「
瀏覽,選擇 腳本文件
點擊 」完成 「
到此,部署,已經所有完成。