天天看點

[App] Rsync + Lsync 實作實時同步

  • 轉載自: http://blog.csdn.net/wh211212/article/details/53054470

    Rsync 簡介

    • rsync是類unix系統下的資料鏡像備份工具——remote sync。一款快速增量備份工具 Remote Sync,遠端同步 支援本地複制,或者與其他SSH、rsync主機同步。
    • Rsync 傳送門:https://rsync.samba.org/
    Rsync 安裝配置
    • 通過rsync将檔案或目錄從一個位置複制到另一個主機,使用cron定時自動設定rsync,參考本文教程,例如,将linuxprobe.oprg上的[/root/work]下的檔案或目錄複制到vdevops.org上的[/home/backup]。
    • 實驗環境:linuxprobe.org/10.1.1.53 vdevops.org/10.1.1.56

    在源主機上配置

    [root@linuxprobe ~]# yum -y install rsync

    [root@linuxprobe ~]# vi /etc/rsync_exclude.lst

    # 指定要排除複制的檔案或目錄

    test

    test.txt

    在目标主機上配置

    [root@vdevops ~]# yum -y install rsync

    [root@vdevops ~]# vi /etc/rsyncd.conf

    # any name you like

    [backup]

    # destination directory for copy

    path = /home/backup

    # hosts you allow to access

    hosts allow = 10.0.0.30

    hosts deny = *

    list = true

    uid = root

    gid = root

    read only = false

    [root@vdevops ~]# mkdir /home/backup

    [root@vdevops ~]# systemctl start rsyncd

    [root@vdevops ~]# systemctl enable rsyncd

    配置完成,在源主機上執行rsync,如下所示

    [[email protected] ~]# mkdir work

    [[email protected] ~]# rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /root/work/ vdevops.org::backup

    sending incremental file list

    ./

    sent 53 bytes  received 11 bytes  128.00 bytes/sec

    total size is 0  speedup is 0.00

    # 設定定時任務

    [[email protected] ~]# crontab -e

    # run at 2:00 AM in a day

    00 02 * * * rsync -avz --delete --exclude-from=/etc/rsync_exclude.lst /root/work/ vdevops.org::backup

    rsync中的參數

       -r 是遞歸

    -l 是連結檔案,意思是拷貝連結檔案;-p 表示保持檔案原有權限;-t 保持檔案原有時間;-g 保持檔案原有使用者組;-o 保持檔案原有屬主;-D 相當于塊裝置檔案;

    -z 傳輸時壓縮;

    -P 傳輸進度;

    -v 傳輸時的進度等資訊,和-P有點關系,自己試試。可以看文檔;

    -e ssh的參數建立起加密的連接配接。

    -u隻進行更新,防止本地新檔案被重寫,注意兩者機器的時鐘的同時

    --progress是指顯示出詳細的進度情況

    --delete是指如果伺服器端删除了這一檔案,那麼用戶端也相應把檔案删除,保持真正的一緻

    --password-file=/password/path/file來指定密碼檔案,這樣就可以在腳本中使用而無需互動式地輸入驗證密碼了,這裡需要注意的是這份密碼檔案權限屬性要設得隻有屬主可讀。

    Lsync + Rsync 實時同步

    安裝Lsyncd是一個靈活的跨平台同步工具 

    Lsyncd github位址: https://github.com/axkibe/lsyncd

    # install from EPEL

    [[email protected] ~]# yum --enablerepo=epel -y install lsyncd

    [[email protected] ~]# vi /etc/lsyncd.conf

    -- line 8: comment out

    -- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="// tmp/htmlcopy/"}

    -- add follows to the end

    settings{

        logfile      ="/var/log/lsyncd.log",

        statusFile = "/tmp/lsyncd.stat",

        inotifyMode  = "CloseWrite",

        maxProcesses = 7,

        statusInterval = 1,

        -- nodaemon =true,

    }

    sync{

        default.rsync,

        -- source directory

        source="/root/work/",

    -- destination Hostname or IP address:(the name set in rsyncd.conf)

        -- target="10.1.1.53::backup",

        target="vdevops.org::backup",

        -- excluding list

        excludeFrom="/etc/rsync_exclude.lst",

       rsync     = {

            binary    = "/usr/bin/rsync",

            archive   = true,

            compress  = true,

            verbose   = true

            }

    }

    [[email protected] ~]# systemctl start lsyncd

    [[email protected] ~]# systemctl status lsyncd

    # 啟動完成檢視lsyncd狀态,確定lsync啟動成功

    [[email protected] ~]# systemctl enable lsyncd

    確定在目标主機上及時複制檔案和目錄

    # server 端

    [root@linuxprobe ~]# cd work/

    [root@linuxprobe work]# echo "lsync + rsync" > linuxprobe.txt

    # client 端

    [root@vdevops ~]# cd /home/backup/

    [root@vdevops backup]# ls

    linuxprobe.txt

    [root@vdevops backup]# cat linuxprobe.txt

    lsync + rsync

    # 能看出lsync+ rsync檔案實時同步已完成

    lsyncd.conf配置選項說明

    settings

    裡面是全局設定,--開頭表示注釋,下面是幾個常用選項說明:

    logfile 定義日志檔案

        stausFile 定義狀态檔案

        nodaemon=true 表示不啟用守護模式,預設

        statusInterval 将lsyncd的狀态寫入上面的statusFile的間隔,預設10秒

        inotifyMode 指定inotify監控的事件,預設是CloseWrite,還可以是Modify或CloseWrite or Modify

        maxProcesses 同步程序的最大個數。假如同時有20個檔案需要同步,而maxProcesses = 8,則最大能看到有8個rysnc程序

        maxDelays 累計到多少所監控的事件激活一次同步,即使後面的delay延遲時間還未到

    sync

    裡面是定義同步參數,可以繼續使用maxDelays來重寫settings的全局變量。一般第一個參數指定lsyncd以什麼模式運作:rsync、rsyncssh、direct三種模式:

    default.rsync :本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠端rsync效果,或daemon方式連接配接遠端rsyncd程序;

        default.direct :本地目錄間同步,使用cp、rm等指令完成差異檔案備份;

        default.rsyncssh :同步到遠端主機目錄,rsync的ssh模式,需要使用key來認證

    source 同步的源目錄,使用絕對路徑。

    target 定義目的位址.對應不同的模式有幾種寫法:

        /tmp/dest :本地目錄同步,可用于direct和rsync模式

        172.29.88.223:/tmp/dest :同步到遠端伺服器目錄,可用于rsync和rsyncssh模式,拼接的指令類似于/usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密碼同步

        172.29.88.223::module :同步到遠端伺服器目錄,用于rsync模式

        三種模式的示例會在後面給出。

    init 這是一個優化選項,當init = false,隻同步程序啟動以後發生改動事件的檔案,原有的目錄即使有差異也不會同步。預設是true

    delay 累計事件,等待rsync同步延時時間,預設15秒(最大累計到1000個不可合并的事件)。也就是15s内監控目錄下發生的改動,會累積到一次rsync同步,避免過于頻繁的同步。(可合并的意思是,15s内兩次修改了同一檔案,最後隻同步最新的檔案)

    excludeFrom 排除選項,後面指定排除的清單檔案,如excludeFrom = "/etc/lsyncd.exclude",如果是簡單的排除,可以使用exclude = LIST。

        這裡的排除規則寫法與原生rsync有點不同,更為簡單:

            監控路徑裡的任何部分比對到一個文本,都會被排除,例如/bin/foo/bar可以比對規則foo

            如果規則以斜線/開頭,則從頭開始要比對全部

            如果規則以/結尾,則要比對監控路徑的末尾

            ?比對任何字元,但不包括/

            *比對0或多個字元,但不包括/

            **比對0或多個字元,可以是/

    delete 為了保持target與souce完全同步,Lsyncd預設會delete = true來允許同步删除。它除了false,還有startup、running值,請參考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。

    rsync

    (提示一下,delete和exclude本來都是rsync的選項,上面是配置在sync中的,我想這樣做的原因是為了減少rsync的開銷)

    bwlimit 限速,機關kb/s,與rsync相同(這麼重要的選項在文檔裡竟然沒有标出)

        compress 壓縮傳輸預設為true。在帶寬與cpu負載之間權衡,本地目錄同步可以考慮把它設為false

        perms 預設保留檔案權限。

        其它rsync的選項

    其它還有rsyncssh模式獨有的配置項,如host、targetdir、rsync_path、password_file,見後文示例。rsyncOps={"-avz","--delete"}這樣的寫法在2.1.*版本已經不支援。

    lsyncd.conf可以有多個sync,各自的source,各自的target,各自的模式,互不影響。

    轉載自: http://blog.csdn.net/wh211212/article/details/53054470