同步利器rsync

·rsync全稱remote sync,是Unix/Linux一款優秀的複製工具,能夠實現cp和scp的功能,可是rsync在實現跨主機複製時,並無加密功能,因此在遠程複製時,須要ssh來承載rsync,可是rsync比起cp和scp來,有一個很顯著個特性,那就是快,這個快並非說在複製過程當中的傳輸速率高,而是rsync在複製的過程當中,會比較源文件和目標文件的特徵碼,若是特徵碼一致,就不復制.
mysql

·rsync有4中工做模式:linux

第一種:shell模式,也稱做本地模式,在本地複製文件的.web

第二種:遠程shell模式,使用ssh(rsh)協議進行鏈接.sql

第三種:列表模式,其工做模式相似ls,僅列出源內容shell

第四種:服務器模式,esync能夠工做爲守護進程,可以接受客戶端的數據傳輸請求,直接使用tcp協議進行鏈接,並監聽在873端口vim

·遠程shell模式和服務器模式的區別:bash

遠程shell模式 服務器模式

rsync使用遠程shell模式傳輸時:服務器

1.源路徑或目的路徑的主機名後面包含一個冒號分隔符.網絡

2.鏈接遠程主機時,不須要啓動服務,不須要配置文件.ssh

3.鏈接遠程主機時使用ssh做爲傳輸工具

rsync使用服務器模式傳輸時:

1.源路徑或目的路徑的主機名後面包含兩個冒號分,或使用rsync://URL

2.鏈接遠程主機時,需驗證身份,需rsync的配置文件,以及目標文件和源文件的讀寫權限,而後啓動一個服務進程,

3.鏈接遠程主機時使用tcp協議並監聽在873端口

不要把服務器和服務器模式混淆了,服務器模式必定有服務器,有服務器的不必定就的服務器模式,遠程shell也有服務器,但不是服務器模式.

·rsync命令選項:

-n,--dry-run   : 僅僅測試,並不真正的執行
-v,--verbose   : 詳細輸出模式
-q,--quiet     : 靜默模式
-c,--checksum  : 開啓校驗功能,強制對文件傳輸進行校驗
-r,--recursive : 遞歸複製,通常只有複製目錄時纔有用
-a,--archives  : 歸檔,保留文件的原有屬性,包括擴展屬性,訪問控制列表等
-p,--perms     :  保留文件的權限
-t,--times     : 保留文件的時間戳
-l,--links     :保留文件的符號連接
-g,--group     : 保留文件的屬組
-o,--owner     : 保留文件的屬主
-D,--devices   :保留設備文件
-rptlgo        : 組合起來至關於-a
-e ssh(rsh)    : 表示使用ssh協議做承載
-z             : 基於網絡傳輸,使用對文件壓縮後傳輸
--progress     :顯示進度條
--stats        : 顯示如何執行壓縮和傳輸

·注意:

rsync命令使用中,若是源參數的末尾有斜線,就會複製指定目錄內的內容,而不復制目錄自己,沒有斜線,則會複製目錄自己,目標參數末尾的斜線沒有做用,以下例子:

[root@www tmp]# rm -rf test/
[root@www tmp]# mkdir test
[root@www tmp]# rsync -r etc test/    #這裏的複製是不加斜線的,爲了和下面作對比,會複製目錄自己
[root@www tmp]# cd test/
[root@www test]# ls
etc
-------------------------------------------------------------------------------------
[root@www tmp]#rm -rf test/
[root@www tmp]# mkdir test
[root@www tmp]# rsync -r etc/ test/   #這裏的複製是加斜線的,爲了和上面的對比,僅複製目錄內的內容
[root@www tmp]# cd test/
[root@www test]# ls
abrt                     fonts             mke2fs.conf                   rpc
...
fcoe                     makedev.d         request-key.d                 yum.repos.d
...

# rsync -r /mydata/data /backups/ : 會把目錄data直接同步至/backups目錄中
# rsync -r /mydata/data/ /backups/: 會把目錄data/中的內容的同步至/backups目錄中


示例:

1.本地模式

[root@www ~]# cp -r /etc /tmp/              #準備測試數據
[root@www tmp]# mkdir test                  #同上
[root@www tmp]# rsync etc/passwd test/ -n   #測試可否同步
[root@www tmp]# rsync etc/passwd test/      #執行同步
[root@www tmp]# ls test/                    #查看是否同步過去了
passwd
[root@www tmp]# rsync etc/passwd test/ -nv   #查看顯示的詳細信息
passwd
sent 30 bytes  received 15 bytes  90.00 bytes/sec
total size is 2337  speedup is 51.93 (DRY RUN)

2.shell模式:把 172.16.21.2的文件推送到172.16.21.1服務器上去

[root@www test]# rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp  #注意格式
####rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp --progress  ##顯示每一個文件的傳輸進度的
The authenticity of host '172.16.21.1 (172.16.21.1)' can't be established.
RSA key fingerprint is 15:03:48:51:95:07:ac:2b:1d:c7:0e:e6:e1:43:be:6d.
Are you sure you want to continue connecting (yes/no)? yrs
Please type 'yes' or 'no': yes
Warning: Permanently added '172.16.21.1' (RSA) to the list of known hosts.
root@172.16.21.1's password:
--------------------------------------------------------------------------
到172.16.21.1服務器上去查看
[root@www ~]# ls /tmp           #推送過來了
etc  ks-script-j1sUcU ...

3.shell模式:拉取服務器的內容到本地

[root@www test]# rsync -e ssh -r  root@172.16.21.1:/etc/pam.d ./
root@172.16.21.1's password:
[root@www test]# ls pam.d/             #同步到本地了
atd                  gdm-fingerprint    remote             system-auth-ac
...
eject                polkit-1           su                 vsftpd.mysql
...

服務器模式:

服務器端:192.168.112.136

客戶端:192.168.112.134

vim /etc/xinetd.d/rsyn

service rsync
{
        disable = no    #這裏改爲no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
uid=nobody                  #使用哪一個用戶運行該程序
gid=nobody                  #使用哪一個組運行該程序
use chroot=no
max connections=10          #這裏的複製大可能是IO操做,因此10也算高的了
strict modes =yes
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log

[test1]
path=/tmp/web
ignore errors = yes
read only =no
write only = no
host allow = *
uid = root
gid = root

注意防火牆和SElinux的問題.

能夠把線上的web當成服務器端,要發佈新內容的時候,先把內容寫到客戶端,而後就能夠同步到服務器端了.

rsync -av --progress web/ 192.168.112.136::test1

相關文章
相關標籤/搜索