1. 程式人生 > >rsync遠程同步及rsync+inotify實時同步

rsync遠程同步及rsync+inotify實時同步

samba 路徑 支持 避免 fat 配置 授權 let 解釋

rsync遠程同步及rsync+inotify實時同步

思維代入

正確、有效的備份方案是保障系統及數據安全的重要手段。在服務器中,通常會結合計劃性任務、shell腳本來執行本地備份。但有時候為了提高備份的可靠性,異地備份也是非常有必要的。那下面就給大家介紹一種異地遠程備份的方法:rsync遠程備份。

rsync簡介

rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份、保持鏈接和權限,且采用優化的同步算法,在傳輸前執行壓縮,因此非常適用於異地備份、鏡像服務等應用。

rsync在同步過程中有兩個部分組成:發起端、同步源。負責發起rsync同步操作的客戶機稱為發起端;負責響應來自客戶機的rsync同步操作的服務器稱為同步源。在同步過程中,同步源負責提供文檔的原始位置;發起端對該位置具有讀取權限。

rsync拓撲圖

技術分享圖片

rsync源服務器的部署

rsync下載地址下載地址

CentOS7系統非常友好的默認安裝了rsync服務,如果你的系統沒有安裝rsync服務,那麽用上面的鏈接下載安裝即可,因為我這邊默認安裝了rsync,直接進行修改配置文件,配置文件默認在/etc/rsyncd.conf

  • 修改配置文件

vim /etc/rsyncd.conf

 uid = nobody    
 gid = nobody
 use chroot = yes             //禁錮在源目錄
 address = 172.16.10.133      //監聽地址
 port 873                     //監聽端口
 log file = /var/log/rsyncd.log         //日誌文件位置
 pid file = /var/run/rsyncd.pid         //進程ID存放位置
 hosts allow = 172.16.10.0/24           //允許訪問的客戶機地址

[wwwroot]                     //共享模塊的名稱
 path=/var/www/html           //源目錄的實際路徑
 comment=www.yun.com          //註解內容,可不填寫
 read only= yes               //是否為只讀
 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2    //同步時不再進行壓縮的文件類型
 auth users = backuper         //授權賬戶
 secrets file = /etc/rsyncd_users.db     //存放賬戶信息的數據文件

技術分享圖片

#這邊解釋一下,對於rsync的同步源最好僅允許以只讀方式做同步。同步時也可以采用匿名的方式,只要將上面的auth users和secrets file配置記錄加#註釋或者刪除就可以了。

  • 為備份賬戶創建數據文件

vim /etc/rsyncd_users.db

backuper:abc123 //創建賬戶記錄,以冒號分割

chmod 600 /etc/rsyncd_users.db

這邊由於賬戶信息采用明文存放,因此上面調整了文件權限,避免賬戶信息泄露。

備份用戶backuper需要對源目錄/var/www/html具有相應的讀取權限

技術分享圖片

  • 開啟rsync服務進程

rsync --daemon

技術分享圖片

關閉服務的時候,直接采用kill $(cat /var/run/rsyncd.pid) 就可以了

rsync備份工具的使用

  • rsync命令的基本用法

rsync和大多數的備份程序一樣,需要指定原始位置和目標位置,命令格式:rsync 源目錄位置 目標位置

rsync /etc/fatab /opt

例如這條,意義就是:備份/etc/fstab目錄到/opt目錄下

命令格式及常用的備份選項

-r:遞歸模式,包含目錄及子目錄中的所有文件。
-l:對於符號鏈接文件仍然復制為符號鏈接文件。
-v:顯示同步過程的詳細信息。
-a:歸檔文件,保留文件的權限、屬性等信息。
-z:在傳輸文件時進行壓縮。
-p: 保留文件的權限標記。
-t:保留文件的時間標記。
-g:保留文件的屬性標記(僅超級用戶使用)。
-o:保留文件的屬主標記(僅超級用戶使用)。
-H:保留硬連接文件。
-A:保留ACL屬性信息。
-D:保留設備文件及其他特殊文件。
--delete:刪除目標位置有而原始位置沒有的文件。
--checksum:根據校驗和(而不是文件大小、修改時間)來決定是否跳過文件。
  • 配置源的表示方法

配置源的表示方法 三種
將對方源目錄的文件同步到本地的/opt目錄下

格式一:

rsync -avz [email protected]::wwwroot /opt/
password:abc123

格式二:

rsync -avz rsync://[email protected]/wwwroot /opt/
password:abc123

格式三:免密碼交互

vim /etc/server.pass
abc123
chmod 600 /etc/server.pass
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt

  • rsync備份操作示例

rsync -avz [email protected]::wwwroot /opt/

技術分享圖片

配置部署rsync+inotify實時同步

  • 調整inotify內核參數
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384     #監控事件隊列
fs.inotify.max_user_instances = 1024     #最多監控實例
fs.inotify.max_user_watches = 1048576    #每個實例最多監控文件數

sysctl -p     //刷新使之立即生效
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
  • 安裝inotify-tools

使用inotify機制需要安裝inotify-tools,以便提供inotifywait和inotifywatch輔助工具程序,用來監控和匯總改動情況。

tar xf inotify-tools-3.14.tar.gz -C /opt/     //解壓軟件至/opt目錄下
cd /opt/inotify-tools-3.14/
./configure                      //配置
make && make install          //編譯安裝

這裏以監控網站目錄/var/www/html為例,先執行inotifywait命令,然後在源服務器的終端上向/var/www/html目錄下進行操作,這邊發起端會監控輸出結果。

inotifywait -mrp -e modify,create,move,delete /var/www/html

-e用來指定要監控的哪些事件,-m 表示持續監控,-r 表示遞歸整個目錄, -q 簡化輸出信息。

技術分享圖片

  • 編寫觸發式同步腳本
vim /opt/inotify_rsync.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -vazH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 5 ] ; then
        $RSYNC_CMD
    fi
done

chmod +x /opt/inotify_rsync.sh 
#添加執行權限

然後我們來看一下腳本執行的效果

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

至此實驗結束,試驗成功,rsync遠程同步及rsync+inotify實時同步就成功了!!!各位看官上手試試吧!!!

rsync遠程同步及rsync+inotify實時同步