文件同步工具 lsyncd2.1.6 安裝使用問題

項目有文件實時同步備份的需求,作了一下調查,比較好的解決方法是使用lsyncd工具。這裏主要記錄一下遇到的問題及解決方法。css

lsyncd 的相關介紹和對比可見:linux

lsyncd實時同步搭建指南——取代rsync+inotify

Linux下同步工具inotify+rsync使用詳解

Linux文件系統Inotify機制

lsyncd官方文檔:git

Lsyncd - Live Syncing (Mirror) Daemon


 一、安裝問題

安裝時須要先安裝 lua和cmake,可直接使用apt-get:github

apt-get install lua5.1segmentfault

apt-get install lua5.1-dev服務器

apt-get install cmakessh

接着能夠下載 lsyncd-2.1.6 版本解壓安裝,解壓後進入改目錄:工具

cmake ,post

make優化

make install

便可完成安裝。


 二、使用問題

若是使用在大型系統上,文件數量多、大,文件變化頻繁,則要修改一些系統參數。

由於lsyncd 有用到 inotify監聽,其中相關的主要是這幾個參數:

#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Oct  9 09:36 max_queued_events
-rw-r--r-- 1 root root 0 Oct  9 09:36 max_user_instances
-rw-r--r-- 1 root root 0 Oct  9 09:36 max_user_watches

/proc/sys/fs/inotify/max_user_instances 默認值: 128 指定了每個real user ID可建立的inotify instatnces的數量上限
/proc/sys/fs/inotify/max_user_watches 默認值: 8192 指定了每一個inotify instance相關聯的watches的上限
/proc/sys/fs/inotify/max_queued_events 默認值: 16384,Inotify 管理的隊列的最大長度

 

若是監聽的文件數量大,則增大 max_user_watches(不然可能啓動失敗),若是文件變化頻繁,則增大max_queued_events(不然隊列溢出,致使部分文件未同步或lsyncd重啓) :

一次性方法:

sysctl fs.inotify.max_user_watches=xxxxxx

長久有效:

fs.inotify.max_user_watches=xxxxxx 寫進 /ect/sysctl.conf,而後 sysctl -p 打印查看

(注意:max_queued_events 修改後,須要重啓lsyncd才能生效----2018-6-14 更新說明)

參考:

linux 高效的文件系統事件監控 內核級解析方案 inotify

Lsyncd causes load while monitoring large filesystem.


 三、基本參數介紹

settings
裏面是全局設置,--開頭表示註釋,下面是幾個經常使用選項說明:

  • logfile 定義日誌文件
  • stausFile 定義狀態文件
  • nodaemon=true 表示不啓用守護模式,默認
  • statusInterval 將lsyncd的狀態寫入上面的statusFile的間隔,默認10秒
  • inotifyMode 指定inotify監控的事件,默認是CloseWrite,還能夠是ModifyCloseWrite or Modify
  • maxProcesses 同步進程的最大個數。假如同時有20個文件須要同步,而maxProcesses = 8,則最大能看到有8個rysnc進程
  • maxDelays 累計到多少所監控的事件激活一次同步,即便後面的delay延遲時間還未到

sync
裏面是定義同步參數,能夠繼續使用maxDelays來重寫settings的全局變量。通常第一個參數指定lsyncd以什麼模式運行:rsyncrsyncsshdirect三種模式:

  • default.rsync :本地目錄間同步,使用rsync,也能夠達到使用ssh形式的遠程rsync效果,或daemon方式鏈接遠程rsyncd進程;
    default.direct :本地目錄間同步,使用cprm等命令完成差別文件備份;
    default.rsyncssh :同步到遠程主機目錄,rsync的ssh模式,須要使用key來認證

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

  • target 定義目的地址.對應不一樣的模式有幾種寫法:
    /tmp/dest :本地目錄同步,可用於directrsync模式
    172.29.88.223:/tmp/dest :同步到遠程服務器目錄,可用於rsyncrsyncssh模式,拼接的命令相似於/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或多個字符,能夠是/

rsync
(提示一下,deleteexclude原本都是rsync的選項,上面是配置在sync中的,我想這樣作的緣由是爲了減小rsync的開銷)

  • bwlimit 限速,單位kb/s,與rsync相同(這麼重要的選項在文檔里居然沒有標出)
  • compress 壓縮傳輸默認爲true。在帶寬與cpu負載之間權衡,本地目錄同步能夠考慮把它設爲false
  • perms 默認保留文件權限。
  • 其它rsync的選項

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

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

引用:

lsyncd實時同步搭建指南——取代rsync+inotify

 

 


更新至 2018-06-06

相關文章
相關標籤/搜索