1. 程式人生 > 實用技巧 >rsync資料備份

rsync資料備份

一、備份

1.什麼是備份?

把重要的資料或檔案再次複製一份並儲存下來

2.為什麼要做備份

1.資料重要
2.為了出現故障,恢復資料

3.能不能不備份

1.重要的資料一定要備份
2.不重要的可以不備份

4.備份的常用工具

cp
scp
rsync

二、rsync簡介

1.簡介

rsync英文稱為remote synchronizetion,從軟體的名稱就可以看出來,rsync具有可使本地和遠端兩臺主機之間的資料快速複製同步映象、
遠端備份的功能,這個功能類似於ssh帶的scp命令,但是又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。
當然,rsync還可以在本地主機的不同分割槽或目錄之間全量及增量的複製資料,這又類似cp命令。但是同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。

在同步資料的時候,預設情況下,rsync通過其獨特的“quick check”演算法,它僅同步大小或者最後修改時間發生變化的檔案或目錄,
當然也可根據許可權、屬主等屬性的變化同步,但是需要制定相應的引數,甚至可以實現只同步一個檔案裡有變化的內容部分,所以,可是實現快速的同步備份資料。
rsync簡稱遠端同步
不同主機之間傳遞資料:
Linux --->  windows   linux ---> linux   windows ---> linux   linux ---> mac

2.rsync特性

支援拷貝特殊檔案,如連線檔案、裝置等。
可以有排除指定檔案或目錄同步的功能,相當於打包命令tar的排除功能。
可以做到保持原檔案或目錄的許可權、時間、軟硬連結、屬主、組等所有屬性均不改變 –p。
可以實現增量同步,既只同步發生變化的資料,因此資料傳輸效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式來配合傳輸檔案(rsync本身不對資料加密)。
可以通過socket(程序方式)傳輸檔案和資料(服務端和客戶端)*****。
支援匿名的活認證(無需系統使用者)的程序模式傳輸,可以實現方便安全的進行資料備份和映象。

3.rsync生產場景

1.藉助cron+rsync把所有客戶端伺服器資料同步到備份伺服器。
2.針對公司重要資料備份混亂狀況和領導提出備份全網資料的解決方案。
3.通過本地打包備份,然後rsync結合inotify應用把全網數統一備份到一個固定儲存伺服器,然後在儲存伺服器上通過指令碼檢查並報警管理員備份結果。
4.定期將IDC機房的資料 備份公司的內部伺服器,防止機房地震及火災問題導致資料丟失。
5.實時同步,解決儲存伺服器等的單點問題。

4.備份型別

1.全備:將資料從頭備份一次
2.增備:對於新增加的資料進行備份
3.差異備份:針對上一次全備之後更新的資料進行備份

三、Rsync的應用場景

1.rsync傳輸方式

1.push 推
客戶端將資料傳輸到服務端

2.pull 拉
客戶端將資料下載下來


2.問題

1.push 推
當客戶端數量多,容易造成推送資料阻塞

2.pull 拉
如果客戶端數量過多,會對服務端造成很大壓力

3.大量伺服器備份場景

#假設:像現在有20臺機器要備份到一臺機器
使用推和拉結合的方式

4.異地備份場景

四、rsync傳輸模式

1.傳輸模式

1.本地方式
2.遠端方式
3.守護程序方式

2.本地方式(類似於CP)

類似於cp命令,但是cp是全量複製,每次都提示替換
rsync是增量,只要檔案屬性沒有更改就不會替換

1)語法

#本地拷貝資料命令
命令	   選項      原始檔  目標
rsync [OPTION...] SRC... [DEST]

2)示例

[root@backup ~]# rsync -avz 1.txt /tmp/
sending incremental file list

sent 44 bytes  received 12 bytes  112.00 bytes/sec
total size is 0  speedup is 0.00

[root@backup ~]# rsync -avz 1.txt /tmp/
#命令拆分
rsync	#命令
-avz	#選項
1.txt	#原始檔
/tmp/	#目標地址

2.遠端方式(類似於scp)

1)pull拉取資料

#語法:
命令	  選項       使用者 @ 主機:原始檔  目標地址
rsync [OPTION...] [USER@]HOST:SRC... [DEST]			#如果使用者不寫,則以當前使用者去連線遠端機器

#示例
[root@web01 ~]# rsync -avz [email protected]:/root/1.txt ./
receiving incremental file list
1.txt
sent 43 bytes  received 84 bytes  28.22 bytes/sec
total size is 0  speedup is 0.00

#拆分語句
rsync 				#命令
-avz 				#選項
root				#使用者
@					#分隔符
172.16.1.41:		#主機地址
/root/1.txt 		#原始檔,要拉取得檔案
./					#拉取到的目錄地址

#注意:
#拉取遠端伺服器目錄及目錄下的檔案
[root@web01 ~]# rsync -avz [email protected]:/tmp ./
#拉取遠端伺服器目錄下的檔案,不包含目錄本身
[root@web01 ~]# rsync -avz [email protected]:/tmp/ ./

2)push推送資料

#語法:
rsync [OPTION...] SRC... [USER@]HOST:DEST

#示例:
[root@web01 ~]# rsync -avz file1 [email protected]:/root/
[email protected]'s password: 
sending incremental file list
file1

sent 83 bytes  received 35 bytes  78.67 bytes/sec
total size is 0  speedup is 0.00

#命令拆分
rsync 				#命令
-avz				#選項
file1 				#原始檔
root				#使用者
@					#分隔符
172.16.1.41:		#主機
/root/				#目標地址

3.守護程序模式

1)為什麼使用守護程序模式

1.rsync遠端傳輸時需要使用系統使用者及密碼
2.如果使用普通使用者,又會出現許可權不足的情況

2)守護程序傳輸模式語法

#語法
rsync [OPTION...] [USER@]HOST::SRC... [DEST]

五、守護程序模式搭建

1.環境準備

主機 IP 身份
backup 172.16.1.41 rsync服務端
web01 172.16.1.7 rsync客戶端

2.安裝rsync(做備份的伺服器都安裝)

[root@backup ~]# yum install -y rsync

3.服務端配置

[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
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup


[root@backup ~]# vim /etc/rsyncd.conf
#指定執行程式的使用者
uid = rsync
#執行程式的使用者組
gid = rsync
#服務的監聽埠
port = 873
#不需要root使用者啟動,安全機制
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
#####################################
#模組名字
[backup]
#註釋
comment = welcome to oldboyedu backup!
#真實檔案目錄
path = /backup

4.服務端建立使用者

[root@backup ~]# useradd rsync -s /sbin/nologin -M

5.服務端建立密碼檔案

[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd

#授權
[root@backup ~]# chmod 600 /etc/rsync.passwd

6.服務端建立真實檔案目錄

[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/

7.服務端啟動服務

[root@backup ~]# systemctl start rsyncd

#驗證啟動
[root@backup ~]# netstat -lntp
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      18673/rsync 
tcp6       0      0 :::873                  :::*                    LISTEN      18673/rsync   
       
[root@backup ~]# ps -ef | grep rsync
root      18673      1  0 17:01 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
root      18680   7850  0 17:02 pts/0    00:00:00 grep --color=auto rsync

8.客戶端驗證推送

1)輸入密碼的方式

#推送資料
[root@web01 ~]# rsync -avz file2 [email protected]::backup
Password: 123456
sending incremental file list
file2

sent 87 bytes  received 43 bytes  37.14 bytes/sec
total size is 0  speedup is 0.00

#拉取資料
[root@web01 ~]# rsync -avz [email protected]::backup ./
Password: 
receiving incremental file list
./
qiudaodsb

sent 53 bytes  received 173 bytes  64.57 bytes/sec
total size is 0  speedup is 0.00

2)指定密碼檔案的方式

#客戶端配置密碼檔案
[root@web01 ~]# vim /etc/rsyncd.password
123456
[root@web01 ~]# echo "123456" > /etc/rsyncd.password

#授權
[root@web01 ~]# chmod 600 /etc/rsyncd.password

#推送資料
[root@web01 ~]# rsync -avz file3 [email protected]::backup --password-file=/etc/rsyncd.password 
sending incremental file list
file3

sent 87 bytes  received 43 bytes  86.67 bytes/sec
total size is 0  speedup is 0.00

#拉取資料
[root@web01 ~]# rsync -avz [email protected]::backup ./ --password-file=/etc/rsyncd.password
receiving incremental file list
./
qiudaocsb

sent 50 bytes  received 211 bytes  174.00 bytes/sec
total size is 0  speedup is 0.00

3)配置環境變數的方式

[root@web01 ~]# export RSYNC_PASSWORD=123456

#拉取資料
[root@web01 ~]# rsync -avz [email protected]::backup ./

#推送資料
[root@web01 ~]# rsync -avz file3 [email protected]::backup