智慧源自于多角度的視野,能力來源于多種選擇!
1. 什么是Rsync?
遠(yuǎn)程同步
開源的、高速的、數(shù)據(jù)復(fù)制(拷貝)工具
2. 作用
工作中需要/定時/實時數(shù)據(jù)備份。本地服務(wù)器目錄、不同的機(jī)器、不同機(jī)房之間的數(shù)據(jù)備份。都可以用Rsync完成
3. Rsync功能特性
支持拷貝普通文件與特殊文件,如鏈接文件,設(shè)備文件等
支持排除指定文件或目錄同步的功能,相當(dāng)于打包命令tar的排除功能
可以做到保持源文件和目錄的權(quán)限、時間、軟硬鏈接、屬主、組等所有屬性均不變。
可以實現(xiàn)增量復(fù)制,既只復(fù)制發(fā)生變化的數(shù)據(jù),因此數(shù)據(jù)傳輸效率很高
可以使用讓rcp,rsh,ssh等方式來配合進(jìn)行隧道加密傳輸文件(rsync本身不對數(shù)據(jù)加密)。
可以通過socket(進(jìn)程方式)傳輸文件和數(shù)據(jù)(服務(wù)端和客戶端)*。
支持匿名或認(rèn)證(無需系統(tǒng)用戶)進(jìn)程模式傳輸,安全的進(jìn)行數(shù)據(jù)備份及鏡像。
4. 全量和增量的區(qū)別
增量復(fù)制:
只復(fù)制改變的文件
全量復(fù)制:
第一次與第二次復(fù)制沒區(qū)別,把沒有改變的文件也復(fù)制
5. 增量復(fù)制原理
默認(rèn)情況下,在備份復(fù)制數(shù)據(jù)時Rsync通過其獨(dú)特的“quick check”算法,它僅復(fù)制大小后者最后修改時間發(fā)生變化的文件或目錄,當(dāng)然也可以根據(jù)權(quán)限,屬主等屬性的變化復(fù)制,但需要指定相應(yīng)的參數(shù),升值可以實現(xiàn)只復(fù)制一個文件里有變化的內(nèi)容部分,所以可以實現(xiàn)快速的備份復(fù)制數(shù)據(jù),即采用增量復(fù)制方法對數(shù)據(jù)信息復(fù)制,與傳統(tǒng)cp,scp拷貝工具的全量拷貝復(fù)制截然不同,增量復(fù)制數(shù)據(jù),在效率上遠(yuǎn)遠(yuǎn)高于全量復(fù)制。
在CentOS5系統(tǒng)上,rsync 軟件版本默認(rèn)為2.x,同步增量復(fù)制數(shù)據(jù)原理是把左右的文件對比一遍,然后進(jìn)行再進(jìn)行數(shù)據(jù)同步。再CentOS6和7系統(tǒng)上,rsync 軟件版本默認(rèn)為3.x,增量復(fù)制數(shù)據(jù)原理是一邊對比差異,一邊對差異的數(shù)據(jù)進(jìn)行復(fù)制。從增量復(fù)制數(shù)據(jù)效率而言,rsync 3.x 版本比rsync 2.x 更有優(yōu)勢一些
可以利用rsync 命令參數(shù)查看當(dāng)前系統(tǒng)中rsync軟件版本信息。
rsync --version



6. Rsync三種工作模式介紹
1)本地模式(local)
在該模式下,Rsync就是個命令
a. 可以像CP一樣的拷貝,把數(shù)據(jù)從一個地方復(fù)制到另一個地方(僅在一臺機(jī)器增量),相當(dāng)于CP命令
b. 通過加參數(shù)實現(xiàn)刪除功能,相當(dāng)于rm命令
c. 查看屬性信息,相當(dāng)于ls
實踐
拷貝
[root@backup ~]# ls /opt
[root@backup ~]# rsync /etc/hosts /opt
[root@backup ~]# ls /opt
hosts
[root@backup ~]# \cp /etc/hosts /opt
拷貝過后,默認(rèn)屬性會變
刪除
刪除文件內(nèi)容:
[root@backup ~]# touch /null.txt #空文件
[root@backup ~]# cat /opt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01 db01.etiantian.org
172.16.1.61 m01
[root@backup ~]# rsync --delete /null.txt /opt/hosts #讓前面null.txt和后面hosts一樣
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]
[root@backup ~]# rsync -r --delete /null.txt /opt/hosts
[root@backup ~]# cat /opt/hosts
刪除目錄下所有文件:
[root@backup ~]# mkdir /null
[root@backup ~]# rsync -r --delete /null/ /opt/ #讓后面opt和前面null目錄內(nèi)容保持一致
[root@backup ~]# ls /opt/
c.查看屬性
[root@backup ~]# rsync /etc/hosts
-rw-r--r-- 332 2019/04/12 11:24:41 hosts

查看屬性
rsync 文件 查看文件屬性
2) 遠(yuǎn)程shell模式
借助類似ssh這種隧道傳輸數(shù)據(jù),適合不同的機(jī)器之間的復(fù)制
相對的,
pull 拉:從遠(yuǎn)端拉取到本地
rsync 參數(shù)選項 認(rèn)證用戶 @主機(jī)地址:原路徑 本地路徑
push 推:從本地推送到遠(yuǎn)端
rsync 參數(shù)選項 本地路徑 認(rèn)證用戶 @主機(jī)地址:目標(biāo)路徑
push實踐
rsync -avz /etc/hosts root@172.16.1.41:/opt
The authenticity of host '172.16.1.41 (172.16.1.41)' can't be established.
ECDSA key fingerprint is SHA256:QTw3XQMNvuP8pQ8FVQeIf5XstBmA2sSDXymJF78c1vw.
ECDSA key fingerprint is MD5:ea:5b:2b:63:25:75:ba:e5:67:0a:cf:20:e1:d1:62:57.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '172.16.1.41' (ECDSA) to the list of known hosts.
root@172.16.1.41's password:
sending incremental file list
hosts
sent 219 bytes received 35 bytes 20.32 bytes/sec
total size is 332 speedup is 1.31
-e 指定通道 ssh服務(wù)連接客戶端
-p 指定端口
拉:
[root@nfs01 ~]# rsync -avz root@172.16.1.41:/opt/hosts /opt
root@172.16.1.41's password:
receiving incremental file list
hosts
sent 43 bytes received 219 bytes 58.22 bytes/sec
total size is 332 speedup is 1.27
[root@nfs01 ~]# cd /opt
[root@nfs01 /opt]# ll
total 4
-rw-r--r-- 1 root root 332 Apr 12 13:25 hosts
推拉:
a. 參照物,執(zhí)行命令的機(jī)器
b. 使用的用戶和主機(jī),就用這個主機(jī)的用戶和密碼
強(qiáng)調(diào):
null 和 null/ 區(qū)別
null是目錄和目錄下的內(nèi)容
null/只是目錄下的內(nèi)容,不包含本身
3)Rsync守護(hù)進(jìn)程模式
首先要搭建服務(wù)端(需要有守護(hù)進(jìn)程),然后才能在客戶端實現(xiàn)推拉數(shù)據(jù)
工作中重要模式:
客戶端語法暫時不講。
rsync 服務(wù)模式:*****開啟后臺進(jìn)程,接受別人的訪問
7. Rsync 命令參數(shù)
rsync命令參數(shù):
-v, --verbose 顯示輸出過程
-z, --compress壓縮
-a, --archive 多參數(shù)集合(-rtopgD1)
-r, --recursive遞歸
-t,--times 保持修改時間屬性
-o, --owner 保持屬主不變
-p, --perms 保持權(quán)限不變
-g, --group 保持用戶組不變
-l, -iinks 保持拷貝軟連接
-q, --quiet 安靜的拷貝
--bwlimit=KBPS限制I/O帶寬, KBytes per second
--delete .刪除
--exclude排除
--exclude-from從文件中排除

企業(yè)中常用參數(shù)組合
-avz 或者-vzrtopg
8. Rsync 守護(hù)進(jìn)程模式應(yīng)用實踐
(1)以下操作都在backuo服務(wù)器上
?1)安裝查看版本號
rsync --version
rsync version 3.1.2 protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, prealloc
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
?2)編輯/etc/rsync.conf 文件,提前備份
cat >/etc/rsyncd.conf<<EOF
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync 管理備份目錄的用戶
gid = rsync 管理備份目錄的用戶組
use chroot = no 安全功能,是否鎖定到備份目錄
max connections = 200 并發(fā)連接,同時多少客戶端訪問
fack super = yes
timeout = 600 超時時間
pid file = /var/run/rsyncd.pid 進(jìn)程號所在文件
lock file = /var/run/rsync.lock 鎖文件
log file = /var/log/rsyncd.log 日志文件
ignore errors 忽略錯誤
read only = false 可寫(不只讀)
list = false 不允許列表
hosts allow = 172.16.1.0/24 授權(quán)那些主機(jī)可以訪問(工作中二選一)
hosts deny = 0.0.0.0/32 拒絕那些主機(jī)不允許訪問(工作中二選一)
auth users = rsync_backup 遠(yuǎn)程虛擬連接用戶(名字可更改)
secrets file = /etc/rsync.password 存放密碼文件 格式:用戶名:密碼 權(quán)限要求600
[backup] [模塊(標(biāo)識)]遠(yuǎn)程范文使用模塊名
comment = welcome to oldboyedu backup! 說明注釋
path = /backup/ 服務(wù)器端用于備份的目錄,用戶和組, rsync.rsync
EOF
學(xué)會了解知識的源頭
man rsync 查命令的參數(shù)
man rsyncd.conf 查看文件的參數(shù)
創(chuàng)建目錄檢查備份
[root@backup ~]# useradd rsync
[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) groups=1001(rsync)
?3)啟動和檢查
rsync --daemon
systemctl start rsyncd CentOS7
??啟動檢查
??檢查開機(jī)自啟動
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2019-04-15 11:40:04 CST; 30s ago
Main PID: 10140 (rsync)
CGroup: /system.slice/rsyncd.service
└─10140 /usr/bin/rsync --daemon --no-detach
Apr 15 11:40:04 backup systemd[1]: Stopped fast remote file copy program daemon.
Apr 15 11:40:04 backup systemd[1]: Started fast remote file copy program daemon.
Apr 15 11:40:04 backup rsyncd[10140]: rsyncd version 3.1.2 starting, listening on port 873
檢查進(jìn)程和端口
rsync --daemon(c6及以前)
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd
[root@backup ~]# ps -ef|grep sync|grep -v grep #檢查進(jìn)程
root 7521 1 0 11:39 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
[root@backup ~]# netstat -lntup|grep 873 #檢查端口
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7521/rsync
tcp6 0 0 :::873 :::* LISTEN 7521/rsync
[root@backup ~]# lsof -i :873 #檢查端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7521 root 3u IPv4 41439 0t0 TCP *:rsync (LISTEN)
rsync 7521 root 5u IPv6 41440 0t0 TCP *:rsync (LISTEN)
rsync 端口號為873
4)配置密碼文件
[root@backup ~]# echo " rsync_backup:oldboy" >/etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password
服務(wù)端配置完成
(2)以下操作都是在客戶端服務(wù)器
方法1:認(rèn)證密碼文件
[root@nfs01 ~]# echo " rsync_backup:oldboy" >/etc/rsync.password
[root@nfs01 ~]# echo "oldboy" >/etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 Apr 15 11:55 /etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
oldboy
方法2:
echo ‘export RSYNC_PASSWORD=oldboy’ >>/etc/bashrc
tail -i /etc/bashrc
export RSYNC_PASSWORD=oldboy
[root@nfs01 ~]# . /etc/bashrc
[root@nfs01 ~]# echo $RSYNC_PASSWORD
oldboy
兩種方法二選一
客戶端nfs01配置完成
(3)守護(hù)進(jìn)程模式,客戶端rsync的命令語法
配置服務(wù)器端的守護(hù)進(jìn)程,實現(xiàn)數(shù)據(jù)傳輸
1、 服務(wù)器端守護(hù)進(jìn)程
2、 客戶端執(zhí)行命令

(4)檢查成果
錯誤1:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1648) [sender=3.1.2]
解答:
[root@backup ~]# useradd rsync
[root@backup ~]# id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup ~]# mkdir -p /backup
[root@backup ~]# chown -R rsync.rsync /backup/
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月 15 12:12 /backup/
錯誤2:
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
rsync: chgrp ".hosts.YDuTjO" (in backup) failed: Operation not permitted (1)
sent 223 bytes received 124 bytes 694.00 bytes/sec
total size is 332 speedup is 0.96
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
解答:增加如下參數(shù)到/etc/rsyncd.conf
fake super = yes #不用root用戶也可以存儲文件的完整屬性。
This allows the full attributes of a file to be stored without having to have the daemon actually running as root.
[root@backup ~]# grep fake /etc/rsyncd.conf
fake super = yes
改完配置,要重啟服務(wù):
[root@backup ~]# systemctl restart rsyncd
在測試:成功
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 89 bytes received 49 bytes 276.00 bytes/sec
total size is 332 speedup is 2.41
rsync -avz /etc rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
服務(wù)端檢查:
[root@backup ~]# ls /backup/
hosts
[root@backup ~]# ls /backup/
etc hosts
如果客戶端按照環(huán)境變量的方式配置,則可以忽略--password-file=/etc/rsync.password參數(shù)。
[root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
sent 52,071 bytes received 644 bytes 105,430.00 bytes/sec
total size is 31,244,350 speedup is 592.70
測試增量
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup
sending incremental file list
etc/oldboy.txt
sent 52,098 bytes received 655 bytes 105,506.00 bytes/sec
total size is 31,244,350 speedup is 592.28