rsync學習筆記


1.1 Rsync介紹

1.1.1 什么是Rsync?

Rsync是一款開源的,快速的,多功能的,可實現全量及增量的本地或遠程數據同步備份的優秀工具。Rsync軟件適用於unix/linux/windows等多種操作系統平台。

1.1.2 Rsync簡介

  • Rsync英文全稱Remote synchronization,從軟件的名稱就可以看出來,Rsync具有可使本地和遠程兩台主機之間的數據快速復制同步鏡像,遠程備份的功能,這個功能類似ssh帶的scp命令,但又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,Rsync還可以在本地主機的不同分區或目錄之間全量及增量的復制數據,這又類似cp命令,但同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。

小提示:利用Rsync還可以實現刪除文件何目錄的功能,這又相當於rm命令!

  • 一個rsync相當於scp,cp,rm,但是還優於他們每一個命令。

  • 在同步備份數據時,默認情況下,Rsync通過其獨特的“quick check”算法,它僅同步大小或者最后修改時間發生變化的文件或目錄,當然也可根據權限,屬主等屬性的變化同步,但需要指定相應的參數,甚至可以實現只同步一個文件里有變化的內容部分,所以,可以實現快速的同步備份數據。

提示:傳統的cp,scp工具拷貝每次均為完整的拷貝,而rsync除了可以完整拷貝外,還具備增量拷貝的功能,因此,從同步數據的性能及效率上,Rsync工具更勝一籌。

  • CentOS5,rsync2.x比對方法,把所有的文件比對一遍,然后進行同步。

  • CentOS6,rsync3.x比對方法,一邊比對差異,一邊對差異的部分進行同步。

1.3 Rsync的特性

Rsync的特性如下:

  • 支持拷貝特殊文件如鏈接文件,設備等
  • 可以有排除(tar?find?)指定文件或目錄同步的功能,相當於打包命令tar的排除功能
  • 可以做到保持原文件或目錄的權限,時間,軟硬鏈接,屬主,組等屬性均不改變-p
  • 可以實現增量同步,既只同步發生變化的數據,因此數據傳輸效率很高(tar-N)
  • 可以使用rcp,rsh,ssh等方式來配合傳輸文件(rsync本身不對數據加密)
  • 可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)
  • 支持匿名的或認證(無需系統用戶)的進程模式傳輸,可實現方便安全的進行數據備份及鏡像

1.1.4 Rsync的企業工作場景說明

1.1.4.1 兩台服務器之間數據同步(定時任務+備份數據)即crond+rsync

 1.1.4.2 實時同步(解決存儲服務器等的單點問題)

利用rsync結合inotify的功能做實時的數據同步,根據存儲服務器上目錄的變化,把變化的數據通過inotify或sersync結合rsync命令實時同步到備份服務器,還可以通過drbd方案以及雙寫的方案實現雙機數據同步。

1.2 Rsync的工作方式

一般來說,Rsync大致使用三種主要的傳輸數據的方式。分別為:

  • 單個主機本地之間的數據傳輸(此時類似於cp命令的功能)
  • 借助rcp,ssh等通道來傳輸數據(此時類似於scp命令的功能)
  • 以守護進程(socket)的方式傳輸數據(這個是rsync自身的重要功能)

以上的幾種rsync的工作方式,我們可以通過man rsync幫助或查看官方的手冊獲得:

NAME rsync -- a fast, versatile, remote (and local) file-copying tool SYNOPSIS Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

1.2.1 本地數據傳輸模式(local-only mode)

Rsync本地傳輸模式的語法為:
rsync [OPTION...] SRC...[DEST]
語法說明:
1)Rsync為同步的命令;
2)[OPTION]為同步時的參數選項
3)SRC為源,即待拷的分區,文件或目錄等;
4)[DEST]為目的分區,文件或目錄等;

直接本地同步:相當於cp
rsync /etc/hosts /tmp/

示例1-1 實例1:把系統的hosts文件同步到/opt目錄

[root@chen ~]# rsync /etc/hosts /opt [root@chen ~]# cat /opt/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.14.200 mirrors.aliyum.com 192.168.197.133 www.test.com

實例1-2 實例2:把opt目錄拷貝到/mnt下

[root@chen ~]# rsync -avz /opt /mnt #相當於cp -ap /opt /mnt sending incremental file list opt/ opt/hosts opt/rh/ sent 224 bytes received 39 bytes 526.00 bytes/sec total size is 221 speedup is 0.84 [root@chen ~]# ll /mnt total 8 drwxr-xr-x. 3 root root 4096 Mar 5 19:54 opt -rw-r--r--. 1 root root 5 Dec 25 11:19 test.txt

刪除功能,相當於rm命令

[root@chen ~]# mkdir /old [root@chen ~]# rsync -avz --delete /old/ /tmp/ sending incremental file list ./ deleting pear/temp/ deleting pear/ deleting old/ deleting .ICE-unix/ deleting user_passwd sent 29 bytes received 15 bytes 88.00 bytes/sec total size is 0 speedup is 0.00 [root@chen ~]# ll /tmp/ total 0 

1.2.2 rsync 命令常用參數選項說明:

-v,--verbose 詳細模式輸出,傳輸時的進度等信息
-z,--compress 傳輸時進行壓縮以提高傳輸效率,--compress-level=NUM可按級別壓縮。
-a,--archive 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rtopgD1(字母1)
==================================

-r,--recursive 對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸,注意是小寫r
-t,--times 保持文件時間信息
-o,--owner 保持文件屬主信息
-p,--perms 保持文件權限
-g,--group 保持文件屬組信息
-P,--progress 顯示同步的過程及傳輸時的進度等信息
-D,--devices 保持設備文件信息
-l,--links 保留軟鏈接
-e,--rsh=COMMAND 使用的信道協議(remote shell),指定替代rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不需要傳輸的文件模式(和tar參數一樣)
--bwlimit=RATE limit socket I/O bandwidth
--delete 讓源目錄SRC和目標目錄數據DST一致

1.2.3 案例:某DBA做數據同步,帶寬占滿,導致用戶無法訪問網站。

rsync -avz dbfile 10.0.0.41:/backup #沒有給帶寬做限制 rsync -avz --bwlimit=100 dbfile 172.16.1.41:/backup #限定了帶寬

1.2.4 保持同步目錄及文件屬性

這里的-avzP 相當於-vzrtopgDIP(還多了DI功能),生產環境常用的參數選項為-avzP或-vzrtopgP如果是放入腳本中,也可以把-v何-P去掉。這里的--progress可以用-P代替。

特別說明:以上參數為企業生產環境常用參數,對於初學者來說掌握上面內容已足夠。

生產參數:-avz或者用-vzrtopg

1.2.5 使用rsync在本地備份傳輸數據

實例1:測試本地rsync同步,rsync -avz /opt /tmp

[root@chen ~]# cd /opt #進入目錄 [root@chen opt]# mkdir chensiqi #創建目錄 [root@chen opt]# touch chensiqi/test.txt #創建文件 [root@chen opt]# chmod -R 700 chensiqi #遞歸授權700 [root@chen opt]# ls -l #查看目錄權限700 total 4 drwx------. 2 root root 4096 Mar 5 22:18 chensiqi [root@chen opt]# ls -l chensiqi/ #查看文件權限700 total 0 -rwx------. 1 root root 0 Mar 5 22:18 test.txt [root@chen opt]# rsync -avz /opt/ /tmp/ #通過rsync執行本地同步操作 sending incremental file list ./ chensiqi/ chensiqi/test.txt sent 116 bytes received 38 bytes 308.00 bytes/sec total size is 0 speedup is 0.00 [root@chen opt]# tree /tmp #目錄文件完全同步過去了 /tmp `-- chensiqi `-- test.txt 1 directory, 1 file [root@chen opt]# ll /tmp/ #文件夾權限700,保持一致 total 4 drwx------. 2 root root 4096 Mar 5 22:18 chensiqi [root@chen opt]# ll /tmp/chensiqi/ #文件權限700保持一致 total 0 -rwx------. 1 root root 0 Mar 5 22:18 test.txt

上例演示了將本地/opt目錄下的文件(不包含opt本身)同步到/tmp下其中-avz就是保持目錄或文件的相關屬性的參數

特別提示:請注意以下兩條命令的差別:
1)rsync -avz /opt/ /tmp/
2)rsync -avz /opt /tmp/
1)中/opt/的意思是,僅把/opt/目錄里面的內容同步過來,opt目錄本身並不同步;而后者2)中/opt表示把opt本身及其內部內容全都同步到/tmp下,僅一個/(斜線之差),意義大不相同,請同學們注意使用的差別。
2)在后邊要講的通過遠程shell進行數據傳輸的內容也會有類似的問題,請牢記。

當本地的不同目錄之間需要數據傳輸,特別是經常需要增量傳輸時,這個案例命令可以替代cp等命令,為你提升拷貝的效率。

實例2:將/etc下全部內容(包括/etc目錄本身)備份到/tmp目錄下

[root@chen ~]# rsync -avz /etc /tmp/ sending incremental file list etc/ etc/.pwd.lock etc/DIR_COLORS etc/DIR_COLORS.256color etc/DIR_COLORS.lightbgcolor etc/adjtime etc/aliases etc/aliases.db etc/anacrontab 下面的輸出內容省略.... [root@chen ~]# ll /tmp #同步完成 total 4 drwxr-xr-x. 79 root root 4096 Mar 5 19:25 etc

第一次運行命令會由於需要掃描並同步所有文件及目錄,因此時間會長一些。如果再次備份就會進行快速對比,忽略通過的文件,速度更快,如下文:

[root@chen ~]# rsync -avz /etc /tmp/ sending incremental file list sent 39813 bytes received 196 bytes 80018.00 bytes/sec total size is 27542875 speedup is 688.42

我們可以看到立刻就同步完成,要傳輸的數據也很少了。因為rsync會比對所有文件和目錄,僅同步有變化(內容,修改時間等各種屬性)的文件或目錄。如果換做cp命令,那么還會重新執行完整的拷貝,浪費系統資源和時間。
當然本地備份同步不僅僅備份目錄,還可以同步單個文件,設備等,相信聰明的你都想到了,在此就不多費筆墨。

特別提示:
在傳輸數據時,rsync命令也需要有對同步的目錄擁有權限如此才可以實現正常傳輸數據。

1.3 借助ssh通道在不同主機之間傳輸數據

示例1:推送:將當前主機內容推送到遠程主機

rsync -avzP -e 'ssh -p 22'/etc/ root@192.168.197.129:/tmp/

[root@chensiqi ~]# rsync -avzP -e 'ssh -p 22' /etc/ root@192.168.197.129:/tmp/ #開始同步 忽略以上內容.... yum/version-groups.conf 444 100% 1.14kB/s 0:00:00 (xfer#985, to-check=6/1558) yum/pluginconf.d/ yum/pluginconf.d/fastestmirror.conf 279 100% 0.72kB/s 0:00:00 (xfer#986, to-check=2/1558) yum/pluginconf.d/security.conf 17 100% 0.04kB/s 0:00:00 (xfer#987, to-check=1/1558) yum/protected.d/ yum/vars/ yum/vars/infra 6 100% 0.02kB/s 0:00:00 (xfer#988, to-check=0/1558) sent 9847758 bytes received 20677 bytes 1518220.77 bytes/sec total size is 27542879 speedup is 2.79 #命令說明 -e 'ssh -p 22' 表示以ssh的方式通過22端口推送,如果不寫默認22端口 [root@chensiqi ~]# ssh root@chensiqi2 "ls -l /tmp" #查看同步結果 root@chensiqi2's password: total 1668 drwxr-xr-x. 5 root root 4096 Dec 24 09:26 ConsoleKit -rw-r--r--. 1 root root 4439 Apr 12 2016 DIR_COLORS -rw-r--r--. 1 root root 5139 Apr 12 2016 DIR_COLORS.256color -rw-r--r--. 1 root root 4113 Apr 12 2016 DIR_COLORS.lightbgcolor drwxr-xr-x. 3 root root 4096 May 12 2016 NetworkManager drwxr-xr-x. 4 root root 4096 Dec 24 09:26 X11 以下省略若干內容... #命令說明: ssh root@chensiqi2的意思是,以ssh的方式進行連接,通過root賬戶來登錄主機名為chensiqi2的這台主機。 ssh root@chensiqi2 + 命令,可以將命令的結果反饋回來。 chensiqi2是當前主機下的一個hosts影射,/etc/hosts里面添加:IP地址 主機名 即作為映射對應。當輸入主機名時,系統自動通過hosts解析出對應IP地址。例如ssh root@chensiqi2 <==> ssh root@192.168.197.129

示例2:將遠程主機內容拉取到當前主機

rsync -avzP -e 'ssh -p 22' root@chensiqi2:/opt /tmp

關鍵語法說明:
1)-avz相當於-vzrtopgDI,表示同步時文件和目錄屬性不變。
2)-P顯示同步的過程,可以用--progress替換。
3)-e ‘ssh -p 22’表示通過ssh通道傳輸數據,可省略
4)root@chensiqi2:/opt 遠程主機系統用戶,地址,路徑
5)/tmp本地的路徑

實踐演示:通過root用戶從192.168.197.129的/opt目錄(包含目錄本身)把數據拉到本地的/tmp目錄下

[root@chensiqi ~]# rsync -avzP -e 'ssh -p 22' root@192.168.197.129:/opt /tmp/ root@192.168.197.129's password: receiving incremental file list opt/ opt/chensiqi 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) opt/rh/ sent 38 bytes received 122 bytes 29.09 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi ~]# ll /tmp total 4 drwxr-xr-x. 3 root root 4096 Mar 6 2017 opt

也可以去掉 -e ‘ssh -p 22’(默認22端口)

[root@chensiqi ~]# rsync -avzP root@192.168.197.129:/opt /tmp/ root@192.168.197.129's password: receiving incremental file list sent 13 bytes received 80 bytes 37.20 bytes/sec total size is 0 speedup is 0.00

也可以通過映射好的主機名:(/etc/hosts)

[root@chensiqi ~]# tail -1 /etc/hosts 192.168.197.129 chensiqi2 [root@chensiqi ~]# rsync -avzP root@chensiqi2:/opt /tmp/ root@chensiqi2's password: Permission denied, please try again. root@chensiqi2's password: receiving incremental file list opt/ opt/chensiqi 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) opt/rh/ sent 38 bytes received 122 bytes 21.33 bytes/sec total size is 0 speedup is 0.00

1.4 以守護進程(socket)的方式傳輸數據(重點)

1.5 開始部署rsync服務--Rsync服務器端A-Server操作過程:

1.5.1 配置rsyncd.conf

首先確認軟件是否安裝:

[root@chensiqi2 ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64

然后創建rsyncd.conf文件,並添加如下內容(文件默認不存在)

[root@chensiqi2 backup]# cat /etc/rsyncd.conf
#rsync_config_____start #created by chensiqi 13:40 2017-3-6 ##blog:http://www.cnblogs.com/chensiqiqi/ ##rsyncd.conf start##  # 用戶 uid = rsync # 組 gid = rsync # 程序安全設置 use chroot = no # 客戶端連接數 max connections = 200 # 超時時間 timeout = 300 # 進程號文件位置 pid file = /var/run/rsyncd.pid # 進程鎖 lock file = /var/run/rsync.lock # 日志文件位置 log file = /var/log/rsyncd.log ########################################## [backup] # 使用目錄 path = /backup/ # 有錯誤時忽略 ignore errors # 可讀可寫(true或false) read only = false # 阻止遠程列表(不讓通過遠程方式看服務端有啥) list=false # 允許IP hosts allow = 192.168.197.0/24 # 禁止IP hosts deny = 0.0.0.0/32 # 虛擬用戶 auth users = rsync_backup # 存放用戶和密碼的文件 secrets file = /etc/rsync.password  ##rsync_config______end##

1.5.2 創建共享目錄及添加rsync程序用戶

[root@chensiqi2 ~]# useradd -M -s /sbin/nologin rsync #創建rsync用戶 [root@chensiqi2 ~]# cat /etc/passwd | grep rsync rsync:x:500:500::/home/rsync:/sbin/nologin [root@chensiqi2 ~]# cat /etc/group | grep rsync rsync:x:500: [root@chensiqi2 ~]# mkdir /backup #創建共享目錄

1.5.3 啟動服務:rsync --daemon

[root@chensiqi2 ~]# rsync --daemon [root@chensiqi2 ~]# netstat -antup | grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5163/rsync tcp 0 0 :::873 :::* LISTEN 5163/rsync 

1.5.4 將A-Server上的/backup文件夾更改屬主rsync

[root@chensiqi2 ~]# chown -R rsync /backup [root@chensiqi2 ~]# ls -ld /backup drwxr-xr-x. 2 rsync root 4096 3月 6 22:19 /backup

1.5.5 創建rsync虛擬賬戶名和密碼

[root@chensiqi2 ~]# echo "rsync_backup:123456" >/etc/rsync.password [root@chensiqi2 ~]# cat /etc/rsync.password rsync_backup:123456

1.5.6 將賬戶密碼文件的權限設置為600(必須否則失敗)

[root@chensiqi2 ~]# chmod 600 /etc/rsync.password [root@chensiqi2 ~]# ll /etc/rsync.password -rw-------. 1 root root 20 3月 6 22:27 /etc/rsync.password

1.5.7 加入開機啟動

[root@chensiqi2 ~]# echo "rsync --daemon" >> /etc/rc.local [root@chensiqi2 ~]# tail -1 /etc/rc.local rsync --daemon

注意:
當然還可以用chkconfig rsync on命令,但是必須要編寫適合chkconfig操作的腳本才行。

如何重啟rsync服務?
pkill rsync #關閉rsync服務
rsync --daemon #啟動rsync服務

至此rsync服務器端A-server配置完畢

1.6 開始部署rsync服務--Rsync客戶端B-Server

1.6.1 只需要創建密碼文件

[root@chensiqi ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64 [root@chensiqi ~]# echo "123456" > /etc/rsync.password

1.6.2 將密碼文件的權限設置為600(必須否則失敗)

[root@chensiqi ~]# chmod 600 /etc/rsync.password [root@chensiqi ~]# ls -ld /etc/rsync.password -rw-------. 1 root root 7 Mar 6 01:42 /etc/rsync.password

至此rsync客戶端B-Server配置完畢。

1.6.5 Rsync同步測試

1.6.5.1 推送測試1:將客戶端指定目錄內容推送到服務器端rsync指定目錄下。

測試命令:

rsync -avz /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password 命令說明: -avz:保持穩健各項屬性不變,-v顯示同步信息 -P顯示具體同步過程 /backup/:要推送的內容所在目錄 rsync_backup:服務器端rsync服務的同步的用戶名(非Linux用戶) 192.168.197.129:rsync服務器IP地址 backup:rsync服務器配置文件里的模塊名 --password-file=/etc/rsync.password:免密碼的操作,指定密碼文件位置,如果不寫,則會要求用戶交互式輸入密碼。(如果想掛定時任務,必須得非交互式)

演示:

[root@chensiqi backup]# ls opt.tar.gz [root@chensiqi backup]# rsync -avzP /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password #同步測試 sending incremental file list ./ opt.tar.gz 166 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2) sent 258 bytes received 30 bytes 576.00 bytes/sec total size is 166 speedup is 0.58 [root@chensiqi backup]# ssh root@chensiqi2 "ls -l /backup" #查看同步結果 root@chensiqi2's password: total 4 -rw-r--r--. 1 rsync rsync 166 Mar 6 21:02 opt.tar.gz

1.6.5.2 推送測試2:將客戶端任意目錄推送到rsync服務器端指定目錄下

測試命令:

rsync -avzP /tmp/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password

演示過程:

[root@chensiqi backup]# rsync -avzP /tmp/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password sending incremental file list ./ opt.tar.gz2017-03-06 162 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/8) backup/ opt/ opt/chensiqi 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=1/8) opt/rh/ sent 441 bytes received 62 bytes 1006.00 bytes/sec total size is 162 speedup is 0.32 [root@chensiqi backup]# ssh root@chensiqi2 "ls /backup" #看一眼結果 root@chensiqi2's password: backup opt opt.tar.gz2017-03-06

1.6.5.3 拉取測試1:將rsync服務器端指定目錄全部內容同步到客戶端

測試命令:

rsync -avzP rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password 命令說明: 和推送相比,只是兩個目錄換了個位置。

演示過程:

[root@chensiqi backup]# ls [root@chensiqi backup]# rsync -avzP rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password receiving incremental file list ./ a 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3) opt.tar.gz 166 100% 162.11kB/s 0:00:00 (xfer#2, to-check=0/3) sent 105 bytes received 389 bytes 988.00 bytes/sec total size is 166 speedup is 0.34 [root@chensiqi backup]# ls a opt.tar.gz

1.6.5.4 拉取測試2:將rsync服務器端指定目錄下的指定內容同步到客戶端

測試命令:

rsync -avzP rsync_backup@192.168.197.129::backup/opt.tar.gz /backup/ --password-file=/etc/rsync.password

演示過程:

[root@chensiqi backup]# ls [root@chensiqi backup]# rsync -avzP rsync_backup@192.168.197.129::backup/opt.tar.gz /backup/ --password-file=/etc/rsync.password receiving incremental file list opt.tar.gz 166 100% 162.11kB/s 0:00:00 (xfer#1, to-check=0/1) sent 83 bytes received 328 bytes 822.00 bytes/sec total size is 166 speedup is 0.40 [root@chensiqi backup]# ls opt.tar.gz

1.6.5.5 拉取測試3: 將rsync服務器端指定目錄下的全部內容排除某目錄或文件后,同步到客戶端

環境准備
我們在rsync服務器端指定目錄下創建如下文件結構

[root@chensiqi2 backup]# ls a b c chen d e [root@chensiqi2 backup]# ls chen 1 2 3 4 5 說明: a,b,c,d,e為文件,chen是目錄。目錄下有1,2,3,4,5文件

方法一:通過命令行實現排除

測試命令:

rsync -avz --exclude=a --exclude=chen/3 --exclude=chen/4 rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password 命令說明: --exlude=文件名 :排除的文件

演示過程:

[root@chensiqi backup]# rsync -avz --exclude=a --exclude=chen/3 --exclude=chen/4 rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password receiving incremental file list ./ .pwd.lock b c d e .ICE-unix/ chen/ chen/1 chen/2 chen/5 sent 258 bytes received 558 bytes 1632.00 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# ls b c chen d e [root@chensiqi backup]# ls chen 1 2 5 

方法二:通過列表文件實現排除

創建排除列表文件

[root@chensiqi backup]# cat /root/exclude.txt 1 3 5 b e

測試命令:

rsync -avz --exclude-from=/root/exclude.txt rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password 命令說明: --exclude-from=文件的絕對路徑 :引用一個排除列表,列表里只需要輸入排除的文件名即可

演示過程:

[root@chensiqi backup]# cat /root/exclude.txt 1 3 5 b e [root@chensiqi backup]# rsync -avz --exclude-from=/root/exclude.txt rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password receiving incremental file list ./ a c d chen/ chen/2 chen/4 sent 202 bytes received 434 bytes 1272.00 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# ls a c chen d [root@chensiqi backup]# ls chen 2 4

1.6.5.6 rsync同步拉取測試:讓rsync客戶端指定目錄內容始終和rsync服務器共享目錄內容保持一致

1)和rsync服務器目錄內容始終保持一致

始終保持一致的意思是說,當Rsync服務器共享目錄增加文件,那么客戶端指定目錄也增加,服務器端共享目錄刪除文件,那么客戶端指定目錄也刪除文件

測試命令:

rsync -avz --delete rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password 命令說明: --delete :表示同步增,刪,改(文件內容出現變化,也會同步的)

演示過程:

[root@chensiqi backup]# rsync -avz --delete rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #進行第一次同步 receiving incremental file list ./ a b c d e chen/ chen/1 chen/2 chen/3 chen/4 chen/5 sent 262 bytes received 663 bytes 1850.00 bytes/sec total size is 8 speedup is 0.01 [root@chensiqi backup]# ls #查看同步后的文件 a b c chen d e [root@chensiqi backup]# ssh root@chensiqi2 "rm -rf /backup/a" #遠程刪除Rsync服務器共享目錄下的文件a root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #進行第二次同步 receiving incremental file list deleting a #可以看到同步過程中進行了一次delete同步 ./ sent 69 bytes received 278 bytes 694.00 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# ls #查看同步結果,文件a消失了。 b c chen d e [root@chensiqi backup]# ssh root@chensiqi2 "echo 1111 >/backup/chensiqi" #遠程在rsync服務器端共享目錄下創建一個有內容的文件chensiqi root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #進行第三次同步 receiving incremental file list ./ chensiqi #新增了chensiqi文件 sent 88 bytes received 337 bytes 850.00 bytes/sec total size is 5 speedup is 0.01 [root@chensiqi backup]# cat chensiqi #查看同步后的文件內容 1111 [root@chensiqi backup]# ssh root@chensiqi2 "echo 222 >>/backup/chensiqi" #遠程對rsync服務器端共享目錄下的chensiqi文件增加一行內容。 root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #進行第四次同步 receiving incremental file list chensiqi #修改后的文件也被同步了 sent 91 bytes received 338 bytes 858.00 bytes/sec total size is 9 speedup is 0.02 [root@chensiqi backup]# cat chensiqi #查看同步后文件內容 1111 222

2)排除某文件后,再和服務器進行同步

測試命令:

rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password 命令說明: --exclude=c:同步時不考慮文件名為c的文件

演示過程:

[root@chensiqi backup]# ls #查看目錄下內容 b c chen chensiqi d e [root@chensiqi backup]# rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #第一次同步 receiving incremental file list sent 73 bytes received 283 bytes 237.33 bytes/sec total size is 9 speedup is 0.03 [root@chensiqi backup]# ssh root@chensiqi2 "rm -rf /backup/c" #遠程刪除服務器端c文件 root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #第二次同步 receiving incremental file list ./ #沒有同步到任何東西 sent 76 bytes received 286 bytes 241.33 bytes/sec total size is 9 speedup is 0.02 [root@chensiqi backup]# ssh root@chensiqi2 "touch /backup/c" #遠程創建c文件 root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #第三次同步 receiving incremental file list ./ #還是沒有同步到任何東西 sent 76 bytes received 286 bytes 241.33 bytes/sec total size is 9 speedup is 0.02 [root@chensiqi backup]# ssh root@chensiqi2 "echo 111 >>/backup/c" #遠程修改c文件 root@chensiqi2's password: [root@chensiqi backup]# rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password #第四次同步 receiving incremental file list #仍舊沒有同步到任何東西 sent 73 bytes received 283 bytes 712.00 bytes/sec total size is 9 speedup is 0.03

1.6.5.7 rsync同步推送測試:讓Rsync服務器端共享目錄始終和rsync客戶端指定目錄內容一致。

1)和rsync客戶端目錄內容始終保持一致

始終保持一致的意思是說,當Rsync客戶端指定目錄增加文件,那么服務器端共享目錄也增加,客戶端指定目錄刪除文件,那么服務器端共享目錄也刪除文件

測試命令:

rsync -avz --delete /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password 命令說明: --delete :表示同步增,刪,改(文件內容出現變化,也會同步的) 與同步拉取相比:只是客戶端目錄放在了服務器端的前邊。

演示過程:

[root@chensiqi backup]# ls a b c chen d e [root@chensiqi backup]# rsync -avz --delete /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password #第一次同步 sending incremental file list ./ a b c d e chen/ chen/1 chen/2 chen/3 chen/4 chen/5 sent 594 bytes received 206 bytes 533.33 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# rm a #客戶端刪除文件a rm: remove regular empty file `a'? y [root@chensiqi backup]# rsync -avz --delete /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password #第二次同步 sending incremental file list ./ deleting a #同步了刪除文件a的過程 sent 225 bytes received 13 bytes 476.00 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# touch a #創建文件a [root@chensiqi backup]# rsync -avz --delete /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password #第三次同步 sending incremental file list ./ a #推送了a文件到服務器端 sent 271 bytes received 32 bytes 606.00 bytes/sec total size is 0 speedup is 0.00 [root@chensiqi backup]# echo 1111 >>a #修改文件a [root@chensiqi backup]# cat a 1111 [root@chensiqi backup]# rsync -avz --delete /backup/ rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password #第四次同步 sending incremental file list a #同步了修改后的文件a到服務器端 sent 277 bytes received 29 bytes 612.00 bytes/sec total size is 5 speedup is 0.02 [root@chensiqi backup]# ssh root@chensiqi2 "cat /backup/a" #遠程查看一下服務器端共享目錄下的文件a的內容 root@chensiqi2's password: 1111

2)--exclude=文件名。排除某文件后,再和服務器進行同步

和同步拉取排除完全一致,只是目錄換個位置,在此不在多費篇幅,同學們自己測試。

1.6.6 Rsync企業應用之風險提示

特別說明:
執行--delete參數從rsync服務器端往rsync客戶端拉取數據時,一定要小心,最好不用,它比從rsync客戶端帶--delete參數往rsync服務端推送危險的多。客戶端帶--delete參數往服務端推送僅刪除服務端模塊下的數據,而前者有能力刪除rsync客戶端本地的所有數據包括跟下的所有目錄。

rsync推送企業工作場景:
1)備份 --delete 風險
本地有啥,遠端就有啥,本地沒有的遠端有也要刪除。服務器端的目錄數據可能丟失。

rsync拉取企業工作場景:
1)代碼發布,下載。--delete風險
遠端有啥,本地(客戶端)就有啥,遠端沒有的本地有也要刪除。本地的目錄數據可能丟失。

1.6.7 rsync無差異同步的生產場景應用

一般是有需要兩台服務器之間,必須要求數據一致,且時時性又不是很高的情況下,如兩台負載均衡下面web服務器之間的同步,或者高可用雙機配置之間的同步等,rsync無差異同步非常的危險,而且,有很多的替代方案,因此,生產場景沒有特殊的需求,應避免使用。切記,有很多朋友都已經有了血的教訓。

1.7 Rsync 優缺點

1.7.1 rsync優點:

1,增量備份,支持socket(daemon),集中備份(支持推拉,都是以客戶端為參照物)。
2,遠程SHELL通道模式還可以加密(SSH)傳輸,socket(daemon)需要加密傳輸,可以利用vpn服務或ipsec服務

1.7.2 rsync缺點:

1,大量小文件時候同步的時候,比對時間較長,有的時候,同步過程中,rsync進程可能會停止,僵死了。
2,同步大文件,10G這樣的大文件有時也會出問題,中斷。未完整同步前,是隱藏文件,可以通過續傳(--partial)等參數實現傳輸
3,一次性遠程拷貝可以用scp,大量小文件要打成一個包再拷貝。(重要)

1.8 排錯必備思想

  • 部署流程步驟熟練
  • rsync原理理解
  • 學會看日志,rsync命令行輸出,日志文件/var/log/rsyncd.log

1.9 Rsync守護進程服務傳輸數據排錯思路:

1.9.1 Rsync服務端排錯思路

  1. 查看rsync服務配置文件路徑是否正確,正確的默認路徑為:/etc/rsyncd.conf
  2. 查看配置文件里host allow,host deny,允許的IP網段是否是允許客戶端訪問的ip網段
  3. 查看配置文件中path參數里的路徑是否存在,權限是否正確(正常應為配置文件中的UID參數對應的屬主和組)
  4. 查看rsync服務是否啟動。查看命令為:ps -ef|grep rsync。端口是否存在netstat -antup |grep 873
  5. 查看iptables防火牆和selinux是否開啟允許rsync服務通過,也可以考慮關閉
  6. 查看服務端rsync配置的密碼文件是否為600的權限,密碼文件格式是否正確,正確格式為:用戶名:密碼,文件路徑和配置文件里的secrect files參數對應。
  7. 如果是推送數據,要查看下,配置rsyncd.conf文件中用戶是否對模塊下目錄有可讀寫的權限。

1.9.2 Rsync客戶端拍錯思路

    1. 查看客戶端rsync配置的密碼文件是否600的權限,密碼文件格式是否正確,注意:僅需要有密碼,並且和服務器端的密碼保持一致。
    2. 用telnet連接rsync服務器ip地址873端口,查看服務是否啟動(可測試服務端防火牆是否阻擋)telnet 192.168.197.129 873
    3. 客戶端執行命令時:rsync -avzP rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password
    4. 此命令的細節要記清楚,尤其192.168.197.129::backup 處的雙冒號及其后的backup為模塊名稱
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM