知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
vi etc/lsyncd.conf settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", 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 } }
logfile 定義日誌檔案 stausFile 定義狀態檔案 nodaemon=true 表示不啟用守護模式,預設 statusInterval 將lsyncd的狀態寫入上面的statusFile的間隔,預設10秒 inotifyMode 指定inotify監控的事件,預設是CloseWrite,還可以是Modify或CloseWrite or Modify maxProcesses 同步進程的最大個數。假如同時有20個檔案需要同步,而maxProcesses = 8,則最大能看到有8個rysnc進程 maxDelays 累計到多少所監控的事件激活一次同步,即使後面的delay延遲時間還未到
可以繼續使用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.16.0.1:/tmp/dest :同步到遠程伺服器目錄,可用於rsync和rsyncssh模式 172.16.0.1::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值
settings { logfile ="/var/log/lsyncd.log", statusFile ="/var/log/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 8, } -- 本地目錄同步,direct:cp/rm/mv。 適用:500+萬檔案,變動不大 sync { default.direct, source = "/tmp/src", target = "/tmp/dest", delay = 1 maxProcesses = 1 } -- 本地目錄同步,rsync模式: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 sync { default.rsync, source = "/tmp/src", target = "www@192.168.0.1::module", 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 = "www.netkiller.cn:/tmp/dest", -- target = "root@www.netkiller.cn:/www/netkiller.cn/www.netkiller.cn", 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/src", host = "www.netkiller.cn", 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 } }