如何使用RSYNC搭建備份服務器

1. RSYNC介紹

RSYNC是一款開源的,快速的,多功能的,可實現全量及增量的本地或遠程數據同步備份的優秀工具。Rsync軟件適用於unix/linux/windows等多種操做系統平臺。html

遠程數據備份工具,能夠實現全備份及增量備份,也能夠本地備份。linux

英文全稱是Remote synchronization.
具備如下三種功能:shell

  1. 遠程copy的功能:至關於ssh自帶的scp命令,可是又優於scp命令,scp每次都是全量拷貝。rsync高在增量拷貝,scp每次都是全量copy。
  2. 本地copy功能:至關因而cp命令,可是又優於cp命令,由於cp每次都是全量copy。
  3. rsync還能夠實現刪除功能:至關於rm命令。

CentOS5.X中自帶的rsync版本都是2.6.x的版本,該版本存在的問題主要是性能方面的,好比,同步大量小文件時容易出現內存溢出或同步中斷等現象,這主要與其2.6版本採用先列文件列表,再進行同步的處理機制有關,在處理大文件同步時也市場發生同步文件不完整的現象.不過在CentOS6.x系列rsync版本都進行了升級,本篇文章使用的linux系統是CentOS6.7, 自帶的rsync的版本是3.0.6.windows

2. RSYNC的特性

下面的特性是從rsync官方網站上抄錄的:安全

  1. support for copying links, devices, owners, groups, and permissions
    支持拷貝連接,設備,用戶,用戶組和屬性權限。
  2. exclude and exclude-from options similar to GNU tar
    支持像tar同樣排除(或者從文件中排除)備份文件的特性
  3. a CVS exclude mode for ignoring the same files that CVS would ignore
    支持CVS排除文件模式
  4. can use any transparent remote shell, including ssh or rsh
    支持遠程shell(ssh,rsh等)數據傳輸
  5. does not require super-user privileges
    不須要超級用戶的權限
  6. pipelining of file transfers to minimize latency costs
    rsync3.x版本之後是一邊比較文件一邊進行傳輸,減小了文件傳輸的延遲
  7. support for anonymous or authenticated rsync daemons (ideal for mirroring)
    支持匿名或須要驗證的rsync守護進程模式

3. 使用的工做場景

  1. 把全部客戶數據數據同步到備份服務器(能夠配合定時任務,實現天天定時備份)
    服務器

  2. 實時同步(解決存儲服務器的單點故障問題),rsync結合inotify的功能作實時數據同步。
    ssh

4. RSYNC的工做方式

Rsync大體使用三種主要的傳輸數據的方式:socket

  • 單個主機本地之間的數據傳輸(此時相似於cp命令的功能)[本地傳輸模式]
  • 藉助rcp,ssh等通道來傳輸數據(此時相似於scp命令的功能)[遠程shell傳輸模式]
  • 以守護進程(socket)的方式傳輸數據(這個是rsync自身的重要的功能)[守護進程模式]

官方介紹:ide

1. Local:  rsync [OPTION...] SRC... [DEST]
2. Access via remote shell:
        Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
        Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3. Access via rsync daemon:
        Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
              rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
        Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
              rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

以上這些就是關於rsync的一些基本理論介紹。看着比較枯燥,下面開始實戰之旅:工具

5. 實戰環境介紹

衆所周知,linux有不一樣的發行商,內核也有不一樣的版本,下面是本篇文章的實驗版本:

[root@backup ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)
[root@backup ~]# uname -a
Linux backup 2.6.32-573.26.1.el6.x86_64 #1 SMP Wed May 4 00:57:44 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@backup ~]#

Rsync的版本:

[root@backup ~]# rsync --version
rsync  version 3.0.6  protocol version 30

首先確認Rsync是否已經安裝:

[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
[root@backup ~]# 
出現了這個信息說明已經安裝,若是系統上沒有安裝rsync可使用下面的命令進行安裝:
yum install rsync -y

6. 實戰之本地傳輸模式

本地傳輸模式實現的是本地同步功能,至關因而cp,rm等命令,說的簡單一點就是在同一臺機器上把數據從一個地方拷貝到另外一個地方或者刪除數據,rsync比cp命令高級的地方在於,rsync拷貝時使用的是增量拷貝,即只會把不一樣的內容拷貝過去,這樣就大大提高了性能。

  1. 語法格式

    rsync [OPTION...] SRC... [DEST]
  2. 語法說明:

    1. rsync爲同步的命令
     2. [option]爲同步時須要的參數
     3. SRC爲源,即待拷貝的分區,文件或目錄
     4. [DEST]爲目的分區,文件或目錄
  3. 示例:

    本地拷貝命令
     [root@backup ~]# cp /etc/hosts /tmp             #使用cp命令拷貝文件
     [root@backup ~]# rsync /etc/hosts /opt         #使用rsync命令拷貝文件
     [root@backup ~]# ls /opt/hosts
     /opt/hosts
     [root@backup ~]#
    
     本地刪除命令:(這個功能比較危險,通常不建議用)
     [root@backup ~]# mkdir /null -p     #建立一個不包含任何文件的空目錄,名稱隨意
     [root@backup ~]# ls /tmp/
     a.txt  hosts  today_backup_file.txt
     [root@backup ~]# rsync -avz --delete /null/ /tmp    #而後把這個空目錄拷貝到要刪除的目錄,加--delete參數就實現了rsync的刪除功能, 這裏須要注意/null/這個目錄後面必定要加/,不能寫成/null這樣,寫成這樣的話,就會把/null這個目錄(包含目錄名)拷貝到/tmp目錄下,就實現不了刪除的功能了。
     sending incremental file list
     ./
     deleting .ICE-unix/
     deleting today_backup_file.txt
     deleting hosts
     deleting a.txt
     deleting .pwd.lock
    
     sent 29 bytes  received 15 bytes  88.00 bytes/sec
     total size is 0  speedup is 0.00
     [root@backup ~]#
  4. 重要參數介紹

    -r --recursive 遞歸模式,子目錄下的全部目錄都一樣傳輸
     -t --times 保持文件時間信息
     -o --owner 保持文件屬主信息
     -p –perms 保持文件權限
     -g --group保持文件屬性
     -P --progress 顯示同步的過程及傳輸時的進度等信息
     -D --devices 保持設備文件信息
     -l --links 保留軟鏈接
     -e --rsh=command 使用的通道協議,指定替代rsh的shell程序,例如ssh等
     --exclude=PATTERN 指定排除不須要傳輸的文件模式
     --exclude-from=file (文件名所在的目錄文件)
     --bwlimit=RATE 限制傳輸的速度
     更多參數,請參照:
     http://www.samba.org/ftp/rsync/rsync.html

    三個經常使用參數:

    -v –verbose 詳細輸出模式,傳輸時的進度等信息 
     -z –compress 傳輸時進行壓縮以提升傳輸效率, --compress-level=NUM可按級別壓縮  
     -a --archive 歸檔模式,表示以遞歸方式傳輸文件,並保持全部文件屬性,等於-rtopgDl

    7. 經過遠程shell進行數據傳輸(remote shell mode)

    用於兩臺機器之間數據的傳輸,好比把重要數據備份到服務器。這個模式至關因而scp命令實現的功能,不過rsync仍是能夠實現增量的拷貝,並且支持目錄的拷貝,這個是比rsync好用的地方。

經過遠程shell(rcp,ssh等)傳輸能夠分爲兩種狀況,其語法分別爲:

拉: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
推: rsync [OPTION...] SRC... [USER@]HOST:DEST

語法說明:

1.  rsync 爲同步的命令
2.  [OPTION...]爲同步時的參數選項
3.  [USER@]HOST:SRC...爲同步的遠程的連接用戶和主機地址
4.  SRC爲源,即待copy的分區,文件或目錄等,和HOST之間用一個冒號鏈接
5.  [DEST]爲目的分區,文件或目錄等

拉取表示從遠端主機把數據同步到執行命令的本地主機相應的目錄;
推送表示從本地主機執行命令把本地的數據同步到遠端主機指定目錄下。

拉取的語法示例:

rsync -avz -e 'ssh -p 22' root@172.16.1.41:/opt/ /tmp/

推送的語法示例:

rsync -avz -e 'ssh -p 22' /etc/ root@172.16.1.41:/tmp/

特別提示:
注意一下兩個命令的區別:

rsync –avz /opt/ /tmp/
rsync -avz /opt /tmp/

/opt/表示推送或拉取/opt目錄下的內容,/opt表示推送或拉取/opt目錄及其裏面的內容。

8. 實戰之使用RSYNC守護進程模式(重點)

能夠說,前面講的都是鋪墊,這個纔是重中之重。
工做原理:

RSYNC守護進程模式,包含服務器以及客戶機,服務器上啓動rsync的守護進程,客戶機配置對應的用戶名和密碼,實現客戶機到服務器的備份功能。RSYNC守護進程啓動的機器就是咱們文章標題所說的備份服務器。 其餘的機器做爲客戶端,向這臺機器推送數據,或從這臺機器上拉取數據。

在本篇文章的實戰中服務器端的host那麼是backup,因此咱們簡稱這臺服務器爲backup, 客戶機端的hostname是nsf01,同理,咱們簡稱這臺客戶機爲nfs01.

8.1 服務器端(bakup機器)配置

a. 首先確認軟件是否安裝:

[root@backup ~]# rpm -aq rsync
rsync-3.0.6-12.el6.x86_64
[root@backup ~]#

b. 建立用戶

[root@backup ~]# useradd rsync -s /sbin/nologin -M  #這個是rsync進程使用的用戶
[root@backup ~]# id rsync
uid=501(rsync) gid=501(rsync) 組=501(rsync)
[root@backup ~]#
客戶端連到服務器用rsync用戶訪問權限訪問數據

c. 建立服務器端的配置文件(rsyncd.conf)

#rsync_config_______________start
#created by grewan 07::23 2016-05-28
#Email:wangqj541@163.com blog: http://www.cnblogs.com/greta/
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log  #這個是rsync的log文件,比較有用
[backup]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end

配置文件說明:

參數 說明
uid=rsync rsync使用的用戶ID。缺省uid爲-2,一般爲nobody
gid=rsync rsync使用的組(用戶所在的組)。缺省gid爲-2,一般爲nobody
use chroot=no 若是爲true,daemon會在給客戶端傳輸文件前「chroot to the path」。這是rsync安全的一個配置,由於咱們大多數都是在內網使用rsync,因此不用配置也能夠
max connections=200 設置最大鏈接數,默認爲0,意思爲無限制,負值爲關閉這個模塊
timeout=300 默認爲0,意思爲no timeout,建議爲300-500(s)
pid file=/var/run/rsyncd.pid rsync daemon啓動後將其進程PID寫入此文件。若是這個文件已經存在,rsync進程不會覆蓋該文件,而是會終止
lock file=/var/run/rysncd.lock 指定loc文件用來支撐max connections的參數,使得總鏈接數不會超過限制,默認爲/var/run/rsyncd.lock
log file = /var/log/rsyncd.log rsync的日誌文件
ignore errors 忽略IO錯誤
read only = false 指定客戶端是否能夠上傳文件,默認對全部模塊都爲true
list = false 是否容許客戶端能夠查看可用模塊列表(相似ls),默認爲true
hosts allow = 172.16.1.0/24 指定能夠聯繫的客戶端主機名或者ip地址或者地址段,默認狀況沒有此參數,即均可以鏈接
hosts deny = 0.0.0.0/32 指定不可聯繫的客戶端主機名或IP地址或地址段,禁止他們鏈接。默認狀況沒有此參數,即均可以鏈接
auth users = rsync_backup 指定以空格或逗號分隔的用戶可使用哪些模塊,用戶不須要在本地系統中存在,默認全部用戶無密碼的訪問
secrets file = /etc/rsync.password 指定用戶名和密碼存放的文件。格式:用戶名:密碼, 密碼不超過8位
[backup] 模塊名稱,須要用中括號括起來,起名沒有特殊要求,但最好是有意義的名稱,便於之後維護
path = /backup/ 在這個模塊中,daemon使用的文件系統或目錄,目錄的權限要注意和配置文件中的權限一致,不然會遇到讀寫問題。

d. 建立備份目錄

[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/  #必定記得修改文件的用戶和用戶組
[root@backup ~]# ls -ld /backup/
drwxr-xr-x 2 rsync rsync 4096 5月  22 15:05 /backup/
[root@backup ~]#

e. 建立密碼文件(根據配置文件生生成)

[root@backup ~]# echo "rsync_backup:grewan" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password

f. 啓動服務

[root@backup ~]# rsync --daemon
[root@backup ~]# lsof -i :873    #rsync的端口是873, 使用這個命令檢查rsync服務是否啓動成功
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   3894 root    4u  IPv4  15807      0t0  TCP *:rsync (LISTEN)
rsync   3894 root    5u  IPv6  15808      0t0  TCP *:rsync (LISTEN) 
更多信息參考:[root@backup ~]# man rsyncd.conf
8.2 客戶端(nsf01機器)配置

a. 配置密碼文件

[root@nfs01 ~]# echo "grewan" > /etc/rsync.password

b. 修改密碼文件權限

[root@nfs01 ~]# chmod 600 /etc/rsync.password
8.3 示例測試

注意:這裏的示例都是在客戶機端(nsf01)上進行操做的,通常的使用場景都是從客戶機備份數據到服務器。

語法格式:

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]    #推數據到服務器,這種方式比較經常使用
      rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
      
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST     #從服務器拉數據,這種方式比較經常使用
      rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

1.在客戶端(nfs01)上建立/backup目錄,及測試文件

[root@grewan backup]# mkdir /backup -p   #建立目錄
[root@grewan backup]# touch {1..10}      #建立10個測試文件
[root@grewan backup]# ls
1  10  2  3  4  5  6  7  8  9

2.把客戶端/backup目錄中的內容,備份到備份服務器:

[root@nfs01 backup]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 
sending incremental file list
./
1
10
2
3
4
5
6
7
8
9

sent 450 bytes  received 201 bytes  1302.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs01 backup]#
命令說明: 
rsync -avz這個是命令和對應的參數
/backup/: 把backup目錄下的內容推送到服務器
rsync_backup@172.16.1.41::backup : 這個是服務器的信息,rsync_backup是配置文件/etc/rsyncd.conf中配置的用戶名,
          172.16.1.41是服務器的ip地址,backup是/etc/rsyncd.conf中配置的模塊名,這個地方必定不要弄錯,
          能夠再回去看看配置文件,加深印象
--password-file:指定密碼文件,不加這個參數的狀況下,要手動輸入密碼。

3.在備份服務器端(backup機器)查看備份的結果

[root@backup ~]# cd /backup/
[root@backup backup]# ls
1  10  2  3  4  5  6  7  8  9
[root@backup backup]#

4.第二種推送的方式
使用rsync協議的方式進行推送

[root@nfs01 backup]# rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup --password-file=/etc/rsync.password 
sending incremental file list
./
1
2
3
4
5

sent 239 bytes  received 106 bytes  690.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs01 backup]#

5.從備份服務器拉取內容

[root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup /backup/ --password-file=/etc/rsync.password 
receiving incremental file list
./
1
2
3
4
5

sent 162 bytes  received 326 bytes  325.33 bytes/sec
total size is 0  speedup is 0.00
[root@nfs01 backup]# ls
1  2  3  4  5
[root@nfs01 backup]#

6.第二種拉取的方式

[root@nfs01 backup]# rm -f *
[root@nfs01 backup]# rsync -avz rsync://rsync_backup@172.16.1.41/backup /backup/ --password-file=/etc/rsync.password 
receiving incremental file list
./
1
2
3
4
5

sent 162 bytes  received 326 bytes  976.00 bytes/sec
total size is 0  speedup is 0.00
[root@nfs01 backup]#

7.刪除rsync同步進程

kill `cat /var/run/rsyncd.pid`  
kill `/var/run/rsyncd.pid`

9. 多目錄共享

多目錄共享的意思是說客戶端能夠向服務器端多個目錄下進行推送或拉取。這個實現起來很簡單,就是在配置文件中配置多個模塊,每一個模塊能夠指定不一樣的用戶名,密碼等等信息。若是全部推送的模塊基本信息都相同,就能夠把配置信息放在多個模塊的上面,模塊只配置一個對應的路徑便可,像下面這個示例這樣:

[root@backup backup]# cat /etc/rsyncd.conf 
#rsync_config_______________start
#created by grewan 07::23 2016-05-28
#Email:wangqj541@163.com blog: http://www.cnblogs.com/greta/
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]            #這裏配置多個模塊,共同的配置項目,移動到模塊的上面
path = /backup/
[test]
path = /test/
#rsync_config_______________end
相關文章
相關標籤/搜索