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 文件系統被卸載
    在這裏插入圖片描述
  6. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup 監控/backup目錄下文件的創建,新開一個窗口創建一個文件,返回原來窗口,查看反饋,如下
    監控文件創建
  7. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e delete,close_write,modify /backup/ 同時測試create、modify、delete,效果如下
    測試create、modify、delete
  8. inotifywait -mrq --format '%w%f' -e create /backup 簡化事件輸出
    簡化事件輸出

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 rsync_backup@$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
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章