這幾天剛好有空就打算開始學習linux下的檔案同步軟體rsync,在學習rsync時,我們可以分以下幾個步驟進行:
1、 rsync是什麼
2、 rsync的工作原理
3、 rsync優點
4、 rsync認證方式
5、 安裝rsync
6、 rsync指令參數詳解
7、 配置rsync
8、 rsync的啟動與關閉
9、 rsync同步執行個體
說明:rsync伺服器與用戶端使用的os均為:centos 6.5 64bit。
在開始正式學習rsync之前,我們先來回答這個問題:rsync是什麼。
rsync(remote synchronize)是liunx/unix下的一個遠端資料同步工具。它可通過lan/wan快速同步多台主機間的檔案和目錄,并适當利用rsync算法(差分編碼)以減少資料的傳輸。
rsync算法并不是每一次都整份傳輸,而是隻傳輸兩個檔案的不同部分,是以其傳輸速度相當快。
除此之外,rsync可拷貝、顯示目錄屬性,以及拷貝檔案,并可選擇性的壓縮以及遞歸拷貝。
1、用戶端構造filelist,filelist包含了需要與伺服器同步的所有檔案資訊對name->id(id用來唯一表示檔案例如md5)。
2、用戶端将filelist發送到伺服器。
3、伺服器上rsync處理用戶端發過來的filelist,建構新的newfilelist。其中根據md5值比較,删除伺服器上已經存在的檔案資訊對,隻保留伺服器上不存在或變化的檔案。
4、用戶端得到伺服器發送過來的newfilelist,然後把newfilelist中的檔案重新傳輸到伺服器。
rsync有以下幾個優點:
1)可以鏡像儲存整個目錄樹和檔案系統。
2)可以很容易做到保持原來檔案的權限、時間、軟硬連接配接等。
3)無需特殊權限即可安裝。
4)擁有優化的流程和比較高的檔案傳輸效率。
5)可以使用shell(rsh、ssh)方式來傳輸檔案。
6)支援匿名運作。
7)與scp相比,rsync傳輸速度絕對遠遠超過scp的傳輸速度。
我們在區域網路中經常用rsync和scp傳輸大量mysql資料庫檔案,發現rsync傳輸檔案速度至少要比scp快20倍以上。
是以如果需要在liunx/unix伺服器之間互傳海量資料時,建議選擇rsync進行傳輸。
rsync有兩種常用的認證方式,一種是rsync-daemon方式,另外一種是ssh方式。在平時使用過程,我們使用最多的是rsync-daemon方式。
<b>注意:在使用rsync時,伺服器和用戶端都必須安裝rsync程式</b>。
rsync在rsync-daemon認證方式下,預設監聽tcp的873端口。
rsync-daemon認證方式是rsync的主要認證方式,這個也是我們經常使用的認證方式。并且也隻有在此種模式下,rsync才可以把密碼寫入到一個檔案中。
<b>注意:rsync-daemon認證方式,需要伺服器和用戶端都安裝rsync服務,并且隻需要rsync伺服器端啟動rsync,同時配置rsync配置檔案。用戶端啟動不啟動rsync服務,都不影響同步的正常進行。</b>
rsync在ssh認證方式下,可通過系統使用者進行認證,即在rsync上通過ssh隧道進行傳輸,類似于scp工具。此時同步操作不在局限于rsync中定義的同步檔案夾。
<b>注意:ssh認證方式,不需要伺服器和用戶端配置rsync</b><b>配置檔案</b><b>,隻需要雙方都安裝rsync服務,并且也不需要雙方啟動rsync。</b>
若rsync服務端ssh為标準端口,此時rsync使用方式如下:
rsync -avz /root/test [email protected]:/root/
若rsync服務端ssh為非标準端口,可通過rsync的-e參數進行端口指定。使用方式如下:
rsync -avz /root/test -e ‘ssh -p1234’ [email protected]:/root/
安裝rsync,我們可以分為兩種方式:源碼方式安裝和rpm方式安裝。
<b>注意:rsync軟體無論是伺服器端還是用戶端都是同一個軟體包。</b>
下面我們就一一講解,這兩種方式的安裝方法。
源碼方式安裝rsync,我們需要到其官網下載下傳對應的安裝包。rsync官網:rsync.samba.org。如下:
我們使用wget進行下載下傳,如下:
wget http://rsync.samba.org/ftp/rsync/rsync-3.1.1.tar.gz
安裝包下載下傳完畢後,我們開始解壓并安裝。如下:
tar -xf rsync-3.1.1.tar.gz
./configure
make &&make install
注意:源碼安裝rsync時,其編譯時所需要的gcc庫檔案盡量提前安裝完畢。
rsync源碼安裝會把rsync預設安裝到/usr/local/目錄下,我們可以通過相關幫助進行檢視到。如下:
./configure –help
rsync安裝完畢後,我們可以檢視rsync的使用幫助。我們此時需要切換到/usr/local/bin目錄下,如下:
/usr/local/bin
rsync -h
源碼方式安裝的rsync,要使其開機啟動的話。我們可以直接把啟動指令放入到rc.local檔案中。如下:
echo “/usr/local/bin/rsync –daemon –config=/etc/rsyncd.conf”>>/etc/rc.local
也可以寫成:
echo “/usr/local/bin/rsync –daemon”>>/etc/rc.local
cat /etc/rc.local
rpm方式安裝rsync比較簡單,直接使用yum進行安裝即可。如下:
yum -y install rsync
檢視rsync安裝的位置,如下:
rpm -ql rsync-3.0.6-12.el6.x86_64
通過上圖可以看到rpm方式安裝的rsync是把rsync安裝到/usr/bin目錄下的,并且還生成一個/etc/xinetd.d/rsync檔案。
檢視安裝時産生的幫助文檔,如下:
more /usr/share/doc/rsync-3.0.6/readme
安裝結束後,我們可以檢視下rsync指令所在的目錄以及rsync的幫助。如下:
which rsync
rsync –-help
通過上圖可以很明顯的看到rsync确實被安裝到了/usr/bin目錄下。
rpm方式安裝的rsync,要使其開機啟動的話,我們也可以讓其與源碼方式安裝的一樣進行開機啟動。
除此之外還有一種方法,可以使其開機啟動。如果你注意觀察的話,會發現rsync在安裝時生成的/etc/xinetd.d/rsync檔案。
<b>在centos下rsync預設以xinetd方式運作rsync服務。是以rpm方式安裝的話rsync,我們隻需啟動xinet服務即可。</b>
但是在啟動xinetd服務之前,我們還需要配置檔案/etc/xinetd.d/rsync,如下:
vi /etc/xinetd.d/rsync
service rsync
{
disable = no
flags = ipv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon –config=/etc/rsyncd.conf
log_on_failure += userid
}
配置完畢後,我們還需要安裝xinetd軟體包,否則無法啟動xinetd服務。如下:
yum -y install xinetd
/etc/init.d/xinetd start
chkconfig xinetd on
netstat -tunlp |grep 873
rsync安裝完畢後,我們來檢視下rsync指令的幫助,如下:
rsync –help
-v, –verbose詳細模式輸出。
-a, –archive歸檔模式,表示以遞歸方式傳輸檔案,并保持所有檔案屬性不變。
-z, –compress對備份的檔案在傳輸時進行壓縮處理。
–delete:删除那些dst中存在而在src中沒有的檔案。
除此上述幾個參數之外,我們還注意到上圖中rsync的七個指令格式:如下:
1)rsync [option]… src [src]… dest
2)rsync [option]… src [src]… [user@]host:dest
3)rsync [option]… src [src]… [user@]host::dest
4)rsync [option]… src [src]… rsync://[user@]host[:port]/dest
5)rsync [option]… [user@]host:src [dest]
6)rsync [option]… [user@]host::src [dest]
7)rsync [option]… rsync://[user@]host[:port]/src [dest]
這七個指令格式就是代表rsync六種不同的工作模式,其中第四種和第七種模式沒有多大的差別。在這幾種模式中第三種和第六種模式是我們經常使用的,特别是第三種模式。
這六種模式總體上可以用兩個詞進行區分:推送、拉取。
推送就是在用戶端上執行rsync指令,目的是把用戶端需要同步的檔案推送到伺服器上。
拉取也是在用戶端上執行rsync指令,目的是把伺服器上的檔案拉取到本地。
<b>注意:無論是推送和拉取,rsync指令都是在用戶端執行,隻是指令的格式不同而已。</b>
1) rsync [option]… src [src]… dest
同步本地檔案,從一個目錄同步到另外一個目錄。如:rsync -avz /data /backup,表示把本地/data目錄下的檔案同步到本地/backup目錄下。
2) rsync [option]… src [src]… [user@]host:dest
使用一個遠端shell程式(如rsh、ssh)來實作把本地的檔案同步到遠端機器上。<b>此種方式屬于推送方式。</b>如:rsync -avz /data [email protected]:/backup,表示把本地/data目錄下的檔案同步到伺服器192.168.199.247的/backup目錄下。
3) rsync [option]… src [src]… [user@]host::dest
把本地的檔案同步到遠端伺服器上<b>,其中dest表示的是rsync伺服器的認證子產品名。此種方式屬于推送方式。</b>如:rsync -avz /data [email protected]::backup –password-file=/etc/rsyncd.password,表示把本地/data目錄下的檔案同步到伺服器192.168.199.247的backup子產品下path路徑下。
4) rsync [option]… src [src]… rsync://[user@]host[:port]/dest
列出遠端機器的檔案清單。這類似于ls指令,不過隻要在指令中省略掉本地機資訊即可。如:rsync -v rsync://[email protected]/backup,表示在本機列出伺服器192.168.199.247的/backup目錄下的内容,如下:
5) rsync [option]… [user@]host:src [dest]
把遠端機器的檔案同步到本地,<b>此種方式屬于拉取方式</b>。如:rsync -avz [email protected]:/backup /data,表示把192.168.199.247的/backup目錄下檔案同步到本地/data目錄下。
6) rsync [option]… [user@]host::src [dest]
把遠端機器的檔案同步到本地,<b>此種方式屬于拉取方式</b>。如:rsync -avz [email protected]::backup –password-file=/etc/rsyncd.password /data,表示把192.168.199.247的backup子產品path路徑下的檔案同步到本地/data目錄下。
rsync安裝完畢後,我們就需要配置rsync。而對于rsync伺服器來說,最重要和最複雜的就是它的配置了。
rsync的配置分為伺服器端和用戶端,下面我們分開一一講解。
rsync伺服器端需要兩個配置檔案:rsyncd.conf、rsyncd.password。
其中rsyncd.conf預設存放在/etc/目錄下,同時它也是rsync伺服器的主配置檔案。該檔案配置了rsync伺服器的控制認證、通路、日志記錄等等。而rsyncd.password主要用于存儲rsync使用者名和密碼。
但是在rsync安裝完畢後後是不會生成以上這兩個配置檔案的,需要我們手工進行建立。
rsyncd.conf配置檔案内容如下:
cat /etc/rsyncd.conf
uid = root
gid = root
user chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/run/rsyncd.log
[backup]
path = /backup/
ignore errors
read only = no
list = no
hosts allow = 192.168.199.0/255.255.255.0
auth users = test
secrets file = /etc/rsyncd.password
[www]
path = /www/
auth users = apache
<b>rsync</b><b>預設是在nobody使用者下運作的,但是我們為了以後同步時不為各種權限的事情煩惱,就讓其在root使用者下運作。</b>
配置檔案建立完畢後,我們來建立密碼檔案。如下:
echo “test:test”>>/etc/rsyncd.password
echo “apache:apache”>>/etc/rsyncd.password
cat /etc/rsyncd.password
<b>注意:該密碼檔案中的使用者和密碼可以進行自定義,同時該使用者不一定要在伺服器中的系統使用者存在。</b>
密碼檔案建立完畢後,要把其權限要設定為600,否則會在以後同步時提示驗證出錯。如下:
chmod 600 /etc/rsyncd.password
一個rsync配置檔案中可以包含多個認證子產品,同時一個密碼檔案中也可以存放多個使用者和其對應的密碼。其中每一個認證子產品可以對應不同的用戶端。
以上兩個檔案建立完畢後,我們來建立其對應的目錄并授權,如下:
mkdir /{backup,www}
chown root:root –r /backup/
chown root:root –r /www/
以上就是rsync伺服器端的配置。
rsync用戶端配置與伺服器端相比差别還是比較大的。
在用戶端安裝完畢rsync服務後,是不需要啟動rsync服務的。我們隻需要在用戶端建立連接配接rsync伺服器時,驗證碼使用者所需要的密碼檔案即可。
<b>該密碼檔案中的密碼要與rsync伺服器上的密碼檔案中的密碼對應,并且也要與rsync伺服器rsyncd.conf配置檔案中的認證子產品中的使用者比對。</b>
當然該密碼檔案不建立也是可以的,不建立的話。我們在執行rsync操作時,就需要輸入rsync的對應使用者的密碼。如下:
echo “apache”>>/etc/rsyncd.password
<b>注意:該密碼檔案中隻能存放一個使用者的密碼,并且該檔案與rsync伺服器端的密碼檔案一樣也需要把其權限設定為600。</b>
以上就是rsync用戶端的配置。
rsync伺服器端與用戶端都配置完畢後,我們就可以來啟動rsync伺服器,并且也可以關閉rsync服務。
在前面我們講過rsync-daemon認證方式,需要伺服器和用戶端都安裝rsync服務,并且隻需要rsync伺服器端啟動rsync,同時配置rsync配置檔案,用戶端啟動不啟動rsync服務。
在此我們隻講解rsync-daemon認證方式的啟動。有關rsync使用ssh方式認證,我們就不在此講解了,如果有想了解的童鞋,可以看看6.2章節的rsync六種工作模式。
如果是源碼方式安裝的rsync,我們可以使用rsync –daemon來啟動rsync。如下:
echo path=$path:/usr/local/bin/>>/etc/profile
source /etc/profile
<b>rsync –daemon</b>
ps aux |grep rsync
<b>注意:上述指令行中,隻有rsync –daemon才是啟動rsync的指令。并且該指令啟動時,會預設加載/etc/rsyncd.conf檔案。</b>
是以如果rsync的配置檔案不在/etc目錄下或者rsync配置檔案名不為rsyncd.conf,那麼我們在啟動rsync服務時,就要手工加上該配置檔案的完整路徑。方法如下:
rsync –daemon –config=/etc/rsyncd.conf
有關如何加載該配置檔案,我們可以通過rsync –daemon –help進行檢視。如下:
rsync –daemon –help
如果是rpm方式安裝的rsync,我們在5.2章節rpm方式安裝rsync中已經講解過了,可以通過啟動xinetd服務來啟動rsync。如下:
以上就是rsync服務的啟動,下面我們開始介紹如何關閉rsync服務。
要關閉rsync服務,如果是源碼方式安裝的,我們可以直接通過pkill rsync指令進行關閉。如下:
pkill rsync
如果是通過yum方式進行安裝的,我們可以通過關閉xinetd服務來達到關閉rsync服務的目的。如下:
/etc/init.d/xinetd stop
除了以上兩種方法之外,我們還可以通過比較暴力的方法關閉rsync服務。如下:
kill -9 6780
rsync服務正常啟動後,我們就要切換到用戶端來實際同步一個檔案。
現在rsync伺服器是192.168.199.247,rsync用戶端為192.168.199.248。
首先在rsync伺服器192.168.199.247的www子產品下/www/目錄下建立一個檔案ilanni247,内容如下:
ifconfig eth1|grep “inet addr”|awk ‘{print $2}’|cut -d: -f2
vi /www/ilanni247
this is server 247 www.
然後在rsync用戶端192.168.199.248的/root下建立一個www目錄,并在此目錄下建立一個檔案ilanni248,内容如下:
mkdir www
vi /www/ilanni248
this is client 248 www.
要把rsync用戶端192.168.199.248檔案推送到rsync伺服器192.168.199.247上,我們需要使用到rsync幫助指令中的第三種指令,如下:
rsync [option]… src [src]… [user@]host::dest
有關這個指令的作用,我們在前面已經介紹過了,就是把本地的檔案同步到遠端伺服器上。
具體使用方法,如下:
rsync -avz /root/www/* [email protected]::www –password-file=/etc/rsyncd.password
這條指令的作用是把/root/www目錄下的所有檔案同步到192.168.199.247伺服器的www子產品下。
如果要把/root/www/ilannidir目錄本身同步到192.168.199.247伺服器的www子產品下的話,指令如下:
rsync -azv /root/www/ilannidir [email protected]::www –password-file=/etc/rsyncd.password
或者:
通過上圖,我們可以看到本地确實已經把檔案與目錄同步到rsync伺服器上了。
要把rsync伺服器192.168.199.247的檔案拉取到rsync用戶端192.168.199.248上,我們需要使用到rsync幫助指令中的第六個指令,如下:
rsync [option]… [user@]host::src [dest]
有關這個指令的作用,我們在前面已經介紹過了,就是把遠端機器的檔案同步到本地。
rsync -avz [email protected]::www –password-file=/etc/rsyncd.password /root/www/
這條指令的作用是把192.168.199.247伺服器的www子產品下所有檔案同步到本機的/root/www/目錄下。