rsync是一款開源、快速、多功能、可實現全量及增量的本地或遠程數據同步備份的優秀工具。rsync軟件適用於Unix/linux/Windows等多種操做系統平臺。linux
rsync英文稱爲remote synchronizetion,從軟件的名稱就能夠看出來,rsync具備可以使本地和遠程兩臺主機之間的數據快速複製同步鏡像、遠程備份的功能,這個功能相似於ssh帶的scp命令,可是又優於scp命令的功能,scp每次都是全量拷貝,而rsync能夠增量拷貝。固然,rsync還能夠在本地主機的不一樣分區或目錄之間全量及曾量的複製數據,這又相似cp命令。可是一樣也優於cp命令,cp每次都是全量拷貝,而rsync能夠增量拷貝。web
在同步數據的時候,默認狀況下,rsync經過其獨特的「quick check」算法,它僅同步大小或者最後修改時間發生變化的文件或目錄,固然也可根據權限、屬主等屬性的變化同步,可是須要制定相應的參數,甚至能夠實現只同步一個文件裏有變化的內容部分,因此,但是實現快速的同步備份數據。算法
rsync監聽端口:873shell
rsync運行模式:C/Svim
client/server安全
客戶端/服務端服務器
小提示:利用rsync還能夠實現刪除文件和目錄的功能,這又至關於rm命令,一個rsync至關於scp、cp、rm,可是還優於他們的每個命令。架構
1)支持拷貝特殊文件,如鏈接文件、設備等。 2)能夠有排除指定文件或目錄同步的功能,至關於打包命令tar的排除功能。 3)能夠作到保持原文件或目錄的權限、時間、軟硬連接、屬主、組等全部屬性均不改變 –p。 4)能夠實現增量同步,既只同步發生變化的數據,所以數據傳輸效率很高(tar-N)。 5)可使用rcp、rsh、ssh等方式來配合傳輸文件(rsync自己不對數據加密)。 6)能夠經過socket(進程方式)傳輸文件和數據(服務端和客戶端)。 7)支持匿名的活認證(無需系統用戶)的進程模式傳輸,能夠實現方便安全的進行數據備份和鏡像。ssh
1)藉助cron+rsync把全部客戶服務器數據同步到備份服務器。 2)針對公司重要數據備份混亂情況和領導提出備份全網數據的解決方案。 3)經過本地打包備份,而後rsync結合inotify應用把全網數統一備份到一個固定存儲服務器,而後在存儲服務器上經過腳本檢查並報警管理員備份結果。 4)按期將IDC機房的數據 備份公司的內部服務器,防止機房地震及火災問題致使數據丟失。 5)實時同步,解決存儲服務器等的單點問題。socket
備份類型有兩種,分別是徹底備份和增量備份。
徹底備份示意圖以下:
增量備份示意圖以下:
示意圖以下:
示意圖以下:
示意圖以下:
示意圖以下:
Rsync有三種傳輸模式,分別是本地方式、遠程方式、守護進程。
本地方式
相似於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
遠程方式
相似於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目錄總體(包括目錄及目錄裏的全部內容)推過去或者拉過來
步驟一、客戶端、服務端安裝rsync
客戶端: web01-10.0.0.7
[root@web01 ~]# yum install -y rsync
服務端: backup-10.0.0.41
[root@backup ~]# yum install -y rsync
步驟二、進入服務端會話頁面,進行以下操做
服務端頁面:
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.
步驟三、進入客戶端會話頁面,進行以下操做
客戶端頁面:
#建立虛擬用戶的密碼文件
[root@web01 ~]# vim /etc/rsync.pass
1 #輸入密碼,對應服務器端密碼文件中的密碼
[root@web01 ~]# chmod 600 /etc/rsync.pass #受權
步驟四、在客戶端頁面,建立目錄,並在該目錄下批量建立文件
客戶端頁面:
[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目錄中 在守護進程中,不考慮加/或者不加/