天天看點

Rsync檔案同步與inotify實作檔案同步功能Rsync檔案同步與inotify實作檔案同步功能

Rsync檔案同步與inotify實作檔案同步功能

Rsync

  1. rsync是linux系統下的資料鏡像備份工具。使用快速增量備份工具Remote Sync可以遠端同步,支援本地複制,或者與其他SSH、rsync主機同步。
  2. # 使用的參數說明:
     v: 顯示詳細資訊
     z: 傳輸過程中對資料進行壓縮
     r: 遞歸
     t: 保留修改時間屬性
     o: 保留檔案所有者屬性
     p: 保留檔案權限屬性
     g: 保留檔案所屬組屬性
     a: 歸檔模式,主要保留檔案屬性,等同于-rlptgoD
     --progress: 顯示資料傳輸的進度資訊
     --password-file=FILE: 指定密碼檔案,将密碼寫入檔案,實作非互動式資料同步,這個檔案名也需要修改權限為600
     --delete: 删除那些僅在目标路徑中存在的檔案(源路徑中不存在),在腳本中的資料同步經常加上此參數
     --list-only: 僅列出伺服器子產品清單,需要rsync伺服器設定list=true
               
  3. rsync -e "ssh -p22" -avz --delete ./ [email protected]:/tmp

    使用rsync将目前目錄下的内容同步到遠端伺服器11.22.33.44的tmp目錄下,并且删除遠端伺服器上在本地沒有的檔案,-a 歸檔模式,主要保留檔案屬性,等同于-rlptgoD;-v 能顯示詳細步驟;-z 表示在傳輸過程中壓縮;-e 表示指定要使用的遠端shell。
  4. rsync -avz --delete ./ [email protected]:/tmp

    上面指令的精簡

Rsync 虛拟賬戶登入同步檔案

該模式需要在服務端安裝rsync

1. 服務端Rsync
  1. yum -y install rsync

    在服務端安裝rsync
  2. 編輯

    /etc/rsyncd.conf

    # 設定伺服器資訊提示檔案,在該檔案中編寫提示資訊
    motd file = /etc/rsync/rsyncd.motd
    # 開啟rsync資料傳輸日志功能
    transfer logging = yes
    # 設定日志檔案名,可通過log format參數設定日志格式
    log file = /var/log/rsyncd.log
    # 設定rsync程序号儲存檔案名稱
    pid file = /var/run/rsyncd.log
    # 設定鎖檔案名稱
    lock file = /var/run/rsync.lock
    # 設定伺服器監聽的端口号,預設是873
    port = 873
    # 設定本伺服器所監聽網卡接口的ip位址
    address = 0.0.0.0
    # 設定進行資料傳輸時所使用的帳戶名或ID号,預設使用nobody
    uid = root
    # 設定進行資料傳輸時所使用的組名或GID号,預設使用nobody
    gid = root
    # 若為yes, rsync會首先進行chroot設定,将根映射在下面的path參數路徑下,對用戶端而言,系統的根就是path參數指定的路徑。但這樣做需要root權限,并且在同步符号連接配接資料時隻會同步名稱,不會同步内容。
    use chroot = no
    # 是否允許用戶端上傳資料,yes表示不允許
    read only = no
    # 設定并發連接配接數,0表示無限制
    max connections = 50
    
    [common]
    # 自定義子產品名,rsync通過子產品定義同步的目錄,可定義多個
    # 定義注釋說明字串
    comment = web content
    # 同步目錄的真是路徑通過path指定
    path = /home/www/composer
    # 忽略一些IO錯誤
    ignore errors
    # exclude指定common目錄下某個目錄可以不同步資料
    # exclude = test/
    # 設定允許連接配接伺服器的賬戶,此賬戶可以是系統中不存在的使用者
    auth users = rsync
    # 密碼驗證檔案名,該檔案權限要求為隻讀,建議為600,僅在設定auth users後有效
    secrets file = /etc/rsync/rsyncd.secrets
    # 設定哪些主機可以同步資料,多ip和網段之間使用空格分隔
    # hosts allow = 11.22.33.44
    # 除了hosts allow定義的主機外,拒絕其他所有
    # hosts deny=*
    # 用戶端請求顯示子產品清單時,本子產品名稱是否顯示,預設為true
    list = false
               
  3. 在指令行執行
    echo "tom:123" > /etc/rsync/rsyncd.secrets
    chmod 600 /etc/rsync/rsyncd.secrets
    echo "welcome to access" > /etc/rsync/rsyncd.motd  #此項用戶端不需要做
    rsync --daemon    # --daemon表示背景執行,用戶端開啟rsync不需要--daemon選項
    echo "/usr/bin/rsync --daemon" >> /etc/rc.local    #開機啟動rsync服務
               
  4. 這項待定
    # groupadd --system --gid 102 rsync
    # useradd --system -g rsync --no-create-home --home /nonexistent --comment "rsync user" --shell /sbin/nologin --uid 102 rsync
               
  5. 開放873預設端口
2. 用戶端Rsync
  1. yum -y install rsync

    安裝rsync
  2. 指令行執行
    echo "123456789" > /etc/rsyncd.secrets #用戶端隻需要把密碼寫入檔案
    chmod 600 /etc/rsyncd.secrets
               
3. 執行同步操作
  1. rsync -avz --progress --password-file=/etc/rsyncd.secrets [email protected]::common /tmp

    上面指令的含義為使用 /etc/rsyncd.secrets 裡面設定的密碼配置,使用tom虛拟賬号(tom賬号可以為linux系統中沒有到賬戶),使用公共子產品common,同步用戶端 /tmp 下檔案到服務端,具體到服務端什麼地方,可以檢視服務端配置。

inotify

  1. Inotify是一種強大的、細粒度的、異步的檔案系統事件監控機制,linux核心從2.6.13起,加入了inotify支援,通過Inotify可以監控檔案系統添加、删除、移動、修改等各種事件,利用這個核心接口,第三方軟體就可以監控檔案系統下檔案的各種變化情況
  2. 安裝 inotify-tools 該軟體包共安裝了兩個工具(指令),即inotifywait和inotifywatch
  3. inotifywait:在被監控的檔案或目錄上等待特定檔案系統事件(open、close、delete等)發生,執行後處于阻塞狀态,适合在腳本中使用
  4. inotifywatch:收集被監視的檔案系統使用度統計資料,指檔案系統事件發生的次數統計
  5. inotifywait指令常用參數詳解
    參數 說明 含義
    -r –recursive 遞歸查詢目錄
    -q –quiet 列印很少的資訊,僅僅列印監控事件的資訊
    -m –monitor 始終保持事件監聽狀态
    –format 列印使用指定的輸出類似格式字元串
    –timefmt 指定事件輸出的格式
    -e –event 通過此參數可以指定要監控的事件
    access 檔案或目錄被讀取
    modify 檔案或目錄的内容被修改
    attrib 檔案或目錄的屬性被改變
    close 檔案或目錄被封閉,無論讀/寫模式
    open 檔案或目錄被打開
    move_to 檔案或目錄被移動至另外一個目錄
    move 檔案或目錄被移動至另外一個目錄或從另一個目錄移動至目前目錄
    create 檔案或目錄被建立在目前目錄
    delete 檔案或目錄被删除
    umount 檔案系統被解除安裝
    Rsync檔案同步與inotify實作檔案同步功能Rsync檔案同步與inotify實作檔案同步功能
  6. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup

    監控/backup目錄下檔案的建立,新開一個視窗建立一個檔案,傳回原來視窗,檢視回報,如下
    Rsync檔案同步與inotify實作檔案同步功能Rsync檔案同步與inotify實作檔案同步功能
  7. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e delete,close_write,modify /backup/

    同時測試create、modify、delete,效果如下
    Rsync檔案同步與inotify實作檔案同步功能Rsync檔案同步與inotify實作檔案同步功能
  8. inotifywait -mrq --format '%w%f' -e create /backup

    簡化事件輸出
    Rsync檔案同步與inotify實作檔案同步功能Rsync檔案同步與inotify實作檔案同步功能

rsync + inotify實時監控腳本,建構伺服器檔案同步工具

  1. 通過rsync檔案同步工具和inotify檔案監控工具,可以建構出一個實時監控檔案改動的同步工具。
  2. 自動化腳本
    #!/bin/sh
    FILE=/data
    IP=11.22.33.44
    /usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $
    FILE \
    | while read file
    do
    	cd $FILE &&\
    	rsync -az “$file” --delete [email protected]$IP::nfsbackup \
    	--password-file=/etc/rsync.password &
    done
               
  3. docker運作腳本
    #!/bin/bash
    
    if [ $# -eq 1 ]
    then
        # 第一個參數為本地同步路徑
        LocalPath=${1}
    else
        echo "\033[5;34m Usage: \033[0m sh ${0} LocalPath" | grep "LocalPath" --color
        exit 0
    fi
    
    # rsync密碼存放路徑
    RsyncPass=/home/www/rsync
    
    (docker run -it --rm -v $LocalPath:/mnt decezz/inotify inotifywait -mrq --format '%w%f' -e create,modify,delete,attrib,move /mnt) | while read act_log
    do
        docker run -i --rm -v $RsyncPass:/tmp -v $LocalPath:/mnt decezz/app rsync -avz --progress --password-file=/tmp/rsyncd.secrets --delete /mnt/ [email protected]::common
    done
               

繼續閱讀