數據同步之rsync | 第4篇:lsyncd

文章來源:王琦的個人博客-數據同步之rsync | 第3篇:lsyncd ,互聯網打雜,喜歡多語言編程,記錄一些知識碎片,分享一些心得。

使用lsyncd進行數據的實時同步。

之前項目用sersync,用起來也很方便,xml的可讀性比較好,但是文件排除功能弱了點,再加上好多年不更新了,所以就就把實時同步換成lsyncd。

配置文件


settings {
    logfile ="/var/log/lsyncd.log",
    statusFile ="/tmp/lsyncd.state",
    inotifyMode = "CloseWrite",
    maxProcesses = 7,
    -- nodaemon =true,
    }
 
sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "/tmp/dest",
    -- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
    rsync     = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = true,
        verbose   = true
        }

配置參數說明

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 定義同步參數

  • default.rsync :本地目錄間同步,使用rsync,也可以達到使用ssh形式的遠程rsync效果,或daemon方式連接遠程rsyncd進程;
    default.direct :本地目錄間同步,使用cp、rm等命令完成差異文件備份;
    default.rsyncssh :同步到遠程主機目錄,rsync的ssh模式,需要使用key來認證;

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

  • target 定義目的地址.有幾種不同模式的寫法

    • /tmp/dest :本地目錄同步,可用於direct和rsync模式
    • 172.16.1.100:/tmp/dest :同步到遠程服務器目錄,可用於rsync和rsyncssh模式
    • 172.16.1.100::module :同步到遠程服務器目錄,用於rsync模式
  • init 優化選項,當init = false,只同步進程啓動以後發生改動事件的文件,原有的目錄即使有差異也不會同步。默認是true,一般不要更改

  • delay 累計事件,等待rsync同步延時時間,默認15秒(最大累計到1000個不可合併的事件)。也就是15s內監控目錄下發生的改動,會累積到一次rsync同步,避免過於頻繁的同步。(可合併的意思是,15s內兩次修改了同一文件,最後只同步最新的文件)

  • delete 爲了保持target與souce完全同步,Lsyncd默認會delete = true來允許同步刪除。它除了false,還有startup、running值

  • excludeFrom 排除選項,後面指定排除的列表文件,如excludeFrom = “/etc/lsyncd.exclude”,如果是簡單的排除,可以使用exclude = LIST

    1. 監控路徑裏的任何部分匹配到一個文本,都會被排除,例如/bin/foo/bar可以匹配規則foo
    2. 如果規則以斜線/開頭,則從頭開始要匹配全部
    3. 如果規則以/結尾,則要匹配監控路徑的末尾
    4. ?匹配任何字符,但不包括/
    5. *匹配0或多個字符,但不包括/
    6. **匹配0或多個字符,可以是/

rsync

  • bwlimit 限速,單位kb/s,與rsync相同
  • compress 壓縮傳輸默認爲true。在帶寬與cpu負載之間權衡,本地目錄同步可以考慮把它設爲false
  • perms 默認保留文件權限。

其它還有rsyncssh模式獨有的配置項,如host、targetdir、rsync_path、password_file,見後文示例。

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

啓動

`lsyncd -log Exec /usr/local/lsyncd-2.2.3/etc/lsyncd.conf`

同步模式

本地同步

本地目錄同步,direct:cp/rm/mv。

sync {
    default.direct,
    source    = "/tmp/src",
    target    = "/tmp/dest",
    delay = 1
    maxProcesses = 1
}

本地目錄同步(rsync模式)

sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "/tmp/dest1",
    excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        bwlimit   = 2000
        } 
}

遠程目錄同步,rsync模式 + rsyncd daemon(常用)

需要配置rsyncd服務端

sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "[email protected]::module1",
    delete="running",
    exclude = { ".*", ".tmp" },
    delay = 30,
    init = false,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        password_file = "/etc/rsyncd.d/rsync.pwd",
        _extra    = {"--bwlimit=200"}
    }

遠程目錄同步,rsync模式 + ssh shell

sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "172.16.1.100:/tmp/dest",
    -- target    = "[email protected]:/remote/dest",
    -- 上面target,注意如果是普通用戶,必須擁有寫權限
    maxDelays = 5,
    delay = 30,
    -- init = true,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        bwlimit   = 2000
        -- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
        -- 如果要指定其它端口,請用上面的rsh
        }
    }

遠程目錄同步,rsync模式 + rsyncssh,效果與上面相同

sync {
    default.rsyncssh,
    source    = "/tmp/src2",
    host      = "172.16.1.100",
    targetdir = "/remote/dir",
    excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
    -- maxDelays = 5,
    delay = 0,
    -- init = false,
    rsync    = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        _extra = {"--bwlimit=2000"},
        },
    ssh      = {
        port  =  1234
        }
    }

常用配置

settings {
    logfile ="/var/log/lsyncd.log",
    statusFile ="/tmp/lsyncd.state",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
        }


sync {
    default.rsync,
    {% if ansible_hostname == web01_hostname %}
    source    = "/www/server/nginx/html/",
    target    = "rsync_backup@{{ web02_ip }}::html",
    {% elif ansible_hostname == nfs01_hostname %}
    source    = "/data",
    target    = "rsync_backup@{{ backup_ip }}::backup",
    {% endif %}
    delete="running",
    init = false,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        password_file = "/etc/rsync.password",
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章