rsync是一款開源、快速、多功能、可實現全量及增量的本地或遠程數據同步備份的優秀工具。rsync軟件適用於Unix/linux/Windows等多種操作系統平台。
33.1.1)Rsync簡介
rsync英文稱為remote synchronizetion,從軟件的名稱就可以看出來,rsync具有可使本地和遠程兩台主機之間的數據快速復制同步鏡像、遠程備份的功能,這個功能類似於ssh帶的scp命令,但是又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,rsync還可以在本地主機的不同分區或目錄之間全量及曾量的復制數據,這又類似cp命令。但是同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。
在同步數據的時候,默認情況下,rsync通過其獨特的“quick check”算法,它僅同步大小或者最后修改時間發生變化的文件或目錄,當然也可根據權限、屬主等屬性的變化同步,但是需要制定相應的參數,甚至可以實現只同步一個文件里有變化的內容部分,所以,可是實現快速的同步備份數據。
rsync監聽端口:873
rsync運行模式:C/S
client/server
客戶端/服務端
小提示:利用rsync還可以實現刪除文件和目錄的功能,這又相當於rm命令,一個rsync相當於scp、cp、rm,但是還優於他們的每一個命令。
33.1.2)Rsync的特性
1)支持拷貝特殊文件,如連接文件、設備等。 2)可以有排除指定文件或目錄同步的功能,相當於打包命令tar的排除功能。 3)可以做到保持原文件或目錄的權限、時間、軟硬鏈接、屬主、組等所有屬性均不改變 –p。 4)可以實現增量同步,既只同步發生變化的數據,因此數據傳輸效率很高(tar-N)。 5)可以使用rcp、rsh、ssh等方式來配合傳輸文件(rsync本身不對數據加密)。 6)可以通過socket(進程方式)傳輸文件和數據(服務端和客戶端)。 7)支持匿名的活認證(無需系統用戶)的進程模式傳輸,可以實現方便安全的進行數據備份和鏡像。
33.1.3)生產場景架構集群備份方案
1)借助cron+rsync把所有客戶服務器數據同步到備份服務器。 2)針對公司重要數據備份混亂狀況和領導提出備份全網數據的解決方案。 3)通過本地打包備份,然后rsync結合inotify應用把全網數統一備份到一個固定存儲服務器,然后在存儲服務器上通過腳本檢查並報警管理員備份結果。 4)定期將IDC機房的數據 備份公司的內部服務器,防止機房地震及火災問題導致數據丟失。 5)實時同步,解決存儲服務器等的單點問題。
33.1.4)備份類型介紹
備份類型有兩種,分別是完全備份和增量備份。
完全備份示意圖如下:
增量備份示意圖如下:
33.1.5)Rsync的應用場景
33.15.1)應用場景1:推
示意圖如下:
33.15.2)應用場景2:拉
示意圖如下:
33.15.3)應用場景3:大量數據備份場景
示意圖如下:
33.15.4)應用場景4:異地備份
示意圖如下:
33.1.6)Rsync的傳輸模式
Rsync有三種傳輸模式,分別是本地方式、遠程方式、守護進程。
33.1.6.1)本地傳輸方式
本地方式
類似於cp命令
命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/
命令語法:
#本地拷貝數據命令
Local: rsync [OPTION...] SRC... [DEST]
完整示例:
#在本地創建目錄file0801-1,在目錄file0801-1里創建文件f1.txt,在本地創建目標目錄ml-1
[root@web01 ~]# mkdir file0801-1
[root@web01 ~]# mkdir ml-1
[root@web01 ~]# cd file0801-1
[root@web01 file0801-1]# touch f1.txt
#拷貝目錄file0801-1至目錄ml-1下
rsync -avz file0801-1 /ml-1/
#檢查結果
sending incremental file list
file0801-1/
file0801-1/f1.txt
sent 123 bytes received 39 bytes 324.00 bytes/sec
total size is 0 speedup is 0.00
[root@web01 ~]# ll /ml-1/file0801-1
total 0
-rw-r--r-- 1 root root 0 Aug 1 16:12 f1.txt
33.1.6.2)遠程方式
遠程方式
類似於scp命令
命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/
命令語法:
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
完整示例:
#推 push
#先在客戶端web01創建要復制的目錄及文件
[root@web01 ~]# mkdir tmp2
[root@web01 ~]# cd tmp2
[root@web01 tmp2]# touch f1{.txt,.log}
#接着在服務器端backup上創建目標目錄
[root@backup ~]# mkdir tmp3
#拷貝客戶端上的tmp2目錄至服務器端的目錄tmp3中
[root@web01 tmp2]# rsync -avz tmp2 root@172.16.1.41:tmp3/
#檢查結果
客戶端頁面:
[root@web01 ~]# rsync -avz tmp2 root@172.16.1.41:tmp3/
root@172.16.1.41's password:
sending incremental file list
tmp2/
tmp2/f1.log
tmp2/f1.txt
sent 168 bytes received 58 bytes 90.40 bytes/sec
total size is 0 speedup is 0.00
服務器端頁面:(服務器端存在目錄tmp2,表示已拷貝成功)
[root@backup ~]# cd tmp3
[root@backup tmp3]# ll
total 0
drwxr-xr-x 2 root root 34 Aug 1 16:58 tmp2
[root@backup tmp3]# cd tmp2
[root@backup tmp2]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 1 16:58 f1.log
-rw-r--r-- 1 root root 0 Aug 1 16:58 f1.txt
完整示例:
#拉 pull
#先在服務器端backup上創建要復制的目錄及文件
[root@backup ~]# mkdir tp10
[root@backup ~]# cd tp10
[root@backup tp10]# touch aa.txt
#再在客戶端web01創建目標目錄
[root@web01 ~]# mkdir f08
[root@web01 ~]# mkdir f09
#拉服務器端上的tp10目錄至客戶端的目錄f08中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08
#拉服務器端上的tp10目錄至客戶端的目錄tp09中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09
#檢查結果
加/的情況下,只拷貝目錄里的內容(不包含目錄)
客戶端頁面:
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08
root@172.16.1.41's password:
receiving incremental file list
./
aa.txt
sent 46 bytes received 104 bytes 42.86 bytes/sec
total size is 0 speedup is 0.00
客戶端頁面:(客戶端存在aa.txt,但沒有目錄tp10)
[root@web01 ~]# cd f08
[root@web01 f08]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 1 18:00 aa.txt
不加/的情況下,拷貝目錄整體(包含目錄本身及目錄里的內容)
客戶端頁面
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09
root@172.16.1.41's password:
receiving incremental file list
tp10/
tp10/aa.txt
sent 47 bytes received 117 bytes 65.60 bytes/sec
total size is 0 speedup is 0.00
[root@web01 ~]# cd f09
[root@web01 f09]# ll
total 0
drwxr-xr-x 2 root root 20 Aug 1 18:00 tp10 #只拷貝了tp10目錄
[root@web01 f09]# cd tp10
[root@web01 tp10]# ll
total 0 #tp10下的文件並沒有拷貝過來
PS:注意: rsync不管是推還是拉,推送目錄的時候帶/和不帶/
1.帶/ :/etc/ 將etc目錄里的所有內容(不包括目錄),推過去或者拉過來
2.不帶/:/etc 將etc目錄整體(包括目錄及目錄里的所有內容)推過去或者拉過來
33.1.6.3)守護進程
步驟1、客戶端、服務端安裝rsync
客戶端: web01-10.0.0.7
[root@web01 ~]# yum install -y rsync
服務端: backup-10.0.0.41
[root@backup ~]# yum install -y rsync
步驟2、進入服務端會話頁面,進行如下操作
服務端頁面:
1)先修改配置文件:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup
配置文件詳解:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync #用戶名
gid = rsync #用戶組
port = 873 #端口
fake super = yes #無需讓rsync以root身份運行
use chroot = no #禁錮目錄,不允許操作指定目錄之外的目錄
max connections = 200 #最大連接數200
timeout = 600 #超時時間600s 10分鍾
ignore errors #忽略錯誤信息
read only = false #關閉只讀,對備份數據可讀寫
list = false #不允許查看模塊信息
auth users = rsync_backup #認證用戶,定義虛擬用戶作為連接認證用戶
secrets file = /etc/rsync.passwd #認證用戶的密碼文件
log file = /var/log/rsyncd.log #日志文件
#####################################
#模塊(任意名字都可以)
[zls] #定義模塊信息
comment = welcome to oldboyedu backup! #注釋信息(無關緊要)
path = /backup #路徑,定義接收備份數據目錄
===============================================================
2)接着創建用戶
[root@backup ~]# id rsync #檢查用戶是否存在
id: rsync: no such user
#創建用戶(不允許登錄,不創建家目錄)
[root@backup ~]# useradd rsync -s /sbin/nologin -M
===============================================================
3)創建一個備份目錄
[root@backup ~]# mkdir /backup #創建目錄backup
#授權rsync用戶
[root@backup ~]# chown -R rsync.rsync /backup/
===============================================================
4)創建虛擬用戶及密碼文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456 #用戶名:密碼
[root@backup ~]# chmod 600 /etc/rsync.passwd #授權
===============================================================
5)啟動rsync添加開機自啟
[root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service
-rw-r--r-- 1 root root 237 Apr 26 01:17 /usr/lib/systemd/system/rsyncd.service
[root@backup ~]# systemctl start rsyncd #啟動rsyncd守護進程
[root@backup ~]# systemctl enable rsyncd #允許開機自啟
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
步驟3、進入客戶端會話頁面,進行如下操作
客戶端頁面:
#創建虛擬用戶的密碼文件
[root@web01 ~]# vim /etc/rsync.pass
1 #輸入密碼,對應服務器端密碼文件中的密碼
[root@web01 ~]# chmod 600 /etc/rsync.pass #授權
步驟4、在客戶端頁面,創建目錄,並在該目錄下批量創建文件
客戶端頁面:
[root@web01 ~]# mkdir /data #創建目錄data
[root@web01 ~]# cd /data #切換到目錄data
[root@web01 data]# touch file{1..50} #在目錄data下批量創建50個文件
Rsync的推操作:
[root@web01 data]# rsync -avz /data/ rsync_backup@172.16.1.41::wangxiaogang
#將目錄data推至服務器端 在守護進程中,不考慮加/或者不加/
Rsync的拉操作
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::wangxiaogang rt
#將服務器端的模板目錄拉至客戶端的rt目錄中 在守護進程中,不考慮加/或者不加/