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. 6)檢查rsync 873 端口是否處於監聽狀態 [root@backup ~]# netstat -antup | grep 873
7) rsync 客戶端僅需配置虛擬用戶的密碼,並受權爲600安全權限
#方式一:適合終端執行指定用戶密碼文件
[root@backup ~]# yum install rsync -y
[root@backup ~]# echo " 123456 " > /etc/rsync.pass
[root@backup ~]# chmod 600 /etc/rsync.pass
#方式二:腳本使用
[root@backup ~]# export RSYNC_PASSWORD=123456
實戰一:客戶端推送backup目錄下全部內容至rsync服務端
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup /backup/
實戰二:客戶端拉取rsync服務端backup模塊數據至本地客戶端的/backup 目錄
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz rsync_backup@172.16.1.41::backup /backup/
實戰三:rsync實現數據無差別同步
#拉取遠端數據:遠端與本地保持一致,遠端沒有本地有會被刪除,形成客戶段數據丟失
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/
#推送數據到遠端:本地與遠端保持一致,本地沒有遠端會被刪除,形成服務器端數據丟失
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --delete /date/ rsync_backup@172.16.1.41::backup/
實戰四: rsync的Limit限速
#文件過大致使內部交換機帶寬被沾滿,致使用戶的請求沒法響應
[root@backup ~]# export RSYNC_PASSWORD=123456
[root@backup ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/
步驟三、進入客戶端會話頁面,進行以下操做
客戶端頁面:
#建立虛擬用戶的密碼文件
[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目錄中 在守護進程中,不考慮加/或者不加/