1. 程式人生 > >【Linux運維】rsync 數據同步備份工具筆記

【Linux運維】rsync 數據同步備份工具筆記

批量 str arc eba 記憶 系統用戶 登錄 視頻 不用

rsync 可實現全量及增量的本地或遠程數據鏡像同步備份的優秀工具
rsync官方詳細說明:http://www.samba.org/ftp/rsync/rsync.html
rsync學習視頻:http://blog.51cto.com/oldboy/1216457

rsync學習整理筆記
1.1 rsync 一種快速、通用、遠程(和本地)文件復制工具

rsync特性:
1.支持拷貝特殊文件如鏈接、設備等;
2.可以有排除指定文件或目錄的同步功能,相當於打包命令tar的排除功能;
3.可以做到保持原文件或目錄的權限、時間、軟硬鏈接、屬主、組等所有屬性均不改變;
4.可實現增量同步,既只同步發生變化的數據,因此數據傳輸效率很高;

5.可以使用rcp.rsh.ssh等方式來配合傳輸文件,也可以直接通過socket(進程方式)傳輸;
6.支持匿名的或認證的進程模式傳輸,可實現方便安全的進行數據備份及鏡像。
7.不需要超級用戶權限

1.2 rsync 工作方式:
1.主機本地間的數據傳輸;
2.借助rcp、ssh等通道來傳輸數據(類似scp命令);
3.以守護進程socket的方式傳輸數據(這個是rsync重要功能)。

1.2.1 本地數據傳輸模式 local-only model
rsync本地傳輸模式語法:
rsync [OPTION...] SRC... [DEST]
語法說明:
1.rsync 為同步命令
2.[OPTION]為同步時的參數選項

3.SRC為源,即待拷貝的分區、文件或目錄等
4.[DEST]為目的分區、文件或目錄等

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

[root@root /]# rsync /etc/hosts /opt/ <== cp -p /etc/hosts /opt/

示例2:把opt目錄拷貝到mnt目錄下

[root@root /]# rsync -avz /opt/ /mnt/ <== cp -ap /opt/ /mnt/

1.2.2 通過遠程shell進行數據傳輸remote shell model
通過遠程shell訪問:
拉取Pull:rsync [OPTION...] [USER @]HOST:SRC ... [DEST]

推送Push:rsync [OPTION...] SRC ... [USER @] HOST:DEST
語法說明:
1.rsync 為同步命令;
2.[OPTION...]為同步時的參數選項;
3.[USER @]HOST: 為Rsync同步的遠程地連接用戶和主機地址;
4.SRC為源;
5.DEST為目的
拉取(get),表示從遠端主機把數據同步到執行命令的本地主機相應目錄;
推送(put),表示從本地主機執行命令把本地的數據同步到遠端主機指定的目錄下。

拉取示例語法:遠端opt目錄抓取到本地tmp目錄
rsync -vartopgP -e ‘-ssh -p 22‘ [email protected]:/opt/ /tmp/
推送實用語法:本地hosts文件推送到遠端家目錄
rsync -avz /etc/hosts -e ‘ssh -p 22‘ [email protected]:~
關鍵語法說明:

  1. -vzrtopg 相當於上文的-avz,表示同步時文件和目錄屬性不變;
    2.--progress 顯示同步過程,可以用-P替換;
    3.-e ‘ssh -p 22‘,表示通過ssh的渠道傳輸數據,-p 22可省略。

1.2.3 使用守護進程的方式數據傳輸 daemon mode
通過守護進程方式傳輸同樣分為兩種情況,每種情況又有兩種語法寫法。分別如下:
通過rsync守護進程訪問:
拉取: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
特別值得註意的是,與遠程shell方式的命令不同的是,第一種語法格式,本節命令[USER @] HOST :: DEST 結尾處,均為雙冒號連接SRC與DEST,另外,這個SRC或DEST也不在是路徑了,而是守護進程中配置的模塊名稱,下文會有例子詳細說明。
拉取實踐命令:

>>>rsync -vzrtopgP rsync://[email protected]:/tmp/ /opt/ --password-file=/etc/rsync.password #自動讀取密碼文件中的密碼,免密登錄

推送實踐命令:

>>>rsync -vzrtopgP /test/ rsync://[email protected]:/tmp/ --password-file=/etc/rsync.password #自動讀取密碼文件中的密碼,免密登錄

特別說明:以上的用法是個不錯的方法,他在拉取和推送時的寫法極其類似,尤其是最後的守護進程服務時,第一種方法通過雙冒號家加模塊名的方法不利於記憶。所以對於初學者,建議大家也可以記憶這個語法格式。

1.3 rsync 命令同步參數選項
rsync [IPTION...] SRC... [DEST]
常用參數選項說明:
-v, --verbose 詳細模式輸出,傳輸時的進度等信息;
-z, --compress 傳輸時進行壓縮以提高傳輸效率, --compress-level=NUM可按級別壓縮;
-r, --recursive 對子目錄以遞歸模式,即目錄下的所有目錄都同樣傳輸,註意小寫r;
-t, --times 保持文件時間信息;
-o, --owner 保持文件屬主信息;
-p, --perns 保持文件權限;
-g, --group 保持文件屬組信息;
-P, --progress 顯示同步的過程及傳輸時的進度等信息;
-a, --archive 歸檔模式(archive mode),表示以遞歸的方式傳輸文件,並保持所有文件屬性,等於 -rtopgDl;
-D, --devices 保持設備文件信息;
-l, --links 保留軟鏈接;
-e, --rsh=COMMAND 使用的信道協議,指定代替rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不需要傳輸的文件模式
保持同步目錄及文件屬性:
這裏的-avzP 相當於 -vzrtopDlP (還多了個Dl功能),生產環境常用的參數選項為-avzP或者-vzrtopgP如果是放在加入腳本中,也可以把-v和-pqudiao 。這裏的--progress 可以用-P代替。
特別提示:請註意一下兩個命令的差別:
a. rsync -avz /opt/ /tmp/
b. rsync -avz /opt /tmp/
1.中/opt/意思是,僅把opt目錄裏面的內容同步過來,opt目錄本身並不同步,而後者b中/opt表示把opt本身及其內容全部同步到/tmp/下,僅一個/(斜杠之差),意義就大不相同,請註意使用的差別。
2.後面要說的通過遠程shell進行數據傳輸的內容也會有類似的問題,請牢記。

1.4 借助ssh通道在不同主機間傳輸數據
借助ssh通道從遠端主機拉取數據例子實踐:
1.4.1 拉取實踐:

[root@root ~]# rsync -avzP -e ‘ssh -p 22‘ [email protected]:/opt /tmp

關鍵語法說明:

  1. -avz 相當於-vzrtopgDl ,表示同步時文件和目錄屬性不變;
  2. -P 顯示同步的過程,可以用--progress替換;
  3. -e ‘ssh -p 22‘,表示通過ssh的通道傳輸數據,ssh默認端口沒變的話-p 22 可省略;
  4. [email protected]:/opt 遠程的主機系統用戶,地址,路徑;
    5./tmp 本地的路徑
    實例實踐:通過root用戶從10.0.0.11的/opt目錄(包含目錄本身)把數據拉取到本地的/tmp目錄
    [root@root ~]# rsync -avzP -e ‘ssh -p 22‘ [email protected]:/opt /tmp

1.4.2 借助ssh key密鑰實現數據免密登錄驗證加密傳輸
說明:如果事先設置了ssh key密鑰免登錄驗證,即可用rsync通過ssh方式免登錄驗證同步傳輸數據,這是生產場景常用的方法之一。
配置ssh key密鑰實現數據免登錄驗證:
http://blog.51cto.com/000011211684/1693597
輕松實現遠程批量拷貝文件腳本:
http://blog.51cto.com/oldboy/1205715

特別提示:本文免驗證連接分發文件是基於普通用戶oldboy的,如果要實現hosts文件等的推送工作,是需要root權限的,我們應該怎麽辦呢?
方法大概有三:
方法一:此時可以把oldboy用戶配置sudo權限用戶,然後就可以實現通過sudo功能來實現普通用戶推送只有root才能處理的問題了,此法為推薦的方法。
方法二:還記得前面講的setuid權限位麽?可以把所有客戶端如echo、cp、scp命令,修改為setuid位,這樣在推送文件時就可以使用以上命令,來搞定了。不過這個方法,不推薦。
方法三:可以配置root用戶的免密登錄認證,但這又會帶來一定的安全問題(雖然可以防火墻封堵ssh端口),此方法比方法一稍遜一籌。
更詳細的說明可見ssh key的相關章節, 分發數據免密碼登錄的幾點須知!
-e, - rsh = COMMAND 指定要使用的遠程shell

1.5 rsync守護進程傳輸文件
1.5.1 rsync服務端配置
編輯rsync配置文件並啟動rsync服務

[root@root ~]# vim /etc/rsyncd.conf #rsync服務端配置,沒有的話需要手動生成
uid = rsync  ##運行rsync守護進程的用戶-rsync
gid = rsync  ##運行rsync守護進程的組-rysnc
use chroot = no ##不實用chroot
max connections = 200 ##並發設置及最大連接數
strict modes = yes ##是否檢查口令文件權限
#port = 873  ##rsync服務默認端口873
timeout = 100 ##超時設置
###安裝完rsync服務後自動生成的文件,添加一下也無妨###
pid file = /var/run/rsyncd.pid  ##pid文件的存放位置
lock file = /var/run/rsync.lock ##鎖文件的存放位置
log file = /var/log/rsyncd.log  ##日誌記錄文件的存放位置
###模塊參數配置####
[oldboy] ##模塊名,可根據實際情況設定
path = /oldboy/ ##備份路徑
comment = This is a oldboy. ##這是模塊註釋信息,可忽略。
ignore errors  ##可以忽略一些無關的IO錯誤
read only = false ##只讀為假,可寫文件
list - false  ##不允許列文件
hosts allow = 192.168.120.0/24 ##允許主機
hosts deny = 0.0.0.0/32 ##禁止主機
auth users =rsync_backup #認證用戶/授權用戶,如果沒有這行則表明是匿名,此用戶與系統無關
secrets file = /etc/rsync.password #上面虛擬用戶的密碼文件:明文的

dos2unix /etc/rsyncd.conf (格式化,當windows文件拉入linux中時操作由於格式問題可以先格式化一下)

[root@root /]# useradd rsync -s /sbin/nologin -M #添加用戶不用登陸不需要家目錄
[root@root /]# mkdir /oldboy
[root@root /]# chown -R rsync.rsync oldboy
[root@root /]# chown -R rsync.rsync oldboy

配置用於rsync同步的賬號、密碼及賬號文件權限

[root@root etc]# echo "rsync_backup:oldboy" >> /etc/rsync.password
[root@root etc]# cat rsync.password 
rsync_backup:oldboy
[root@root etc]# ls -l rsync.password 
-rw-r--r--. 1 root root 20 12月 21 17:45 rsync.password
[root@root etc]# chmod 600 /etc/rsync.password #明文密碼文件權限給到最小-保密
[root@root etc]# ll rsync.password
-rw-------. 1 root root 20 12月 21 17:45 rsync.password

rsync啟動服務

[root@root etc]# rsync --daemon  ##後臺運行rsync服務
[root@root etc]# netstat -natp | grep rsync 
tcp  0   0 0.0.0.0:873     0.0.0.0:*       LISTEN      9985/rsync          
tcp  0   0 :::873          :::*            LISTEN      9985/rsync          
[root@root etc]# lsof -i :873 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   9985 root    4u  IPv4  35058      0t0  TCP *:rsync (LISTEN)
rsync   9985 root    5u  IPv6  35059      0t0  TCP *:rsync (LISTEN)
[root@root etc]# ps -ef | grep 873
root      10005   9801  0 17:50 pts/1    00:00:00 grep 873

1.5.2 rsync客戶端配置

##設定密碼文件,註:客戶端密碼文件路徑與服務端全無關系,弄得一樣便於記憶
[root@root /]# echo "oldboy" > /etc/rsync.password
[root@root /]# cat rsync.password 
oldboy
[root@root etc]# ls -l rsync.password 
-rw-r--r--. 1 root root 20 12月 21 17:45 rsync.password
#明文密碼文件權限給到最小600,切莫忘記不然後續從客戶端推送數據時會報錯
[root@root etc]# chmod 600 /etc/rsync.password 
[root@root etc]# ll rsync.password
-rw-------. 1 root root 20 12月 21 17:45 rsync.password

1.5.3 下面進行守護進程傳輸文件測試:
rsync服務端192.168.120.120
rsync客戶端192.168.120.121
要求:將本地客戶端的web數據打包備份後傳輸到服務端上

[root@root www]# man rsync
##通過man手冊可以看下rsync守護進程語法格式(之前詳細介紹過)
rsync(1)                                                       rsync(1)
NAME
    rsync — a fast, versatile, remote (and local) file-copying tool
SYNOPSIS
    Local:  rsync [OPTION...] SRC... [DEST] ##本地傳輸模式
    Access via remote shell:  ##通過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
...省略若幹...

1.5.3.1 守護進程備份操作-Pull推送(適用於數據備份)

#使用tar命令打包本地web數據,參數中的"-"符號加與不加功能一樣
[root@root www]# tar -zcvf html_$(date +%F).tar.gz html 
html/
[root@root www]# ll
總用量 28
drwxr-xr-x.  2 root      root 4096 8月   2 2013 cgi-bin
drwxr-xr-x.  3 root      root 4096 11月 19 22:12 error
drwxr-xr-x.  2 root      root 4096 8月   2 2013 html
-rw-r--r--.  1 root      root  109 12月 21 21:13 html_2018-12-21.tar.gz
drwxr-xr-x.  3 root      root 4096 11月 19 22:12 icons
drwxr-xr-x. 14 root      root 4096 11月 19 22:17 manual
drwxr-xr-x.  2 webalizer root 4096 11月 19 22:15 usage
##客戶端通過守護進程方式傳輸web備份數據
[root@root www]# rsync -azvp html_2018-12-21.tar.gz [email protected]::oldboy
Password: 
sending incremental file list
html_2018-12-21.tar.gz

sent 196 bytes  received 27 bytes  49.56 bytes/sec
total size is 109  speedup is 0.49

註意:
##使用上面rsync這條命令語句還需要填寫密碼,傳輸比較麻煩,只需要在後面加上 --password-file=/etc/rsync.password 引用密碼文件就能達到免密傳輸的效果

>>推送1 rsync -azvp html_2018-12-21.tar.gz [email protected]::oldboy --password-file=/etc/rsync.password
>>推送2 rsync -azvp html_2018-12-21.tar.gz rsync://[email protected]/oldboy --password-file=/etc/rsync.password

語法解釋:看不懂這條命令的,請參考上面的1.2.3 使用守護進程的方式數據傳輸 部分。

1.5.3.2 進入rsync服務端查看客戶端的備份數據

[root@root etc]# cd /oldboy/  ##進入指定的path路徑
[root@root oldboy]# ll
總用量 4
-rw-r--r--. 1 rsync rsync 109 12月 21 21:13 html_2018-12-21.tar.gz

1.5.3.3 rsync使用過程中的報錯整理
錯誤1: rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2]
解決:很大可能是服務器端沒有開啟 rsync 服務,開啟服務。 或者開啟了防火墻指定的端口無法訪問。

錯誤2:@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解決:服務器端同步目錄沒有權限,cwrsync默認用戶是Svcwrsync。為同步目錄添加用戶Svcwrsync權限。

錯誤3:@ERROR: failed to open lock file
rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2]
解決:服務器端配置文件 rsyncd.conf中添加 lock file = rsyncd.lock 即可解決。

錯誤4:@ERROR: invalid uid nobody
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.2]
解決:在rsyncd.conf文件中添加下面兩行即可解決問題 。(添加守護進程用戶+組)
UID = 0
GID = 0

錯誤5:@ERROR: auth failed on module test2
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=3.0.2]
解決:服務端沒有指定正確的secrets file,請在 [test2]配置段添加如下配置行:
auth users = coldstar #同步使用的帳號
secrets file = rsyncd.password #密碼文件

錯誤6:password file must not be other-accessible
解決:客戶端的pass文件要求權限為600, chmod 600 /etc/rsync.pass 即可。

錯誤7:rsync: chdir /cygdrive/c/work failed
: No such file or directory (2)
解決:服務器端同步文件夾路徑或名稱寫錯了,檢查path。

錯誤8:No route to hosts
解決:先telnet一下,出現連接拒絕,表示被防火墻阻擋,可以關閉防火墻。
===============================================================
rsyncserver 服務啟動時報錯“rsyncserver服務啟動後又停止了。一些服務自動停止,如果它們沒有什麽可做的,例如“性能日誌和警報”服務。”
解決方法:將安裝目錄下的rsyncd.pid文件刪除,再重新啟動RsyncServer服務。一般是異常關機導致的。

1.5.4 備份全網服務器數據生產架構方案案例模型
上機實戰考試題:
某公司裏有一臺web服務器,裏面的數據很重要,但是如果硬盤壞了,數據就會丟失,現在領導要求你把數據在其它機器上做一個周期性定時備份。要求如下:
每天晚上0點整在web服務器A上打包備份網站程序目錄並通過rsync命令推送到服務器B上備份保留(備份思路可以是先在本地按日期打包,然後在推到備份服務器上)
具體要求如下:
1.web服務器A和備份服務器B的備份目錄都必須為/backup
2.web服務器站點目錄嘉定為(/var/www/html)
根據 1.5 rsync守護進程傳輸文件 的配置做修改。其中rsync服務端=備份服務器,rsync客戶端=web服務器。

1.5.4.1 web服務器A配置 192.168.120.121

[root@root etc]# mkdir -p /backup/192.168.120.121
[root@root etc]# chown -R rsync  /backup/
[root@root etc]# cd /study/
[root@root study]# vim web_bak.sh  ##編輯web服務器備份腳本
cd /var/www/ &&tar -zcvf /backup/192.168.120.121/html_$(date +%F).tar.gz ./html &&\ ##備份數據打包
cd /backup/ &&rsync -azvp . [email protected]::backup --password-file=/etc/rsync.password >/dev/null 2>&1 
find /backup -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
[root@root study]# crontab -e ##添加定時任務
00 00 * * * sh /study/web_bak.sh >/dev/null 2>&1 

1.5.4.2 備份服務器B配置 192.168.120.120

[root@root ~]# cd /etc/
[root@root etc]# cp rsyncd.conf rsyncd.conf_bak
[root@root etc]# vim rsyncd.conf
[backup]  ##該模塊名,一般都弄一致便於記憶
path = /backup/ ##修改備份目錄
[root@root etc]# mkdir /backup
[root@root etc]# chown -R rsync /backup/
[root@root backup]# pkill rsync  #殺掉rsync服務
[root@root backup]# lsof -i :873
[root@root backup]# rsync --daemon #重新啟動rsync服務
[root@root backup]# lsof -i tcp:873
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   16058 root    4u  IPv4  50262      0t0  TCP *:rsync (LISTEN)
rsync   16058 root    5u  IPv6  50263      0t0  TCP *:rsync (LISTEN)

1.5.5 守護進程分發操作-Push拉取(適用於數據分發)

##web服務器上數據拉取操作##
[root@root study]# rsync -azvp [email protected]::backup /mnt --password-file=/etc/rsync.password
receiving incremental file list
./
192.168.120.121/
192.168.120.121/html_2018-12-22.tar.gz

sent 90 bytes  received 341 bytes  862.00 bytes/sec
total size is 111  speedup is 0.26
[root@root study]# cd /mnt/
[root@root mnt]# ll
總用量 4
drwxr-xr-x. 2 501 501 4096 12月 22 03:10 192.168.120.121

1.5.5 分發數據生產架構方案案例模型
下載、分發數據。

1.6 rsync應用拓展排除打包

首先看tar如何進行排除打包
[root@root 192.168.120.121]# cd /study/
[root@root study]# ll
總用量 20
-rw-r--r--. 1 root root 1471 12月 21 14:32 ssh_expect.sh
-rw-r--r--. 1 root root   17 12月 21 14:26 ssh_host_ip.txt
-rw-r--r--. 1 root root  458 12月 21 14:33 ssh_host.sh
-rw-r--r--. 1 root root 1048 12月 21 14:28 ssh_host.sh_bak
-rw-r--r--. 1 root root  303 12月 22 01:18 web_bak.sh
##使用 --exclude 排除web_bak.sh打包
[root@root study]# tar -zcvf a.tar.gz ./* --exclude=web_bak.sh 
./ssh_expect.sh
./ssh_host_ip.txt
./ssh_host.sh
./ssh_host.sh_bak
[root@root study]# tar -ztvf a.tar.gz ##查看下打包內容
-rw-r--r-- root/root      1471 2018-12-21 14:32 ./ssh_expect.sh
-rw-r--r-- root/root        17 2018-12-21 14:26 ./ssh_host_ip.txt
-rw-r--r-- root/root       458 2018-12-21 14:33 ./ssh_host.sh
-rw-r--r-- root/root      1048 2018-12-21 14:28 ./ssh_host.sh_bak

rsync也可以使用--exclude 參數進行排除傳輸文件

[root@root backup]# mkdir a b d c  ##創建文件a、b、c、d四個文件進行排除推送測試
[root@root backup]# touch a/1 b/2 c/3 d/4
[root@root backup]# tree
.
├── 192.168.120.121
│   └── html_2018-12-22.tar.gz
├── a
│   └── 1
├── b
│   └── 2
├── c
│   └── 3
└── d
    └── 4
[root@root backup]# rsync -azvp --exclude=a/1 --exclude=b . [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
./
a/
c/
c/3
d/
d/4
sent 229 bytes  received 62 bytes  582.00 bytes/sec
total size is 111  speedup is 0.38

另一種方式:修改rsync配置文件。
在/etc/rsyncd.conf配置文件中添加一行 exclude = a b/2
註意: exclude = a b/2 表示排除文件夾a 與文件夾b下面的2文件
[root@root backup]# vim /etc/rsyncd.conf
exclude = a b/2 ##添加需要排除的文件或目錄

rsync客戶端的排除測試-Push推送:(雖然報錯,但是到rsync服務器上確實有這些文件。疑似權限問題)

[root@root backup]# rsync -azvp . [email protected]::backup --password-file=/etc/rsync.password   
sending incremental file list
./
skipping daemon-excluded directory "a"
*** Skipping any contents from this failed directory ***
b/
skipping daemon-excluded file "b/2"
c/
c/3
d/
d/4
sent 255 bytes  received 63 bytes  212.00 bytes/sec
total size is 111  speedup is 0.35
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]

rsync客戶端的排除測試-Pull拉取:

[root@root backup]# rsync -azvp [email protected]::backup /mnt --password-file=/etc/rsync.password
receiving incremental file list
./
192.168.120.121/
192.168.120.121/html_2018-12-22.tar.gz
b/
c/
c/3
d/
d/4
sent 140 bytes  received 480 bytes  1240.00 bytes/sec
total size is 111  speedup is 0.18

參數說明:
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
註意:服務端的排除參數用於客戶端的拉取Push

1.7 rsync應用拓展無差異同步講解
1.7.1 本地刪除--delete參數使用
要實現這種同步方式就要使用rsync的--delete參數。下面是--delete參數使用詳解:

[root@root /]# mkdir /boy #創建兩個臨時文件夾,第一個文件夾空的,第二個有內容
[root@root /]# mv /mnt/ /girl
[root@root /]# rsync -azvP --delete boy/ girl/
#由於boy文件夾內容為空,所以使用--delete參數進行無差異同步時會將girl文件夾內容刪除
sending incremental file list
./
deleting d/4
deleting d/
deleting ceshi/
deleting c/3
deleting c/
deleting b/
deleting 192.168.120.121/html_2018-12-22.tar.gz
deleting 192.168.120.121/

sent 29 bytes  received 15 bytes  88.00 bytes/sec
total size is 0  speedup is 0.00
[root@root /]# tree girl/
girl/
0 directories, 0 files

1.7.2 無差異同步-拉取Pull

[root@root ~]# rsync -azvP --delete [email protected]::backup /tmp --password-file=/etc/rsync.password

以上方式表示遠程服務端發生變化的文件,例如刪除了文件,那麽如果本地要保持與服務端數據一致,就可以使用這個命令。
這個命令非常危險,使用不當可能造成本地目錄及文件,甚至是根本目錄數據丟失,因此要特別註意小心使用。
執行--delete參數從rsync服務端往客戶端拉取(Push)數據時,一定要小心,最好不用,它比從rsync客戶端帶--delete參數往rsync服務端推送(Pull)危險的多,客戶端帶--delete參數往服務端推送僅刪除服務端模塊下的數據,而前者有能力刪除rsync客戶端本地的所有數據包括根下的所有目錄。

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

1.8 rsync應用拓展多模塊同步
添加多模塊配置,其實並沒有多大變化。只是加了一個模塊名與Path路徑

[root@root backup]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 100
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list - false
hosts allow = 192.168.120.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#exclude =  a b/2
[backup]
path = /backup/
[oldboy]
path = /oldboy/

特別說明:添加多個模塊可以有多個路徑(相當於多個共享)
如果需要每個模塊都有不同的賬號和密碼,就需要在每一個模塊裏面添加賬號與密碼,由於自學沒那麽高要求,就簡單添加了一個模塊名加模塊路徑。不在模塊裏面添加的配置就相當於全局變量。

1.9 rsync服務配置回顧
1.9.1 服務端配置
配置rsync的配置文件:/etc/rsyncd.conf
創建同步的本地目錄/backup並根據需要授權rsync服務的用戶可讀寫權限,/backup目錄和/etc/rsync.password為配置文件中path=/backup參數配置。
賬號及密碼文件配置

[root@root etc]# echo "rsync_backup:oldboy" >> /etc/rsync.password
[root@root etc]# chmod 600 /etc/rsync.password #明文密碼文件權限給到最小-保密

提示:
1./etc/rsync.password為配置文件中secrets file = /etc/rsync.password的參數配置
2.賬號rsync_backup為配置文件中auth users = rsync_backup的參數配置

1.9.2 客戶端配置
添加密碼文件與修改密碼文件權限
[root@root /]# echo "oldboy" > /etc/rsync.password
[root@root etc]# chmod 600 /etc/rsync.password

提示:
客戶端的密碼文件路徑/etc/rsync.password與服務端的免密文件路徑/etc/rsync.password沒有任何關系,只要和客戶端rsync命令的參數--password-file=/etc/rsync.password中的路徑對應即可

1.9.3 客戶端操作命令細節
Pull推送

>>>rsync -avzP . [email protected]::backup --password-file=/etc/rsync.password
>>>rsync -avzP . rsync://[email protected]/backup --password-file=/etc/rsync.password

註意:第二條推送命令的推送路徑必須是服務端配置的path路徑下才行
Push抓取:

>>>rsync -avzP  [email protected]::backup /mnt --password-file=/etc/rsync.password
>>>rsync -avzP rsync://[email protected]/backup /mnt --password-file=/etc/rsync.password

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

2.0.2 rsync客戶端排錯思路
1.查看客戶端rsync配置的密碼文件是否為600權限,密碼文件格式是否正確,註意:僅需要有密碼,並且和服務端的密碼一致;
2.用telnet連接rsync服務器ip地址873端口,查看服務是否啟動(可測試服務端防火墻是否阻擋),telnet 10.0.0.141 873
3.客戶端執行命令時rsync -avzP [email protected]::backup --password-file=/etc/rsync.password
此命令的細節要記清楚,尤其192.168.120.120::backup 處的雙冒號及隨其後的backup為模塊命令。

【Linux運維】rsync 數據同步備份工具筆記