Linux備份之遠程同步—rsync


一、備份

1.1 什么是備份?

備份就是把重要的數據或者文件復制一份保存到另一個地方,實現不同主機之間的數據同步

1.2 為什么做備份?

數據在公司中是很重要的!!!備份就是為了恢復數據。

1.3 能不能不做備份?

對於重要的數據一定要備份,對於不重要的數據可以不備份或者備份一部分。

1.4 備份的工具

  • 本地備份:cp
  • 遠程備份:scp rsync

发呆 - åƒç´ å›QQ表情包_微信表情包表情

1.5 scp命令及參數

  1. 概念及參數

    Linux中 scp 命令用於 Linux 之間復制文件和目錄。
    scp 是 secure copy 的縮寫, scp 是 linux 系統下基於 ssh 登陸進行安全的遠程文件拷貝命令。
    scp 是加密的,rcp 是不加密的,scp 是 rcp 的加強版。

    選項參數:
    	-1: 強制scp命令使用協議ssh1
    	-2: 強制scp命令使用協議ssh2
    	-4: 強制scp命令只使用IPv4尋址
    	-6: 強制scp命令只使用IPv6尋址
    	-B: 使用批處理模式(傳輸過程中不詢問傳輸口令或短語)
    	-C: 允許壓縮。(將-C標志傳遞給ssh,從而打開壓縮功能)
    	-p:保留原文件的修改時間,訪問時間和訪問權限。
    	-q: 不顯示傳輸進度條。
    	-r: 遞歸復制整個目錄。
    	-v:詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的調試信息。這些信息用於調試連接,驗證和配置問題。
    	-c cipher: 以cipher將數據傳輸進行加密,這個選項將直接傳遞給ssh。
    	-F ssh_config: 指定一個替代的ssh配置文件,此參數直接傳遞給ssh。
    	-i identity_file: 從指定文件中讀取傳輸時使用的密鑰文件,此參數直接傳遞給ssh。
    	-l limit: 限定用戶所能使用的帶寬,以Kbit/s為單位。
    	-o ssh_option: 如果習慣於使用ssh_config(5)中的參數傳遞方式,
    	-P port:注意是大寫的P, port是指定數據傳輸用到的端口號 
    	-S program: 指定加密傳輸時所使用的程序。此程序必須能夠理解ssh(1)的選項。
    
  2. 應用實例

    一、從本地復制文件到遠程
        1、復制本地文件到遠程目錄
        scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
        scp                         # 命令
        /home/space/music/1.mp3       # 本地文件
        root                        # 遠端服務器的的系統用戶    
        @                           # 分隔符,以哪個用戶身份登錄服務器
        www.runoob.com               # 遠程服務器的ip或域名
        :                           # 分隔符,指定服務器里面所在的目錄
        /home/root/others/music/      # 復制到遠程服務器的目錄地址
     
        2、復制本地文件到遠程目錄下,並重命名
        scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3
        scp                             # 命令
        /home/space/music/1.mp3           # 本地文件
        root                            # 遠端服務器的的系統用戶    
        @                               # 分隔符,以哪個用戶身份登錄服務器
        www.runoob.com                   # 遠程服務器的ip或域名
        :                               # 分隔符,指定服務器里面所在的目錄
        /home/root/others/music/001.mp3    # 復制到遠程服務器的目錄下並重命名001.mp3
     
     
    二、從本地復制目錄到遠程目錄下
        1、指定用戶名,命令執行后需要再輸入密碼
        scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ 
        scp                         # 命令
        -r                          # 選項
        /home/space/music/           # 本地目錄
        root                        # 遠端服務器的的系統用戶
        @                           # 分隔符,以哪個用戶身份登錄服務器
        www.runoob.com               # 遠程服務器的ip或域名
        :                           # 分隔符,指定服務器里面所在的目錄
        /home/root/others/           # 復制到遠程服務器的目錄地址
     
        2、不指定用戶名,命令執行后需要輸入用戶名和密碼
        scp -r /home/space/music/ www.runoob.com:/home/root/others/ 
        scp                         # 命令
        -r                          # 選項
        /home/space/music/           # 本地目錄
        www.runoob.com               # 遠程服務器的ip或域名
        :                           # 分隔符,指定服務器里面所在的目錄
        /home/root/others/           # 復制到遠程服務器的目錄地址
     
    三、從遠程復制到本地
        1、scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
          scp -r www.runoob.com:/home/root/others/ /home/space/music/
    

    好困 - åƒç´ å›QQ表情包_微信表情包表情

1.6 Rsync常用參數

選項參數:
-a           #歸檔模式傳輸, 等於-tropgDl    -t -r -o -p -g -D -l
-v           #詳細模式輸出, 打印速率, 文件數量等
-z           #傳輸時進行壓縮以提高效率
-r           #遞歸傳輸目錄及子目錄,即目錄下得所有目錄都同樣傳輸。
-t           #保持文件時間信息	
-o           #保持文件屬主信息
-g           #保持文件屬組信息	
-p           #保持文件權限	
-l           #保留軟連接	
-P           #顯示同步的過程及傳輸時的進度等信息
-D           #保持設備文件信息
-L           #保留軟連接指向的目標文件
-e           #使用的信道協議,指定替代rsh的shell程序

--append            # 指定文件接着上次傳輸中斷處繼續傳輸
--append-verify     # 使用參數續傳(在斷點續傳之后,驗證一下文件,如果不同,修復文件)

--exclude=PATTERN   # 指定排除不需要傳輸的文件
eg:	[root@m01 ~]# rsync -avzP --append-verify --exclude=2.txt  ./* root@172.16.1.41:/opt/

--exclude-from=file # 按照文件指定內容排除
eg:	[root@m01 ~]# rsync -avzP --append-verify --exclude-from=/tmp/exclude.txt  ./* root@172.16.1.41:/opt/

--bwlimit=100        # 限速傳輸(單位:MB)
--delete             # 讓目標目錄和源目錄數據保持一致
--password-file=xxx  # 使用密碼文件
--port               # 指定端口傳輸
  1. –exclude-from=file 排除不需要的文件

    #創建多個文件
    [root@web01 ~]# touch {1..10}.txt
    [root@web01 ~]# ll
    total 0
    drwxr-xr-x. 2 root root 6 Nov 19 08:44 dir
    -rw-r--r--. 1 root root 0 Nov 19 08:44 file
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt1
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt10
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt2
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt3
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt4
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt5
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt6
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt7
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt8
    -rw-r--r--. 1 root root 0 Nov 19 08:59 txt9
     
    #編輯文件寫入要排除的文件名字
    [root@web01 ~]# vim 1.txt 
    txt1
    txt2
    txt3
    txt4
     
    #指定排除文件推送內容
    [root@web01 ~]# rsync -avz ./* rsync_backup@172.16.1.41::backup --exclude-from=1.txt
    sending incremental file list
    1.txt
    txt10
    txt5
    txt6
    txt7
    txt8
    txt9
    dir/
     
    sent 468 bytes  received 165 bytes  422.00 bytes/sec
    total size is 20  speedup is 0.03
    #發現沒有傳輸1.txt中寫入名字的文件
    
  2. –bwlimit=100 限速傳輸

    #創建一個1G的文件
    [root@web01 ~]# dd if=/dev/zero of=./1.txt bs=10M count=100
     
    #限速1M每秒推送
    [root@web01 ~]# rsync -avzP 1.txt rsync_backup@172.16.1.41::backup --bwlimit=1
    sending incremental file list
    1.txt
        114,130,944  10%    1.01MB/s    0:15:06
     
    #限速10M每秒推送
    [root@web01 ~]# rsync -avzP 1.txt rsync_backup@172.16.1.41::backup --bwlimit=10
    sending incremental file list
    1.txt
        262,078,464  24%    9.89MB/s
    
  3. delete 數據一致 (無差異同步)

    #查看客戶端數據
    [root@web01 ~]# ll
    total 0
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt2
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt3
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt4
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt5
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt6
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt7
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt8
    -rw-r--r--. 1 root root 0 Nov 19 09:17 txt9
     
    #刪除數據
    [root@web01 ~]# rm -rf txt2
    [root@web01 ~]# rm -rf txt3
    [root@web01 ~]# rm -rf txt4
     
    #執行數據一致同步
    [root@web01 ~]# rsync -avz ./ rsync_backup@172.16.1.41::backup --delete
    sending incremental file list
    deleting txt4
    deleting txt3
    deleting txt2
    ./
     
    sent 332 bytes  received 52 bytes  768.00 bytes/sec
    total size is 7,746  speedup is 20.17
     
    #查看服務端
    [root@backup backup]# ll
    total 0
    -rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt5
    -rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt6
    -rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt7
    -rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt8
    -rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt9
    

    注意:
    拉取時:客戶端數據與服務端數據一致,以服務端數據為准
    推送時:服務端數據與客戶端數據一致,以客戶端數據為准

睡觉 - åƒç´ å›QQ表情包_微信表情包表情

二、Rsync服務介紹

2.1 簡介

rsync英文稱為remote synchronizetion,從軟件的名稱就可以看出來,rsync具有可使本地和遠程兩台主機之間的數據快速復制同步鏡像、遠程備份的功能,這個功能類似於ssh帶的scp命令,但是又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝。當然,rsync還可以在本地主機的不同分區或目錄之間全量及增量的復制數據,這又類似cp命令。但是同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。

rsync官方地址:https://rsync.samba.org/
rsync監聽端口:873
rsync運行模式:C/S client/server

rsync簡稱叫做遠程同步,可以實現不同主機之間的數據同步,還支持全量和增量

2.2 rsync特性

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

2.3 生產場景備份方案

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

我晕 - åƒç´ å›QQ表情包_微信表情包表情

三、Rsync應用場景

3.1 備份方式

  1. 全量備份

    即將數據完整的復制一份並保存下來

    img

  2. 增量備份

    即備份上一次備份后新增的數據

    img

3.2 rsync的傳輸方式

push 推:
客戶端將數據從本地推送至服務端

pull 拉:
客戶端將數據從服務端拉取到本地

img

img

白眼 - åƒç´ å›QQ表情包_微信表情包表情

3.3 傳輸存在的問題

  1. 推的問題:當客戶端服務器數量過多,容易造成數據推送緩慢;
  2. 拉的問題:當客戶端服務器數量過多,容易造成服務端壓力過大;

3.4 大量服務器備份場景

現在有2000台服務器,怎么有效快速的緩解推和拉存在的問題?

img

3.5 異地備份實現思路

img

糗大了 - åƒç´ å›QQ表情包_微信表情包表情

四、Rsync傳輸模式

4.1 傳輸模式

  • 本地方式(類似於cp,不支持推送和拉取,只是單純的復制)
  • 遠程方式(類似於scp,又不同於scp),scp只支持全量備份,rsync支持增量備份和差異備份
  • 守護進程方式(客戶端和服務端)

4.2 本地方式

#語法:
rsync [OPTION]... SRC [SRC]... DEST
命令   選項        源文件       目標地址
 
#語法實例
[root@web01 ~]# rsync -avz 1.txt /tmp/
 
[root@web01 ~]# rsync -avz 1.txt /tmp/
               命令   選項 源文件 目標目錄 
 
#類似於cp,但是cp是全量復制並且會修改文件屬性,rsync是增量復制,會保證文件屬性不變

4.3 遠程方式

  • pull 拉取數據的命令

    #語法:
    rsync [OPTION]... [USER@]HOST:SRC [DEST]
     
    #實例:
    [root@web01 ~]# rsync -avz root@172.16.1.41:/tmp/1.txt ./
    
    #語法拆分
    rsync           #命令
    -avz            #選項
    root            #遠端服務器的系統用戶
    @               #分隔符
    172.16.1.41     #遠程主機的地址
    :               #分隔符,代表主機下的....
    /tmp/1.txt      #遠程主機的目錄及文件
    ./              #當前主機的當前目錄
    
  • push 推送數據命令

    #語法
    rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
     
    #實例
    [root@web01 ~]# rsync -avz ./1.txt root@172.16.1.41:/tmp
     
    #語法拆分
    rsync               #命令
    -avz                #選項
    ./1.txt               #當前服務器的本地文件
    root                #遠端服務器的系統用戶
    @                   #分隔符
    172.16.1.41         #遠端主機的IP地址
    :                   #分隔符,代表主機下的....
    /tmp                #遠程主機的目錄
    

注意事項:

1、[root@web01 ~]# rsync -avz root@172.16.1.41:/tmp/1.txt ./2.txt #將遠程服務器1.txt文件全量備份到當前目錄下並重命名為2.txt

2、[root@web01 ~]# rsync -avz root@172.16.1.41:/tmp/ ./a/ #將遠程服務器tmp目錄全量備份到當前目錄下並重命名為a

3、指定目錄"/a"時,意思是"/a"這個目錄及這個目錄下的文件。指定目錄"/a/"時,意思是"/a/"目錄下的文件不包括目錄

闭嘴 - åƒç´ å›QQ表情包_微信表情包表情

4.4 守護進程傳輸模式

  1. 為什么使用守護進程模式

    • rsync傳輸時,使用的是系統用戶和系統用戶的密碼,非常的不安全
    • 使用普通用戶又會出現權限問題
  2. 守護進程傳輸模式語法

    • push 推送語法

      #語法:
      rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
       
      #實例:
      [root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
       
      #語法拆分
      rsync               #命令 
      -avz                #選項
      1.txt               #當前服務器的文件
      rsync_backup        #rsync服務端配置的虛擬用戶
      @                   #分隔符
      172.16.1.41         #遠程主機IP地址
      ::backup            #模塊名
       
      #推送過程中服務端目錄必須是服務端配置的啟動用戶權限
      
    • pull 拉取語法

      #語法:
      rsync [OPTION]... [USER@]HOST::SRC [DEST]
       
      #示例:
      [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup /tmp/
       
      #語法拆分:
      rsync               #命令
      -avz                #選項
      rsync_backup        #服務端定義的虛擬用戶
      @                   #分隔符
      172.16.1.41         #遠程主機IP地址
      ::backup            #模塊名字
      /tmp/               #當前主機的目錄
       
      #拉取過程中服務端目錄不用設置rsync用戶權限
      

雷击 - åƒç´ å›QQ表情包_微信表情包表情

4.5 守護進程模式實踐

  1. 環境准備

    主機 IP 主機角色
    JumpServer 172.16.1.81 rsync客戶端
    Backup 172.16.1.41 rsync服務端
  2. 服務端

    1. 安裝

      [root@backup ~]# yum install -y rsync
      
      #查找配置文件
      [root@backup ~]# rpm -qc rsync
      /etc/rsyncd.conf
      /etc/sysconfig/rsyncd
      
    2. 修改配置文件

      [root@m01 ~]# 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 backup!
      path = /backup
      [linux]
      comment = welcome to linux!
      path = /tmp/linux
      

      配置文件詳解:

      uid = rsync                         #啟動服務的用戶id
      gid = rsync                         #啟動服務用戶的組id
      port = 873                          #服務默認監聽端口
      fake super = yes                    #無須使用root用戶啟動
      use chroot = no                     #安全機制
      max connections = 200               #最大連接數
      timeout = 600                       #超時時間
      ignore errors                       #忽略錯誤
      read only = false                   #只讀權限
      list = false                        #查看模塊列表
      auth users = rsync_backup            #定義虛擬用戶(rsync傳輸過程使用的用戶)
      secrets file = /etc/rsync.passwd     #定義虛擬用戶的密碼
      log file = /var/log/rsyncd.log       #日志文件
      #####################################
      [backup]                                #模塊
      comment = welcome to backup!     #模塊的備注
      path = /backup                          #服務器真實的存儲路徑
      ...
      
    3. 創建系統用戶

      [root@backup ~]# useradd -r -M -s /sbin/nologin rsync
      
    4. 修改密碼文件(一定不能有空格)

      [root@backup opt]# echo "rsync_backup:123456" > /etc/rsync.passwd
      
    5. 授權(必須授權為600)

      [root@backup opt]# chmod 600 /etc/rsync.passwd
      
    6. 創建備份目錄

      [root@backup opt]# mkdir /backup
      [root@backup opt]# mkdir /tmp/linux
      
    7. 目錄授權

      [root@backup opt]# chown rsync.rsync /backup/
      [root@backup opt]# chown rsync.rsync /tmp/linux/
      
    8. 關閉防火牆和selinux

      8、關閉防火牆和selinux
      [root@backup opt]# systemctl disable --now firewalld
      [root@backup opt]# setenforce 0
      
    9. 啟動rsyncd服務

      [root@backup opt]# systemctl start rsyncd
      
      #驗證啟動
      [root@backup ~]# netstat -lntp | grep 873
      tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      26370/rsync         
      tcp6       0      0 :::873                  :::*                    LISTEN      26370/rsync         
      [root@backup ~]# ps -ef | grep rsync
      root      26370      1  0 11:08 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
      root      26408  25098  0 11:09 pts/1    00:00:00 grep --color=auto rsync
      

ä¸ç†ä½ - åƒç´ å›QQ表情包_微信表情包表情

  1. 客戶端rsync

    #下載安裝
    yum install -y rsync
     
    #創建認證文件並修改權限
    echo "123456" >/etc/rsync.passwd
    chmod 600 /etc/rsync.passwd
    

4.6 客戶端推拉數據方法

  • 方法一:自己輸入密碼

    [root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup
    
    rsync_backup : 虛擬用戶,只在數據傳輸時使用
    172.16.1.41  : backup服務端的IP
    backup       : 模塊名稱
    
  • 方法二:設置密碼文件,運行時讀取

    1、編寫密碼文件
    	[root@backup opt]# echo "123456" > /etc/rsync.passwd
    
    2、授權
    	[root@m01 ~]# chmod 600 /etc/rsync.passwd
    
    3、連接
    	[root@m01 ~]# rsync -avzP --password-file=/etc/rsync.passwd  ./* rsync_backup@172.16.1.41::linux
    
  • 方法三:添加環境變量

    1、定義環境變量(臨時添加)
    	export RSYNC_PASSWORD=123456
    	
    2、同步
    	[root@m01 ~]# rsync -avzP  ./* rsync_backup@172.16.1.41::linux
    

啥 - åƒç´ å›QQ表情包_微信表情包表情

4.7 rsync常見報錯

1.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backu@172.16.1.41::backup
Password: 
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:1)虛擬用戶的用戶名或者密碼錯誤,2)服務端密碼文件權限不為600
 
2.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
#原因:客戶端密碼文件權限不是600
 
3.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backu
@ERROR: Unknown module 'backu'
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:模塊名字錯誤
 
4.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:雙冒號后面跟的是模塊名字,而不是目錄名字不要加/
 
5.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:防火牆開啟,沒有配置防火牆規則
[root@backup ~]# firewall-cmd --add-port=873/tcp
success
 
6.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
Password: 
sending incremental file list
rewriteip.sh
rsync: mkstemp ".rewriteip.sh.vx4Cry" (in backup) failed: Permission denied (13)
 
sent 207 bytes  received 128 bytes  44.67 bytes/sec
total size is 194  speedup is 0.58
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
#原因:selinux沒有關閉
 
7.報錯內容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
sending incremental file list
rsync: delete of stat xattr failed for "rewriteip.sh" (in backup): Permission denied (13)
 
sent 55 bytes  received 114 bytes  338.00 bytes/sec
total size is 194  speedup is 1.15
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
#原因:服務端備份目錄權限不是rsync
 
8.報錯內容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:服務端服務沒有啟動
 
9.報錯內容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@10.0.0.41::backup 
sending incremental file list
rsync: read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.2]
#原因:服務端配置錯誤,導致啟動問題

坏笑 - åƒç´ å›QQ表情包_微信表情包表情

五、Rsync結合inotify(實時同步)

rsync是不支持實時同步的,通常我們借助於inotify這個軟件來實時監控文件變化,一旦inotify監控到文件有所變化,則立即調用rsync進行同步。

5.1 安裝inotify(裝在客戶端)

[root@web01 ~]# yum -y install inotify-tools

5.2 常用參數

-m 持續監控
-r 遞歸
-q 靜默,僅打印時間信息
--timefmt 指定輸出時間格式
--format 指定事件輸出格式
    %Xe 事件
    %w 目錄
    %f 文件
-e 指定監控的事件
    access 訪問
    modify 內容修改
    attrib 屬性修改
    close_write 修改真實文件內容
    open 打開
    create 創建
    delete 刪除
    umount 卸載

5.3 測試命令(開始監控)

/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  [監控路徑]

5.4 實時監控並同步

[root@m01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /root | while read line;do
	cd  /root && rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
done

郁闷 - åƒç´ å›QQ表情包_微信表情包表情

5.5 實時備份腳本編寫(供以后使用)

  • 粗略版

    [root@backup ~]# vim rsyn-inotify.sh
    #!/bin/bash
    dir=/backup
    /usr/bin/inotifywait  -mrq  --format '%w %f' -e create,delete,attrib,close_write  $dir | while read line;do
            cd  $dir  && rsync -az -R  --delete  .  rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
    done  &
    
  • 精油版

    #!/bin/bash
    src=/data
    des=backup
    rsync_passwd_file=/etc/rsync.passwd
    ip1=172.16.1.41
    user=rsync_backup
    cd ${src}
    /usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
    do
    CREATE  /backup/  1.txt
        INO_EVENT=$(echo $file | awk '{print $1}')
        INO_FILE=$(echo $file | awk '{print $2}')        
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
        then                
            rsync -azcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des}
        fi
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]        
        then
            rsync -azR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1        
        fi
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
        if [ ! -d "$INO_FILE" ]
        then
            rsync -azcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
        fi
        fi
    done &
    

威胁 - åƒç´ å›QQ表情包_微信表情包表情


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM