這幾天剛好有空就打算開始學習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是什么。
rsync(remote synchronize)是Liunx/Unix下的一個遠程數據同步工具。它可通過LAN/WAN快速同步多台主機間的文件和目錄,並適當利用rsync算法(差分編碼)以減少數據的傳輸。
rsync算法並不是每一次都整份傳輸,而是只傳輸兩個文件的不同部分,因此其傳輸速度相當快。
除此之外,rsync可拷貝、顯示目錄屬性,以及拷貝文件,並可選擇性的壓縮以及遞歸拷貝。
二、rsync的工作原理
1、客戶端構造FileList,FileList包含了需要與服務器同步的所有文件信息對name->id(id用來唯一表示文件例如MD5)。
2、客戶端將FileList發送到服務器。
3、服務器上rsync處理客戶端發過來的FileList,構建新的NewFileList。其中根據MD5值比較,刪除服務器上已經存在的文件信息對,只保留服務器上不存在或變化的文件。
4、客戶端得到服務器發送過來的NewFileList,然后把NewFileList中的文件重新傳輸到服務器。
三、rsync優點
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有兩種常用的認證方式,一種是rsync-daemon方式,另外一種是ssh方式。在平時使用過程,我們使用最多的是rsync-daemon方式。
注意:在使用rsync時,服務器和客戶端都必須安裝rsync程序。
4.1 rsync-daemon認證
rsync在rsync-daemon認證方式下,默認監聽TCP的873端口。
rsync-daemon認證方式是rsync的主要認證方式,這個也是我們經常使用的認證方式。並且也只有在此種模式下,rsync才可以把密碼寫入到一個文件中。
注意:rsync-daemon認證方式,需要服務器和客戶端都安裝rsync服務,並且只需要rsync服務器端啟動rsync,同時配置rsync配置文件。客戶端啟動不啟動rsync服務,都不影響同步的正常進行。
4.2 ssh認證
rsync在ssh認證方式下,可通過系統用戶進行認證,即在rsync上通過ssh隧道進行傳輸,類似於scp工具。此時同步操作不在局限於rsync中定義的同步文件夾。
注意:ssh認證方式,不需要服務器和客戶端配置rsync配置文件,只需要雙方都安裝rsync服務,並且也不需要雙方啟動rsync。
若rsync服務端SSH為標准端口,此時rsync使用方式如下:
rsync -avz /root/test root@192.168.199.248:/root/
若rsync服務端SSH為非標准端口,可通過rsync的-e參數進行端口指定。使用方式如下:
rsync -avz /root/test -e 'ssh -p1234' root@192.168.199.248:/root/
五、安裝rsync
安裝rsync,我們可以分為兩種方式:源碼方式安裝和RPM方式安裝。
注意:rsync軟件無論是服務器端還是客戶端都是同一個軟件包。
下面我們就一一講解,這兩種方式的安裝方法。
5.1 源碼方式安裝
源碼方式安裝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
5.2 RPM方式安裝
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文件。
在centos下rsync默認以xinetd方式運行rsync服務。所以RPM方式安裝的話rsync,我們只需啟動xinet服務即可。
但是在啟動xinetd服務之前,我們還需要配置文件/etc/xinetd.d/rsync,如下:
vi /etc/xinetd.d/rsync
配置完畢后,我們還需要安裝xinetd軟件包,否則無法啟動xinetd服務。如下:
yum -y install xinetd
/etc/init.d/xinetd start
chkconfig xinetd on
netstat -tunlp |grep 873
六、rsync命令參數詳解
rsync安裝完畢后,我們來查看下rsync命令的幫助,如下:
rsync --help
6.1 rsync幾個重要參數
我們先在此大致介紹下經常使用的幾個參數:-v,-a,-z,有關這些參數的具體說明詳見這篇文章《爛泥:【轉】rsync命令參數詳解》。
-v, --verbose詳細模式輸出。
-a, --archive歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性不變。
-z, --compress對備份的文件在傳輸時進行壓縮處理。
--delete:刪除那些DST中存在而在SRC中沒有的文件。
6.2 rsync六種工作模式
除此上述幾個參數之外,我們還注意到上圖中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命令,目的是把服務器上的文件拉取到本地。
注意:無論是推送和拉取,rsync命令都是在客戶端執行,只是命令的格式不同而已。
1) rsync [OPTION]... SRC [SRC]... DEST
同步本地文件,從一個目錄同步到另外一個目錄。如:rsync -avz /data /backup,表示把本地/data目錄下的文件同步到本地/backup目錄下。
2) rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
使用一個遠程shell程序(如rsh、ssh)來實現把本地的文件同步到遠程機器上。此種方式屬於推送方式。如:rsync -avz /data test@192.168.199.247:/backup,表示把本地/data目錄下的文件同步到服務器192.168.199.247的/backup目錄下。
3) rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
把本地的文件同步到遠程服務器上,其中DEST表示的是rsync服務器的認證模塊名。此種方式屬於推送方式。如:rsync -avz /data test@192.168.199.247::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://test@192.168.199.247/backup,表示在本機列出服務器192.168.199.247的/backup目錄下的內容,如下:
5) rsync [OPTION]... [USER@]HOST:SRC [DEST]
把遠程機器的文件同步到本地,此種方式屬於拉取方式。如:rsync -avz test@192.168.199.247:/backup /data,表示把192.168.199.247的/backup目錄下文件同步到本地/data目錄下。
6) rsync [OPTION]... [USER@]HOST::SRC [DEST]
把遠程機器的文件同步到本地,此種方式屬於拉取方式。如:rsync -avz test@192.168.199.247::backup --password-file=/etc/rsyncd.password /data,表示把192.168.199.247的backup模塊path路徑下的文件同步到本地/data目錄下。
七、配置rsync
rsync安裝完畢后,我們就需要配置rsync。而對於rsync服務器來說,最重要和最復雜的就是它的配置了。
rsync的配置分為服務器端和客戶端,下面我們分開一一講解。
7.1 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/
ignore errors
read only = no
list = no
hosts allow = 192.168.199.0/255.255.255.0
auth users = apache
secrets file = /etc/rsyncd.password
有關rsync配置文件的詳細講解,看下篇文章《爛泥:rsync配置文件詳解》。
rsync默認是在nobody用戶下運行的,但是我們為了以后同步時不為各種權限的事情煩惱,就讓其在root用戶下運行。
配置文件創建完畢后,我們來創建密碼文件。如下:
echo "test:test">>/etc/rsyncd.password
echo "apache:apache">>/etc/rsyncd.password
cat /etc/rsyncd.password
注意:該密碼文件中的用戶和密碼可以進行自定義,同時該用戶不一定要在服務器中的系統用戶存在。
密碼文件創建完畢后,要把其權限要設置為600,否則會在以后同步時提示驗證出錯。如下:
chmod 600 /etc/rsyncd.password
一個rsync配置文件中可以包含多個認證模塊,同時一個密碼文件中也可以存放多個用戶和其對應的密碼。其中每一個認證模塊可以對應不同的客戶端。
以上兩個文件創建完畢后,我們來創建其對應的目錄並授權,如下:
mkdir /{backup,www}
chown root:root –R /backup/
chown root:root –R /www/
以上就是rsync服務器端的配置。
7.2 rsync客戶端配置
rsync客戶端配置與服務器端相比差別還是比較大的。
在客戶端安裝完畢rsync服務后,是不需要啟動rsync服務的。我們只需要在客戶端創建連接rsync服務器時,驗證碼用戶所需要的密碼文件即可。
該密碼文件中的密碼要與rsync服務器上的密碼文件中的密碼對應,並且也要與rsync服務器rsyncd.conf配置文件中的認證模塊中的用戶匹配。
當然該密碼文件不創建也是可以的,不創建的話。我們在執行rsync操作時,就需要輸入rsync的對應用戶的密碼。如下:
echo "apache">>/etc/rsyncd.password
chmod 600 /etc/rsyncd.password
注意:該密碼文件中只能存放一個用戶的密碼,並且該文件與rsync服務器端的密碼文件一樣也需要把其權限設置為600。
以上就是rsync客戶端的配置。
八、rsync的啟動與關閉
rsync服務器端與客戶端都配置完畢后,我們就可以來啟動rsync服務器,並且也可以關閉rsync服務。
8.1 啟動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
rsync --daemon
ps aux |grep rsync
netstat -tunlp |grep 873
注意:上述命令行中,只有rsync --daemon才是啟動rsync的命令。並且該命令啟動時,會默認加載/etc/rsyncd.conf文件。
所以如果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。如下:
/etc/init.d/xinetd start
以上就是rsync服務的啟動,下面我們開始介紹如何關閉rsync服務。
8.2 關閉rsync服務
要關閉rsync服務,如果是源碼方式安裝的,我們可以直接通過pkill rsync命令進行關閉。如下:
pkill rsync
如果是通過yum方式進行安裝的,我們可以通過關閉xinetd服務來達到關閉rsync服務的目的。如下:
/etc/init.d/xinetd stop
除了以上兩種方法之外,我們還可以通過比較暴力的方法關閉rsync服務。如下:
kill -9 6780
九、rsync同步實例
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,內容如下:
ifconfig eth1|grep "inet addr"|awk '{print $2}'|cut -d: -f2
mkdir www
vi /www/ilanni248
this is client 248 www.
9.1 把248文件推送到247上
要把rsync客戶端192.168.199.248文件推送到rsync服務器192.168.199.247上,我們需要使用到rsync幫助命令中的第三種命令,如下:
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
有關這個命令的作用,我們在前面已經介紹過了,就是把本地的文件同步到遠程服務器上。
具體使用方法,如下:
rsync -avz /root/www/* apache@192.168.199.247::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 apache@192.168.199.247::www --password-file=/etc/rsyncd.password
或者:
rsync -azv /root/www/ilannidir apache@192.168.199.247::www --password-file=/etc/rsyncd.password
通過上圖,我們可以看到本地確實已經把文件與目錄同步到rsync服務器上了。
9.2 把247文件拉取到248上
要把rsync服務器192.168.199.247的文件拉取到rsync客戶端192.168.199.248上,我們需要使用到rsync幫助命令中的第六個命令,如下:
rsync [OPTION]... [USER@]HOST::SRC [DEST]
有關這個命令的作用,我們在前面已經介紹過了,就是把遠程機器的文件同步到本地。
具體使用方法,如下:
rsync -avz apache@192.168.199.247::www --password-file=/etc/rsyncd.password /root/www/
這條命令的作用是把192.168.199.247服務器的www模塊下所有文件同步到本機的/root/www/目錄下。