1. 程式人生 > >lsync目錄文件實時同步工具

lsync目錄文件實時同步工具

logs 它的 使用 eat oda ive 丟失 targe 文件實時同

參考文檔:https://vastxiao.github.io/article/2017/09/02/Linux/lsyncd_usage/

防止連接丟失,已保存至百度網絡-鄭州-XXXXX

建議首先查看 參考文檔連接,寫的比較全了

1、簡介

lsync
官網:https://axkibe.github.io/lsyncd/

Lysncd 實際上是lua語言封裝了inotify和rsync工具,采用了Linux內核(2.6.13及以後)裏的inotify觸發機制,然後通過rsync去差異同步,達到實時的效果。
最亮的特性:完美解決了inotify+rsync海量文件同步帶來的文件頻繁發送文件列表的問題 —— 通過時間延遲或累計觸發事件次數實現。
它的配置方式很簡單,lua本身就是一種配置語言,可讀性非常強。
lsyncd也有多種工作模式可以選擇,本地目錄cp,本地目錄rsync,遠程目錄rsyncssh。
實現簡單高效的本地目錄同步備份(網絡存儲掛載也當作本地目錄),一個命令搞定。

2、安裝

# yum安裝需要epel源
# 阿裏epel源地址:http://mirrors.aliyun.com/help/epel
yum install lsyncd
源碼安裝:
yum install -y lua cmake rsync
VERSION=2.1.5
wget -O lsyncd-release-${VERSION?err}.tar.gz https://github.com/axkibe/lsyncd/archive/release-${VERSION?err}.tar.gz
tar -zxvf lsyncd-release-${VERSION?err}.tar.gz
cd lsyncd
-release-${VERSION?err} cmake . make sudo make install

3、yum安裝文件結構

        路徑              說明
/etc/lsyncd.conf    主配置文件
/etc/sysconfig/lsyncd       init環境變量和啟動選項配置文件
/etc/logrotate.d/lsyncd    日誌滾動配置文件
/usr/share/doc/lsyncd-*/examples/    目錄下有lsyncd.conf配置例子
/etc/init.d/lsyncd         lsyncd的init啟動腳本
/usr/bin/lsyncd lsyncd命令路徑 /var/run/lsyncd/ 可放lsyncd.pid的目錄 /var/log/lsyncd/ 默認的日誌目錄

4、文件配置

lsyncd的一個配置文件總體分類:

settings(global):settings是全局進程設置。
sync(layer 4):sync裏面是定義同步參數,可以有多個sync,各自的sync配置,互不影響。
onAction(layer 3): 用於定義sync觸發的事件動作,定義後的Action應用到sync配置下。
(例如監控某個目錄下的文件,根據觸發的事件自己定義要執行的命令。)
AdvancedonAction(layer 2):自定義事件模型,定義後可應用到layer3和layer4。
Inlets(layer 1):自定義事件函數,一般在自定義事件模型(layer 2)中使用自定義事件函數。
註釋:–開頭表示註釋

[root@zz ~]# cat /etc/lsync.conf 
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
-- 
settings {
--pidfile = "/var/run/lsyncd/lsyncd.pid"
--nodaemon = false,
inotifyMode = "CloseWrite",
maxProcesses = 8,
statusFile ="/tmp/lsyncd.status",
statusInterval = 10,
logfile = "/var/log/lsyncd/lsyncd.log"
}

-- # 監測本地目錄發生變化就用touch更新一下mtime時間。
flushModifyTime = {
delay = 10,
maxProcesses = 10,
onCreate = "touch ^sourcePathname",
onModify = "touch ^sourcePathname", 
}

sync {
default.rsync,
source = "/opt/share",
target = "[email protected]::beian",
delete = "running",
-- exclude = { "logs" },
delay = 10,
init = false,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file = "/etc/rsyncd.d/rsync.pwd",
_extra = { "--bwlimit=200" }
}
}
-----------------------------------------------------------------------
啟動:
lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd.conf

一個真實的例子:本地目錄備份

[root@tomcat2 ~]# cat /etc/lsyncd.conf 
settings {
   --pidfile = "/var/run/lsyncd/lsyncd.pid",
   --nodaemon  = false,
   inotifyMode = "CloseWrite",
   maxProcesses = 8,
   statusFile = "/tmp/lsyncd.status",
   statusInterval = 10,
   logfile = "/var/log/lsyncd/lsyncd.log"
}

sync {
   default.rsync,
   source = "/opt/webapplication",
   target = "/back_up/webapplication",
   delete = "false",
   --exclude = { "logs" },
   delay = 5,
   init = false,
   rsync    = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
        bwlimit = 2000
    }
}

sync {
   default.rsync,
   source = "/data",
   target = "/back_up/data",
   delete = "false",
   --exclude = { "logs" },
   delay = 5,
   init = false,
   rsync    = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
        bwlimit = 2000
    }
}
[root@tomcat2 ~]# 

lsync目錄文件實時同步工具