Rsync復制軟件應用和實踐
1、什么是rsync?
Rsync,Rsync英文全稱為Remote?? synchronization? rsync
開源的、高速的、可實現本地以及遠程,全量以及增量的數據復制(拷貝)工具
2、全量和增量的區別
全量復制:
[root@nfs01 ~]# cp -a /etc/ /opt/
[root@nfs01 ~]# \cp -a /etc/ /opt
[root@nfs01 ~]# touch /etc/oldboy.txt
[root@nfs01 ~]# \cp -a /etc/ /opt/
增量復制:
只復制oldboy.txt
3、rsync的作用?
工作中需要定時/實時數據備份。本地服務器目錄、不同機器、不同機房之間的數據備份。都可以用rsync來完成。
4、rsync的功能特性?
(1)、支持拷貝普通文件與特殊文件,如:鏈接文件、設備文件等
(2)、支持排除指定文件或目錄同步的功能,相當于打包命令tar的組排功能
(3)、可以做到保持源文件或目錄權限、時間、軟鏈接、屬主、組等所有屬性均不改變
(4)、可實現增量復制,即只復制發生變化的數據,因此數據傳輸效率很高
(5)、可使用rcp,rsh,ssh等方式來配合進行隧道加密文件(rsync本身不對數據加密)
(6)、可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)
(7)、支持匿名或認證(無需系統用戶)進程模式傳輸,安全的進行數據備份及鏡像
5、增量復制原理
使用quick check算法,只對增量的部分復制,根據大小屬性的變化進行復制。
2.x比對差異后復制;3.x一邊比對一邊復制
6、rsync三種工作模式介紹
(1)、本地(local)
Rsync就是一個命令
rsync ? ? ? ? [OPTION...] ? ? ? ? SRC... ?? [DEST]
rsync命令 ? 參數選項 ?? [源目錄或文件] 目的目錄或文件
A、把數據從一個地方復制到另一個地方(僅在一臺機器增量),相當于cp。
B、通過加參數實現刪除的功能,相當于rm命令
C、查看屬性信息功能,相當于LS
實踐:
a、拷貝實踐
[root@backup01~]# rsync /etc/hosts /opt
[root@backup01~]# ls /opt
hosts
[root@backup01~]# \cp /etc/hosts /opt
保持屬性
[root@backup01~]# rsync -zrtopg /etc/hosts /opt
[root@backup01~]# ls -l /etc/hosts
/opt/hosts
-rw-r--r--. 1 root root 332 4月? 12 11:24 /etc/hosts
-rw-r--r--?1 root root 332 4月?12 11:24 /opt/hosts
b、刪除實踐
[root@backup01/]# touch null.txt
[root@backup01/]# 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@backup01/]# 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@backup01/]# rsync -r --delete /null.txt /opt/hosts
[root@backup01/]# cat /opt/hosts
刪除目錄下的所有文件:
[root@backup01 ~]# mkdir /null
[root@backup01 ~]# rsync -r --delete /null/ /opt/? ? ? #讓后面opt和前面null目錄內容保持一致
[root@backup01 ~]# ls /opt/
c.查看屬性
[root@backup01 ~]# rsync /etc/hosts
-rw-r--r--? ? ? ? ? ? 332 2019/04/12 11:24:41 hosts
(2)、遠程shell模式
借助類似ssh隧道傳輸數據,適合不同的機器之間復制。
Pull,拉:從遠端拉取到本地。
Push,推:從本地推到遠端。
rsync ?? [OPTION...] ? ? ? SRC... ? ? ? [USER@]HOST: ? [DEST]
rsync命令 參數選項 ? ?? 本地路徑 [認證用戶]@[主機地址]:[目標路徑]
Push實踐:
[root@nfs01~]# 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:3T7m4j67Ht0atDzvJH+kVWMV0nklv8OeKgpkID0fY6Q.
ECDSA key fingerprint is
MD5:9a:72:5b:30:02:22:a1:65:b7:03:70:a3:7a:27:e8:e0.
Are you sure you want to continue
connecting (yes/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 218 bytes? received 35 bytes? 20.24 bytes/sec
total size is 332? speedup is 1.31
檢查:
[root@backup01/]# ll /opt
總用量 4
-rw-r--r-- 1 root root 332 4月? 12 11:24 hosts
rsync -avz /etc/hosts -e "ssh -p 22" root@172.16.1.41:/opt/
上述命令是等價的。-e 指定通道? ssh ssh服務連接客戶端? -p 22指定22端口。
推拉:
A、參照物,執行命令的機器
B、root@172.16.1.41?? 使用的用戶和主機,就用主機和用戶的密碼
強調一個重點:適合rsync
Null和null/? 區別:null是目錄和目錄下的內容
null/ 只是目錄下的內容,不含本身。
(3)、rsync守護進程模式
首先要搭建rsync服務端(要有守護進程),然后才能在客戶端實現推拉數據
企業運維的重要模式:
Rsync服務模式:*****開啟后臺進程,接受別人訪問
7、rsync命令參數
企業常用參數組合:-avz或者-vzrtopg
8、rsync守護進程模式應用實踐
第一步:以下操作都是在backup服務器
(1)、安裝
[root@backup01/]# rsync --version
rsync?version 3.1.2? protocol version 31
(2)、配置配置文件/etc/rsyncd.conf
備份
[root@backup01/]# cp /etc/rsyncd.conf
{,.ori}
[root@backup01/]# 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
> timeout = 600
> pid file = /var/run/rsyncd.pid
> 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
> hosts deny = 0.0.0.0/32
> auth users = rsync_backup
> secrets file = /etc/rsync.password
> [backup]
> comment = welcome to oldboyedu backup!
> path = /backup/
> EOF
[root@backup01/]# cat /etc/rsyncd.conf -n
????1??? #rsync_config_______________start
????2??? #created by oldboy
????3??? #site: http://www.oldboyedu.com
????4??? uid = rsync???????????????????? < === 管理備份目錄的用戶
????5??? gid = rsync??????????????????? ?< ===管理備份目錄的用戶組
????6??? use chroot = no??????????????? ?< ===安全功能,數據是否鎖定到備份目錄
????7??? max connections = 200?????????? <
=== 并發連接,同時多少客戶端訪問
????8??? timeout = 600??????????????????< === 超時實踐
????9??? pid file = /var/run/rsyncd.pid?????? <
=== 進程號所在文件
10??? lock file = /var/run/rsync.lock?????? <
=== 鎖文件?? ????
11??? log file = /var/log/rsyncd.log?????? < === 日志文件,查看報錯等
???12??? ignore errors???????????????????? < === 忽略錯誤
???13??? read only = false????????????????? < === 可寫
???14??? list = false??????????????????????? < === 不允許列表
???15??? hosts allow = 172.16.1.0/24???????? <
=== 授權那些主機可以訪問
???16??? hosts deny = 0.0.0.0/32??????????? ?< ===拒絕哪些主機不允許訪問
???17??? auth users = rsync_backup????????? <
=== 遠程虛擬連接用戶
18??? secrets file = /etc/rsync.password???
< === 存放密碼的文件。格式:用戶名:密碼?權限:必須600
???19??? [backup]????????????????????????? < ===【模塊】遠程訪問時使用模塊名訪問
???20??? comment = welcome tooldboyedu backup!??????? ?<===說明注釋
21??? path = /backup/??? <
===服務器端用于備份的目錄。用戶和組:rsync.rsync
要了解知識的源頭:
Man rsync?查命令的參數
Man? rsyncd.conf???查配置參數
(3)、啟動和檢查
Rsync -daemon(c6及以前)
systemctl enable
rsyncd
systemctl status
rsyncd
[root@backup ~]#ps -ef|grep sync|grep -v grep? #檢查進程
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)
(4)、配置密碼文件
[root@backup01~]# echo
"rsync_backup:oldboy" > /etc/rsync.password
[root@backup01~]# chmod 600 /etc/rsync.password
[root@backup01~]# cat /etc/rsync.password
rsync_backup:oldboy
[root@backup01~]# ls -l /etc/rsync.password
-rw------- 1 root root 20 4月? 15 11:52 /etc/rsync.password
[root@backup01~]# useradd rsync
[root@backup01~]# id rsync
uid=1001(rsync) gid=1001(rsync) 組=1001(rsync)
[root@backup01~]# mkdir -p /backup
[root@backup01~]# chown -R rsync.rsync
/backup/
[root@backup01~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 6 4月? 15 12:13 /backup/
服務端配置完成。。。
第二步:以下操作都是在客戶端服務器
認證密碼文件
方法一:
[root@nfs01~]# echo "oldboy" >
/etc/rsync.password
[root@nfs01~]# chmod 600
/etc/rsync.password
[root@nfs01~]# cat /etc/rsync.password
oldboy
[root@nfs01~]# ls -l /etc/rsync.password
-rw------- 1 root root 7 4月? 15 11:55 /etc/rsync.password
方法二:
[root@nfs01~]# echo? ' export RSYNC_PASSWORD=oldboy'>>/etc/bashrc
[root@nfs01~]# echo $UID
0
[root@nfs01~]# tail -1 /etc/bashrc
?export RSYNC_PASSWORD=oldboy
[root@nfs01~]# . /etc/bashrc
[root@nfs01~]# echo $RSYNC_PASSWORD
Oldboy
rsync客戶端nfs01配置完成
第三步:守護進程模式,客戶端rsync的命令語法
配置服務器端守護進程,實現數據傳輸:
1、服務器端守護進程2、客戶端執行命令
pull,拉:從遠端拉取到本地。
語法1(常用):
rsync ? ? [OPTION...] [USER@]HOST::SRC... ? ? ? ? ? ? ? ? [DEST]
rsync命令 參數選項 [虛擬用戶]@[主機地址]::[模塊名] ? ? 本地路徑
語法2:
rsync ? ? [OPTION...] rsync://[USER@]HOST::SRC... ? ? ? ? ? ? ? [DEST]
rsync命令 參數選項 rsync://[虛擬用戶]@[主機地址]/[模塊名] 本地路徑
push,推:從本地推到遠端。
語法1(常用):? ? ? ? ? ? ? ?
rsync ? ? [OPTION...] ? [DEST]? ? ? ? [USER@]HOST::SRC... ? ? ? ? ? ? ? ?
rsync命令 參數選項 ? 本地路徑? ? ? [虛擬用戶]@[主機地址]::[模塊名] ? ?
語法2:? ? ? ? ? ? ? ? ? ?
rsync ? ? [OPTION...] ? [DEST] rsync://[USER@]HOST::SRC... ? ? ? ? ? ?
rsync命令 參數選項 ? 本地路徑 rsync://[虛擬用戶]@[主機地址]/[模塊名]
第四步:測試成果
[root@nfs01~]# rsync -avz /etc/hosts
rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
hosts
sent 222 bytes? received 43 bytes? 176.67 bytes/sec
total size is 332? speedup is 1.25
服務端檢查:
[root@backup01~]# ls /opt
hosts
?