Rsync文件同步


Rsync文件同步

  1. 本章結構

  2. 關於rsync

1、一款增量備份工具,remote sync,遠程同步,支持本地復制或者與其他SSH、rsync主機同步,官方網站:http://rsync.samba.org/。

Rsync(remote synchronize)是一個遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件,也可以使用rsync同步本地硬盤中的不同目錄。

Rsync是用戶取代rcp的一個工具,Rsync使用所謂的"Rsync算法"來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快,可以參考How Rsync A Practical Overview進一步了解Rsync的運作機制。

Rsync支持大多數的類Unix系統,無論是linux、solaris還是BSD上都經過了良好的測試,此外,它在windows平台下也有相應的版本,比較知名的有cwRsync和Sync2NAS。

2、特點

能更新整個目錄樹和文件系統

有選擇性的保持符號鏈接、硬鏈接、文件屬於、權限、設備以及時間等

對於安裝來說,無任何特殊權限要求

對於多個文件來說,內部流水線減少文件等待的延時

能用rsh、ssh或直接端口作為傳輸入端口

支持匿名rsync同步文件,是理想的鏡像工具

3、同步源和發起源

Rsync同步源:指備份操作的遠程服務器,也稱為備份源,主要包括兩種:rsync源、ssh源

4、文件格式

備份操作類型:

本地同步:rsync … 本地目錄1 本地目錄2

rsync+ssh同步:

rsync … ssh源 本地目錄 (下行同步即下載)

rsync … 本地目錄 ssh源 (上行同步即上傳)

rsync+rsync同步:

rsync … rsync源 本地目錄 (下行同步即下載)

rsync … 本地目錄 rsync源 (上行同步即上傳)

5、rsync命令的用法:

基本格式:rsync [選項] 原始位置 目錄位置

常用選項:

-a:歸檔模式,遞歸並保留對象屬性,等同於-rlptgoD

-v:顯示同步過程的詳細(verbose)信息

-z:在傳輸文件時進行壓縮(compress)

-H:保留硬鏈接文件

-A:保留ACL屬性信息

--delete:刪除目標位置有而原始位置沒有的文件

-r:遞歸模式,包含目錄及子目錄中所有文件

-l:對於符號鏈接文件仍然復制為符號鏈接文件

-p:保留文件的權限標記

-t:保留文件的時間標記

-g:保留文件的屬組標記(僅超級用戶使用)

-o:保留文件的屬主標記(僅超級用戶使用)

-D:保留設備文件及其他特殊文件

6、同步的優缺點

①定期同步的不足

執行備份的時間固定

當同步源長期不變化時,密集的定期任務是不必要的

②實時同步的優點

一旦出現源出現變化,立即啟動備份

只要同步源無變化,則不執行備份

7、linux內核的inotify機制從版本2.6.13開始提供,可以監控文件系統的變動情況,並作出通知響應,輔助軟件:inotify-tools

8、調整內核的參數

max_queue_events:監控隊列大小

max_user_instances:最多監控實例數

max_user_watches:每個實例最多監控文件數

9、安裝inotify-tools輔助工具

inotifywait:用於持續監控,實時輸出結果

inotifywatch:用於短期監控,任務完成后再出結果

#inotifywait –mrq -e modify,create,move,delete /var/www/html

選項:-m (monitoring) 實時監控

-r (recursive) 遞歸

-q (quiet) 安靜模式

三、案例1:rsync+ssh同步

試驗准備:兩台主機,A主機和B主機IP地址分別為192.168.131.130、192.168.131.136,共享目錄/usr/local/nginx/html

A主機操作:

# useradd wdd

# passwd wdd

# setfacl -m u:wdd:rwx /usr/local/nginx/html/ #設置ACL權限

# setfacl -m d:wdd:rwx /usr/local/nginx/html/

主機B操作:

# mkdir /client

# rsync -avz wdd@192.168.131.130:/usr/local/nginx/html/* /client

上面操作只同步/usr/local/nginx/html/下的文件,如果寫成/usr/local/nginx/html,則同步整個目錄

  1. 案例2:rsync+rsync

    試驗准備:A主機IP地址為192.168.131.130,B主機IP地址為192.168.131.136

    A主機作為同步源:

    # mkdir /server

    # cd /server/

    # chmod 777 /server/ #注意兩邊都要有相應的權限

    # touch server.txt

    # vim /etc/rsyncd.conf

    use chroot = yes

    address = 192.168.131.130

    port 873

    log file = /var/log/rsyncd.log

    pid file = /var/run/rsyncd.pid

    [share]

    comment = rsync server

    path = /server

    read only = no

    dont compress = *.gz #對后面格式不進行壓縮

    auth users = wdd

    secrets file = /etc/rsyncd_users.db

    # vim /etc/rsyncd_users.db

    wdd:123456 #用戶名和密碼

    # chmod 600 /etc/rsyncd_users.db

    #注意一定要改這個權限,否則認證不通過

    # killall -9 rsync

    # rsync –daemon #只能這樣啟動rsync

    主機B客戶端:

    進行下載操作

    # rsync -avz wdd@192.168.131.130::share /client

    也可以寫成下面這樣:

    # rsync -avz rsync://wdd@192.168.131.130/share/* /client/ /

    兩種格式:

    rsync -avz xxx@服務器地址::共享名 本地目錄

    rsync -avz rsync://xxx@服務器地址/共享名 本地目錄

進行上傳操作:

# cd /client/

# touch client.txt

# rsync -avz /client/client.txt rsync://wdd@192.168.131.130/share/

  1. 案例3:rsync+inotify實現文件實時同步

    試驗准備:主機A的IP地址為192.168.131.130,主機B的IP地址為192.168.131.136,主機A作為同步源

    1、主機A操作:

    同案例2操作

2、主機B操作:

# tar xf inotify-tools-3.14.tar.gz

# cd inotify-tools-3.14

# ./configure

# make

# make install

安裝工具后需更改內核參數:vi /etc/sysctl.conf

fs.inotify.max_queue_events=16384 監控隊列大小fs.inotify.max_user_instances=1024 最多監控實例數fs.inotify.max_user_watches=1048576 每個實例最多監控文件數

# /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/ #對/client目錄進行實時監控

可以將上面的命令寫成一個shell腳本,只要/client文件夾下面的文件發生修改,立即用rsync同步文件,腳本如下所示:

# vim inotify_check.sh

#!/bin/bash

SRCCMD=" /usr/local/bin/inotifywait -mrq -e delete,create,modify,move /client/"

DESTCMD="rsync -avz /client/* rsync://wdd@192.168.131.130/share/"

${SRCCMD}|while read DIRECTORY EVENTS FILE

do

${DESTCMD}

Done

# chmod +x inotify_check.sh

# export RSYNC_PASSWORD=123456

#將上面變量RSYNC_PASSWORD聲明為全局變量,這樣就不用每次運行上面腳本輸入密碼了

# ./inotify_check.sh #運行腳本

打開另外一個窗口,作如下操作:

# cd /client/

# touch 1.txt

只要主機B下的/client文件夾下面的文件發生修改、創建、刪除、移動都會被檢測到,並·被同步到主機A下的/server下

  1. 案例4:rsync+inotify+unison實現雙機互相同步

    實驗准備:兩台主機,A主機地址為192.168.131.130,主機B的IP地址為192.168.131.136

    1. 操作主機A
      1. 配置SSH

        # ssh-keygen -t rsa

        # ssh-copy-id 192.168.131.136

        # ssh root@192.168.131.136#測試是否登錄主機B不需要輸入密碼

      2. 安裝inotify

        # tar xf inotify-tools-3.14.tar.gz

        # cd inotify-tools-3.14

        # ./configure

        # make && make install

      3. 安裝unison

        # tar xf ocaml-3.10.1.tar.gz #先安裝unison的底層依賴包

        # cd ocaml-3.10.1

        # ./configure

        # make world opt

        # make install

        # tar xf unison-2.13.16.tar.gz

        # cd unison-2.13.16

        # make UISTYLE=text STATIC=true THREADS=true

        # make install

        # cp unison /usr/local/bin/

      4. 創建同步目錄

        # mkdir /backup1

      5. # vim intify_unison.sh

#!/bin/bash

IP="192.168.131.136"

SRC="/backup1"

DEST="/backup2"

/usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \

read DIRECTORY EVENTS FILE

do

/usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}

done

# chmod +x intify_unison.sh

  1. 操作主機B
    1. 配置SSH

      # ssh-keygen -t rsa

      # ssh-copy-id 192.168.131.130

      # ssh 192.168.131.130 #測試登錄主機A是否需要登錄密碼

    2. 安裝inotify

      # tar xf inotify-tools-3.14.tar.gz

      # cd inotify-tools-3.14

      # ./configure

      # make && make install

    3. 安裝unison

      # tar xf ocaml-3.10.1.tar.gz #安裝unision需要的底層依賴包

      # cd ocaml-3.10.1

      # ./configure

      # make world opt

      # make install

      # make UISTYLE=text THREADS=true STATIC=true

      # make install

      # cp unison /usr/local/bin/

    4. 創建同步目錄

      # mkdir /backup2

    5. # vim intify_unison.sh

      #!/bin/bash

      IP="192.168.131.130"

      SRC="/backup2"

      DEST="/backup1"

      /usr/local/bin/inotifywait -mrq -e modify,create,delete,move ${SRC}| while \

      read DIRECTORY EVENTS FILE

      do

      /usr/local/bin/unison -batch ${SRC} ssh://${IP}/${DEST}

      done

# chmod +x intify_unison.sh

  1. 測試兩主機是否互相同步數據
    1. 在主機A上操作:

      # ./intify_unison.sh

      打開另一個對話窗口,作如下操作:

      # cd /backup1/

      # touch 1.txt

      打開主機B發現了1.txt

    2. 在主機B上操作:

      # ./intify_unison.sh

      打開另一個對話窗口,作如下操作:

      # cd /backup2/

      # touch 2.txt

      打開主機A發現了2.txt

       

       

       

     


免責聲明!

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



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