備份服務的部署---Rsync

一、rsync 簡介

  Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件,也可以使用 Rsync 同步本地硬盤中的不同目錄。 
  Rsync 是用於取代rcp的一個工具,Rsync使用所謂的 “Rsync 算法” 來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。您可以參考 How Rsync Works A Practical Overview 進一步瞭解 rsync 的運作機制。
  Rsync支持大多數的類Unix系統,無論是Linux、Solaris還是BSD上都經過了良好的測試。此外,它在windows平臺下也有相應的版本,比較知名的有cwRsync和Sync2NAS。
  Rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerras,它當前由 http://rsync.samba.org維護。
  Rsync的基本特點如下:
  1. 可以鏡像保存整個目錄樹和文件系統;
  2. 可以很容易做到保持原來文件的權限、時間、軟硬鏈接等;
  3. 無須特殊權限即可安裝;
  4. 優化的流程,文件傳輸效率高;
  5. 可以使用rcp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接;
  6. 支持匿名傳輸,以方便進行網站鏡像。
  在使用 rsync 進行遠程同步時,可以使用兩種方式:遠程 Shell 方式(建議使用 ssh,用戶驗證由 ssh 負責)和 C/S 方式(即客戶連接遠程 rsync 服務器,用戶驗證由 rsync 服務器負責)。
  無論本地同步目錄還是遠程同步數據,首次運行時將會把全部文件拷貝一次,以後再運行時將只拷貝有變化的文件(對於新文件)或文件的變化部分(對於原有文件)。
  rsync 在首次複製時沒有速度優勢,速度不如 tar,因此當數據量很大時您可以考慮先使用 tar 進行首次複製,然後再使用 rsync 進行數據同步。

二、服務端和客戶端安裝rsync服務

1. 檢查rsync 是否已經安裝

rpm -qa|grep rsync

2. 安裝rsync

yum install -y rsync

三、配置 rsync 服務

1. 服務端配置方式

  a. 編寫配置文件

[root@backup ~]# vim /etc/rsyncd.conf

##created by SouthBay
###rsyncd.conf start##
    
uid = rsync       #  指定管理備份目錄的用戶  
gid = rsync       #  指定管理備份目錄的用戶組
port = 873        #  定義rsync備份服務的網絡端口號
fake super = yes  #  將rsync虛擬用戶僞裝成爲一個超級管理員用戶 
use chroot = no   #  和安全相關的配置
max connections = 200  #  最大連接數  同時只能有200個客戶端連接到備份服務器
timeout = 300          #  超時時間(單位秒)
pid file = /var/run/rsyncd.pid    #  記錄進程號碼信息 1.讓程序快速停止進程 2. 判斷一個服務是否正在運行
lock file = /var/run/rsync.lock   #  鎖文件
log file = /var/log/rsyncd.log    #  rsync服務的日誌文件 用於排錯分析問題
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]                             #  模塊信息
comment = "backup dir by SouthBay"  
path = /backup                       #  模塊中配置參數 指定備份目錄

  b. 創建rsync服務的虛擬用戶

useradd rsync -M -s /sbin/nologin

  c. 創建備份服務認證密碼文件

echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password  #  修改密碼文件權限爲600

  d. 創建備份目錄並修改屬主屬組信息

mkdir /backup
chown rsync.rsync /backup/

  e. 啓動備份服務

systemctl start rsyncd
systemctl enable rsyncd

  f. 查看服務狀態

systemctl status rsyncd

2. 客戶端配置方式

  a. 創建一個密碼文件

    方法一:

echo "123456" >/etc/rsync.password
chmod 600 /etc/rsync.password

    方法二:

export RSYNC_PASSWORD=123456  # 臨時生效配置
echo "export RSYNC_PASSWORD=123456" >> /etc/bashrc  # 永久生效配置

   注:方法二使用定時任務時執行rsync命令備份時要重新定義這個密碼變量

  b. 進行免交互傳輸數據測試

rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
 # 方法一可以使用這種方法
rsync -avz /etc/hosts [email protected]::backup  # 配置了方法二的密碼,可以使用

四、rsync使用方法

1.本地備份數據

rsync [OPTION...] SRC... [DEST]
 OPTION: 參數
 src: 要備份的數據信息
 dest: 備份到什麼路徑中

2.遠程備份數據

Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
       # OPTION: 參數
       # [USER@]: 以什麼用戶身份拉取數據(默認以當前用戶)
       # HOST: 指定遠程主機IP地址或者主機名稱
       # SRC: 要拉取的數據信息
       # DEST: 保存到本地的路徑信息
   
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
       # OPTION: 參數
       # SRC: 本地要進行遠程傳輸備份的數據
       # [USER@]: 以什麼用戶身份推送數據(默認以當前用戶)
       # HOST: 指定遠程主機IP地址或者主機名稱
       # DEST: 保存到遠程的路徑信息

3. 守護進程方式備份數據

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
      rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
       # OPTION: 參數
       # [USER@]: 指定認證用戶信息
       # HOST: 指定遠程主機IP地址或者主機名稱
       # [:PORT]: 指定端口
       # SRC: 要拉取的數據信息
       # DEST: 保存到本地的路徑信息
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
      rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
       # OPTION: 參數
       # SRC: 要推送備份數據信息
       # [USER@]: 指定認證用戶信息
       # HOST: 指定遠程主機的IP地址或者主機名稱
       # [:PORT]: 指定端口
       # ::DEST: 備份服務器的模塊信息

4. 參數說明: 

Rsync 參數說明
參數信息 參數說明
-v  --verbose 顯示詳細的傳輸信息
-a  --archive 命令的歸檔參數 包含: rtopgDl
-r  --recursive 遞歸參數
-t  --times 保持文件屬性信息時間信息不變(修改時間)
-o  --owner 保持文件屬主信息不變
-g  --group 保持文件屬組信息不變
PS: 如何讓-o和-g參數生效,需要將配置文件uid和gid改爲root,需要將 fake super參數進行註釋
-p  perms 保持文件權限信息不變
-D 保持設備文件信息不變
-l  links 保持鏈接文件屬性不變
-L  保持鏈接文件數據信息不變
-P 顯示數據傳輸的進度信息
--exclude=PATTERN 排除指定數據不被傳輸
--exclude-from=file 排除指定數據不被傳輸(批量排除)
--bwlimit=RATE 顯示傳輸的速率  100Mb/8=12.5MB
--delete 無差異同步參數(慎用)
--partial 斷點續傳,保留部分傳輸文件
--partial-dir=DIR 斷點續傳,保留部分文件到文件夾內,傳輸完後刪除該文件

五、rsync常見問題

1. rsync服務端防火牆問題

  • 錯誤提示
    No route to host
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    rsync: failed to connect to 172.16.1.41: No route to host (113)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
  • 問題解決
    Rsync服務端開啓了防火牆功能,關閉即可。

2. 客戶端執行rsync命令發生錯誤問題

  • 錯誤提示
    The remote path must start with a module name not a /
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::/data --password-file=/etc/rsync.pass
    ERROR: The remote path must start with a module name not a /
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  • 問題解決
    rsync命令語法錯誤,::/data錯誤的語法,data爲模塊,而不是目錄,正確寫法::data。

3. Rsync用戶認證失敗問題

  • 錯誤提示
    auth failed on module data
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    @ERROR: auth failed on module data
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  • 問題解決
    1.客戶端rsync命令認證用戶沒寫對,或者認證文件密碼所在行的結尾有多餘的空格或tab(cat -A /etc/rsync.pass檢查)
    2.客戶端認證文件/etc/rsync.pass配置錯誤,不需要rsync_backup認證用戶,只需要設置認證密碼即可。
    3.服務端認證文件中rsync_backup:123456後有空行或tab,需要注意。
    4.服務端認證文件/etc/rsync.pass權限不是600。
    5.服務端rsyncd.conf配置文件中,secrets file參數設置的認證文件名稱與系統中創建的認證文件名稱不一致。
    6.服務端rsyncd.conf配置文件中,uid和gid設置的管理用戶與備份目錄管理用戶不一致。

4. Rsync服務權限阻止問題

  • 錯誤提示
    Permission denied
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    sending incremental file list
    hosts
    rsync: mkstemp ".hosts.dGfSQ1" (in data) failed: Permission denied (13)

    sent 180 bytes received 27 bytes 414.00 bytes/sec
    total size is 294 speedup is 1.42
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
  • 問題解決
    1.服務端/etc/rsyncd.conf文件中,uid和gid設置的管理用戶與備份目錄的屬主和屬組不一致。
    2.備份目錄的文件權限不是755。

5. Rsync服務備份模塊異常問題

  • 錯誤提示
    Unknown module 'data'
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    @ERROR: Unknown module 'data'
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  • 問題解決
    1.客戶端rsync命令執行時,指定的模塊名稱不正確。
    2.服務端/etc/rsyncd.conf文件中,指定的備份目錄的模塊名稱不正確。

6. Rsync服務備份目錄異常問題

  • 錯誤提示
    chdir failed
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    @ERROR: chdir failed
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  • 問題解決
    服務端/etc/rsyncd.conf文件中,備份目錄模塊path路徑設置存在問題,檢查目錄是否存在,或者path路徑是否填寫正確。

7. Rsync無效的用戶問題

  • 錯誤提示
    invalid uid mine
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    @ERROR: invalid uid mine
    rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
  • 問題解決
    服務端管理備份目錄的虛擬用戶不存在,通過“useradd 用戶 -M -s /sbin/nologin”進行創建即可。

8. 配置了免交互方式備份數據,客戶端依舊需要輸入密碼問題

  • 錯誤提示
    password file must not be other-accessible
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    password file must not be other-accessible
    continuing without password file
    Password:
    sending incremental file list

    sent 26 bytes received 8 bytes 9.71 bytes/sec
    total size is 294 speedup is 8.65
  • 問題解決
    Rsync客戶端的認證文件不是600權限。

 9. Rsync服務未開啓問題

  • 錯誤提示
    Connection refused
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    rsync: failed to connect to 172.16.1.41: Connection refused (111)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
  • 問題解決
    1.檢查服務:ps -ef|grep [r]sync
    2.開啓服務:rsync --daemon

10. Rsync服務連接超時問題

  • 錯誤提示
    Connection timed out
  • 演示過程
    [root@nfs ~]# rsync -avz /etc/hosts [email protected]::data --password-file=/etc/rsync.pass
    rsync: failed to connect to 172.16.1.51: Connection timed out (110)
    rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
  • 問題解決
    檢查目標主機IP地址,ping目標主機檢查鏈路是否正常。
    [root@nfs ~]# ping 172.16.1.41
    PING 172.16.1.41 (172.16.1.41) 56(84) bytes of data.
    64 bytes from 172.16.1.41: icmp_seq=1 ttl=64 time=0.438 ms

11. Rsync服務連接慢的問題

  • 日誌分析
    [root@backup ~]# tailf /var/log/rsyncd.log
    2019/06/27 12:49:35 [22251] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
    --- 未對rsync客戶端主機在服務端進行host解析,導致反向解析域名,使得連接緩慢。
    2019/06/27 12:49:55 [22251] name lookup failed for 172.16.1.31: Temporary failure in name resolution
    2019/06/27 12:49:55 [22251] connect from UNKNOWN (172.16.1.31)
    2019/06/27 12:49:55 [22251] rsync to data/ from rsync_backup@unknown (172.16.1.31)
    2019/06/27 12:49:55 [22251] receiving file list
    2019/06/27 12:49:56 [22251] sent 76 bytes received 81 bytes total size 294
  • 問題解決
    [root@backup ~]# echo -e '172.16.1.31\tnfs' >>/etc/hosts
    [root@backup ~]# tailf /var/log/rsyncd.log
    2019/06/27 12:55:06 [22268] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
    --- 可以查看到服務端對nfs主機進行了正確的反向解析過程。
    2019/06/27 12:55:06 [22268] connect from nfs (172.16.1.31)
    2019/06/27 12:55:06 [22268] rsync to data/ from rsync_backup@nfs (172.16.1.31)
    2019/06/27 12:55:06 [22268] receiving file list
    2019/06/27 12:55:06 [22268] sent 76 bytes received 81 bytes total size 294
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章