1. 程式人生 > >CentOS 7使用rsync實現數據備份

CentOS 7使用rsync實現數據備份

rsync

一、rsync是什麽

在開始正式學習rsync之前,我們先來回答這個問題:rsync是什麽。

rsync(remote synchronize)是Liunx/Unix下的一個遠程數據同步工具。它可通過LAN/WAN快速同步多臺主機間的文件和目錄,並適當利用rsync算法(差分編碼)以減少數據的傳輸。rsync算法並不是每一次都整份傳輸,而是只傳輸兩個文件的不同部分,因此其傳輸速度相當快。除此之外,rsync可拷貝、顯示目錄屬性,以及拷貝文件,並可選擇性的壓縮以及遞歸拷貝。

三、rsync優點

rsync有以下幾個優點:

  • 可以鏡像保存整個目錄樹和文件系統。

  • 可以很容易做到保持原來文件的權限、時間、軟硬連接等。

  • 無需特殊權限即可安裝。

  • 擁有優化的流程和比較高的文件傳輸效率。

  • 可以使用shell(rsh、ssh)方式來傳輸文件。

  • 支持匿名運行。

  • 與scp相比,rsync傳輸速度絕對遠遠超過scp的傳輸速度。

我們在局域網中經常用rsync和scp傳輸大量mysql數據庫文件,發現rsync傳輸文件速度至少要比scp快20倍以上。

所以如果需要在Liunx/Unix服務器之間互傳海量數據時,建議選擇rsync進行傳輸。

四、運行模式(服務器)

rsync有兩種常用的認證方式,一種是rsync-daemon方式,另外一種是ssh方式(類似於scp)。在平時使用過程,我們使用最多的是rsync-daemon方式。

這種模式是基於C/S模式的,在這種模式下,rsync在後臺啟用了一個守護進程,這個守護進程在rsync服務器永久運行,用於接收請求傳輸文件,因此,客戶端既可以把文件推送(push)給守護進程,也可以向守護進程拉取(pull)文件。rsync的服務器模式非常適合為異地的中心備份服務器或數據異地存儲庫來使用。

案例介紹:

我們使用pull模式,我們有多個應用的服務器作為服務端,備份服務器作為客戶端,備份服務器向每個應用服務器拉取需要備份的數據,放到相應的目錄下面。

技術分享圖片

五、安裝配置rsync

1、安裝rsync

為了簡便,我們這裏直接使用yum進行安裝即可。

yum install rsync -y

2、配置rsync服務端(應用服務器)

我們有一臺雲盤的服務器,IP為10.0.2.15,我們在這臺服務器上面進行服務端的配置,我們需要備份的路徑為/data/nextcloud,首先進行配置文件的設定,我們設置的如下:

# cat /etc/rsyncd.conf

uid = root
gid = root
use chroot = yes
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

[nextcloud]
path = /data/nextcloud
comment = pan.comratings.com
read only = yes
write only = no
hosts allow = 10.0.2.30
list = no
ignore errors
auth users = backup
secrets file = /etc/rsyncd.pass

增加密碼認證文件:

# vim /etc/rsyncd.pass
backup:123456     #具有拉取數據的賬號密碼
chmod 600 /etc/rsyncd.pass

啟動服務器:

systemctl start rsyncd.service

3、配置rsync客戶端(備份服務器)

配置密碼認證文件,這裏只需配置密碼即可,賬號我們會在命令裏面指定:

# vim /etc/rsyncd.pass
123456
chmod 600 /etc/rsyncd.pass

4、進行數據拉取測試

我們在備份服務器上面同樣安裝rsync,然後進行如下指令進行數據拉取:

rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass [email protected]::nextcloud /data/10.0.2.15/nextcloud

技術分享圖片

v是“--verbose”顯示詳細輸出模式
z是“--compress”壓縮模式
r是“--recursive”以子目錄遞歸模式
t是“--times“用來保持文件信息時間
o是”--owner“用來保持文件的屬主信息
p是”--perms“用來保持文件權限
g是”--group“用來保持文件的屬組
--progress:用來顯示數據鏡像同步的過程
--delete:指定以rsync服務器為基準進行數據鏡像同步,也就是要保持rsync服務器端目錄與客戶端目錄的完全一致
--exclude:用於排除不需要文件傳輸的類型
/date/10.0.2.15/nextcloud:用戶指定備份文件在客戶端機器上的存放路徑

5、客戶端添加定時任務

crontab -e
# 10.0.2.15 backup
00 01 * * * root /usr/bin/rsync -vzrtopgn --delete --progress --password-file=/etc/rsyncd.pass [email protected]::nextcloud /data/10.0.2.15/nextcloud

註意:

  • --delete:如果源端沒有此文件,那麽目的端也別想擁有,刪除之。(如果你使用這個選項,就必須搭配-r選項一起)

  • --delete-excluded:專門指定一些要在目的端刪除的文件。

  • --delete-after:默認情況下,rsync是先清理目的端的文件再開始數據同步;如果使用此選項,則rsync會先進行數據同步,都完成後再刪除那些需要清理的文件。

看到這麽多delete,你是否有點肝顫? 的確,在rsync的官方說明裏也有這麽一句話:

This option can be dangerous if used incorrectly!  
It is a very good idea to run first using the dry  run  option
(-n) to see what files would be deleted to make sure 
important files aren‘t listed.

從這句話裏,我們學到了一個小技巧,那就是-n選項,它是一個嚇唬人的選項,它會用受影響的文件 列表來警告你,但不會真的去刪除,這就讓我們有了確認的機會和回旋的余地。所以我們在定時任務添加了-n參數。

附錄:配置文件

以下是配置文件的一些參數講解:

pid file = /var/run/rsyncd.pid    #進程 pid 文件所在位置
port = 873    #指定監聽端口,默認是873,可以自己指定
address = 10.0.2.15    #服務器監聽的IP地址,可省略
uid = root   #守護進程所屬的uid,默認是nobody,可能會碰到文件或目錄權限問題,此處偷懶用的 root
gid = root   #守護進程的gid
#chroot,即改變程序執行時所參考的根目錄位置,在傳輸文件之前,服務器守護程序在將chroot 到文件系統中的目錄中
#這樣做的好處是可能保護系統被安裝漏洞侵襲的可能。缺點是需要超級用戶權限。另外對符號鏈接文件,將會排除在外
#也就是說,你在 rsync服務器上,如果有符號鏈接,你在備份服務器上運行客戶端的同步數據時,
#只會把符號鏈接名同步下來,並不會同步符號鏈接的內容
use chroot = yes
read only = yes   #只讀選擇,只讓客戶端從服務器上讀取文件
write only = no   #只寫選擇,只讓客戶端到服務器上寫入
#允許訪問的IP,可以指定單個IP,也可以指定整個網段,能提高安全性。
#格式是 ip 與 ip 之間、ip 和網段之間、網段和網段之間要用空格隔開;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 
max connections = 5     #客戶端最多連接數
log file = /var/log/rsync.log      #rsync 服務器的日誌;
transfer logging = yes      #記錄傳輸文件的日誌
log format = %t %a %m %f %b      #日誌格式
syslog facility = local3 #日誌級別
#通過該選項可以覆蓋客戶指定的IP超時時間。可以確保rsync服務器不會永遠等待一個崩潰的客戶端。
#超時單位為秒鐘,0表示沒有超時定義,這也是默認值。對於匿名rsync服務器來說,一個理想的數字是600。
timeout = 300 
#模塊定義
#主要是定義服務器哪個目錄要被同步。
#每個模塊都要以[name]形式。這個名字就是在 rsync 客戶端看到的名字。
#但是服務器真正同步的數據是通過 path 指定的。可以依次創建多個模塊。
#每個模塊要指定認證用戶、密碼文件,但排除並不是必須的。
[nextcloud]    #模塊名,以下配置都屬於此模塊
path = /data/nextcloud     #文件目錄所在位置
list = no    #當查看服務器上提供了哪些目錄時是否列出來,no比較安全
ignore errors    #忽略I/O錯誤
#指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模塊。這裏的用戶和系統用戶沒有任何關系,是 rsyncd.secrets 中的用戶名!
#如果"auth users"被設置,那麽客戶端發出對該模塊的連接請求以後會被rsync請求challenged進行驗證身份。
#這裏使用的 challenge/response 認證協議。
#用戶的名和密碼以明文方式存放在"secrets file"選項指定的文件中。默認情況下無需密碼就可以連接模塊(也就是匿名方式)。
auth users = backup
secrets file = /etc/rsyncd.pass    #密碼文件



技術分享圖片

本文出自 “運維點滴記錄” 博客,請務必保留此出處http://wzlinux.blog.51cto.com/8021085/1983734

CentOS 7使用rsync實現數據備份