Rsync+Inotify實現文件自動同步

来源:http://www.cnblogs.com/xiaocheche/archive/2017/09/27/7604396.html
-Advertisement-
Play Games

1》rsync概述 rsync的優點與不足 rsync與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如定期的 備份文件伺服器數據到遠端伺服器,對本地磁碟定期做數據鏡像等。 隨著應用系統規模的不斷擴大,對 ...


1》rsync概述

      rsync的優點與不足

             rsync與傳統的cp、tar備份方式相比,rsync具有安全性高、備份迅速、支持增量備份等優點,通過rsync可以解決對實時性要求不高的數據備份需求,例如定期的       備份文件伺服器數據到遠端伺服器,對本地磁碟定期做數據鏡像等。 隨著應用系統規模的不斷擴大,對數據的安全性和可靠性也提出的更好的要求,rsync在高端業務      系統中也逐漸暴露出了很多不足,首先,rsync同步數據時,需要掃描所有文件後進行比對,進行差量傳輸;如果文件數量達到了百萬甚至千萬量級,掃描所有文件將        是非常耗時的。而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。其次,rsync不能實時的去監測、同步數據,雖然它可以通過linux守護進程的方      式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就導致了服務端和客戶端數據可能出現不一致,無法在應用故障時完全的恢複數據。基於以上原因                     rsync+inotify組合出現了;

2》inotify概述

     1>認識inotify     

 

            Inotify是一種強大的、細粒度的、非同步的文件系統事件監控機制,linux內核從2.6.13起,加入了Inotify支持通過Inotify可以監控文件系統中添加、刪除,修改、        移動等各種細微事件,利用這個內核介面,第三方軟體就可以監控文件系統下文件的各種變化情況,而inotify-tools就是這樣的一個第三方軟體。在上面章節中,我        們講到,rsync可以實現觸髮式的文件同步,但是通過crontab守護進程方式進行觸發,同步的數據和實際數據會有差異,而inotify可以監控文件系統的各種變化,當       文件有任何變動時,就觸發rsync同步,這樣剛好解決了同步數據的實時性問題;

     2>inotify安裝,在WEB發佈管理伺服器安裝即可,WEB節點無需安裝

           # tar–xvf inotify-tools-3.14.tar.gz
      # ./configure
   # make&& make install
     # ll /usr/local/bin/inotifywa*
    -rwxr-xr-x 1 root root 44319 4月 6 18:51 /usr/local/bin/inotifywait
    -rwxr-xr-x 1 root root 41409 4月 6 18:51 /usr/local/bin/inotifywatch
    inotifywait用於等待文件或文件集上的一個特定事件,它可以監控任何文件和目錄設置,並且可以遞歸地監控整個目錄樹;inotifywatch用        於收集被監控的文件系統統計數據,包括每個inotify事件發生多少次等信息;

3》企業案例WEB內容版本發佈管理

     1>環境描述

          隨著企業的業務增多,為了維持所有WEB層的WEB程式保持一致,發版本的通過一臺內容伺服器向外進行分佈和輻射所有的更新的                WEB程式,

        模擬環境如下:
    WEB1 節點 IP:192.168.1.109
    WEB2節點內容發佈Server IP:192.168.1.106
  2>
安裝WEB1節點

    # yum–y install rsync
    # vim/etc/web1.pass
       gongda:123
    #chmod 600 /etc/web1.pass
    # mkdir /web1/wwwroot –p
 3>配置文件:
  # vim /etc/rsyncd.conf #此配置文件沒有。需要重新編輯一個

           

           uid = nobody
      gid = nobody
   usechroot = no
     max connections = 10
     strict modes = yes
     pid file = /var/run/rsyncd.pid
     lock file = /var/run/rsync.lock
     log file = /var/log/rsyncd.log

    [web1]
    path = /web1/wwwroot/
    comment = web1 file
    ignore errors
    read only = no
    write only = no
    hosts allow = 192.168.1.106
    hosts deny = *
    list = false
    uid = root
    gid = root
    auth users =gongda
    secrets file = /etc/web1.pass

       4> 啟動rsync服務
    # rsync --daemon

4》安裝WEB2內容管理節點

  1> # yum –y install rsync
     yum -y install automake libtool

        同步的密碼,註意此處只需要寫密碼,和web1.pass裡面的密碼要以致
    # vim /etc/server.pass
      
123
    #chmod 600 /etc/server.pass

         2> 編寫一個啟動腳本

    # vim opt/inotify-rsync.sh
    #!/bin/bash
    host1=192.168.1.109
    #======================
    src=/web/wwwroot/
    dst1=web1
    user1=gongda
    /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \|     while read files
    do
    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@
    $host1::$dst1
    echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
    done

      啟動腳本
  #cd /opt
  #chmod +x inotify-rsync.sh
  # nohup bash –x inotify-rsync.sh&

 

 

inotifywait


語法:
inotifywait [-hcmrq] [-e ] [-t ] [--format ] [--timefmt ] [ ... ]
參數:
-h,--help
輸出幫助信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
--fromfile
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-m, --monitor
接收到一個事情而不退出,無限期地執行。預設的行為是接收到一個事情後立即退出。
-d, --daemon
跟–monitor一樣,除了是在後臺運行,需要指定–outfile把事情輸出到一個文件。也意味著使用了
–syslog。
-o, --outfile
輸出事情到一個文件而不是標準輸出。
-s, --syslog
輸出錯誤信息到系統日誌
-r,--recursive
監視一個目錄下的所有子目錄。
-q,--quiet
指定一次,不會輸出詳細信息,指定二次,除了致命錯誤,不會輸出任何信息。
--exclude
正則匹配需要排除的文件,大小寫敏感。
--excludei
正則匹配需要排除的文件,忽略大小寫。
-t , --timeout
設置超時時間,如果為0,則無限期地執行下去。
-e , --event
指定監視的事件。
-c, –csv
輸出csv格式。
--timefmt
指定時間格式,用於–format選項中的%T格式。
--format
指定輸出格式。
%w 表示發生事件的目錄
%f 表示發生事件的文件
%e 表示發生的事件
%Xe 事件以“X”分隔
%T 使用由–timefmt定義的時間格式

inotifywatch


語法:
inotifywatch [-hvzrqf] [-e ] [-t ] [-a ] [-d ] [ ... ]
參數:
-h, –help
輸出幫助信息
-v, –verbose
輸出詳細信息
@
排除不需要監視的文件,可以是相對路徑,也可以是絕對路徑。
–fromfile
從文件讀取需要監視的文件或排除的文件,一個文件一行,排除的文件以@開頭。
-z, –zero
輸出表格的行和列,即使元素為空
–exclude
正則匹配需要排除的文件,大小寫敏感。
–excludei
正則匹配需要排除的文件,忽略大小寫。
-r, –recursive
監視一個目錄下的所有子目錄。
-t , –timeout
設置超時時間
-e , –event
只監聽指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。

 


4》
常見錯誤問題一:  @ERROR: chroot failed

  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:伺服器端的目錄不存在或無許可權。創建目錄並修正許可權可解決問題。

問題二:
  @ERROR: auth failed on module tee
  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:伺服器端該模塊(tee)需要驗證用戶名密碼,但客戶端沒有提供正確的用戶名密碼,認證失敗。提供正確的用戶名密碼解                    決此問題。

問題三:
  @ERROR: Unknown module ‘tee_nonexists’
  rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
  原因:伺服器不存在指定模塊。提供正確的模塊名或在伺服器端修改成你要的模塊以解決問題。

問題四:
  password file must not be other-accessible
       continuing without password file
  Password:
  原因:這是因為rsyncd.pwd rsyncd.secrets的許可權不對,應該設置為600。如:chmod 600 rsyncd.pwd

問題五:
  rsync: failed to connect to 218.107.243.2: No route to host (113)
  rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
  原因:對方沒開機、防火牆阻擋、通過的網路上有防火牆阻擋,都有可能。關閉防火牆,其實就是把tcpudp的873埠打開。
問題六:
  rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]
  原因:/etc/rsyncd.conf配置文件內容有錯誤。請正確核對配置文件。

問題七:
  rsync: chown "" failed: Invalid argument (22)
  原因:許可權無法複製。去掉同步許可權的參數即可。(這種情況多見於Linux向Windows的時候)
問題八:
  @ERROR: daemon security issue -- contact admin
  rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]
  原因:同步的目錄裡面有軟連接文件,需要伺服器端的/etc/rsyncd.conf打開use chroot = yes。掠過軟連接文件。

5》相關測試:
  1>在服務端建立文件,客戶端會自動產生:

           

          

         2>在服務端刪除文件,客戶端會自動刪除:

              

                

         3>在服務端文件寫入數據時,客戶端文件自動同步:

               

               

  =================================================
註意:
1.兩台主機都要將防火牆和SELINUX關閉;
2.資源發佈器啟動報錯後,註意創建不存在的文件夾。
3.同步時的錯誤日誌在/var/log文件夾下。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • "文章參考" 在Windows上安裝MongoDB 首先,在官網下載安裝包。 "下載地址" 內容如下所示: 配置 1. 創建數據目錄 2. 配置環境變數 運行 1. 命令行下運行 MongoDB 伺服器 2. 新開一個cmd 運行下麵語句 3. 打開網頁 "http://localhost:2701 ...
  • 轉自博客園: 1、獲取當前日期GetDate getdate()函數以datetime數據類型的格式返回當前SQLServer伺服器所在電腦的日期和時間。其語法格式為getdate()。返回值舍入到最近的秒小數部分,精度為.333秒資料庫十七偏移量不包含在內。 示例: 2、GetUTCDate 獲 ...
  • 一.表設計階段: 1.主鍵的使用 a.業務日誌表、安全審計表採用自增長; b.自定義編號用於業務流程類表,根據一定的編號規則; c.int型主鍵 用於基礎數據表; 2.邏輯刪除欄位的設計 a.tinyint類型,1或0; b.聯合主鍵(如ID+starDate),另加starDate,endDate ...
  • 第四章 高級查詢(二) (1)通過在子查詢中使用EXISTS子句,可以對子查詢中的行是否存在進行檢查。子查詢可以出現在表達式出現的如何位置 (2)子查詢語句可以嵌套在SQL語句中任何表達式出現的位置。 一、EXISTS子查詢 1.使用EXISTS語句判斷該資料庫對象是否存在: DROP TABLE ...
  • 在執行mysqldump命令時候報如下錯誤: [root@localhost ~]# mysqldump -uroot -p -d test> test.sql mysqldump: Got error: 2002: Can't connect to local MySQL server throu ...
  • 1 修改network配置文件 vi /etc/sysconfig/network 將配置文件中的HOSTNAME的內容改成需要修改的主機名 2 修改hosts配置文件 vi /etc/hosts 將配置文件中的localhost.localdomain改成需要修改的主機名 3 重啟機器 reboo ...
  • 本文目錄1.1 下載和解決依賴關係1.2 httpd編譯選項1.3 模塊動靜態編譯1.4 動靜態編譯的優先順序規則1.5 MPM的安裝1.6 關於"--enable-so"1.7 開始編譯httpd1.8 編譯後的規範操作 1.1 下載和解決依賴 以httpd 2.4.27為例。 資源下載: apac ...
  • 在上一節LCD層次分析中,得出寫個LCD驅動入口函數,需要以下4步: 1) 分配一個fb_info結構體: framebuffer_alloc(); 2) 設置fb_info 3) 設置硬體相關的操作 4) 使能LCD,並註冊fb_info: register_framebuffer() 本節需要用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...