rsync + lsyncd 文件实时同步

2018-07-14 131次浏览 发表评论

lsyncd实现了触发式或定时通知事件,可以近实时的同步文件(封装了rsync),github地址:https://github.com/axkibe/lsyncd

安装lsyncd

yum install lua lua-devel
# Ubuntu
sudo apt install lsyncd
 
# CentOS
sudo yum install epel-release
sudo yum install lsyncd
 
# 编译安装
cmake .
make
sudo make install

安装成功后,你可以在/usr/share/doc/lsyncd-2.2.2/examples/看到Lsyncd配置使用示例。

ls /usr/share/doc/lsyncd-2.2.2/examples/
lalarm.lua  lbash.lua  lecho.lua  lftp.lua  lgforce.lua  limagemagic.lua  lpostcmd.lua  lrsync.lua  lrsyncssh.lua  lsayirc.lua

配置lsyncd

打开Lsyncd的配置/etc/lsyncd.conf,主要包括两个部分:一是设置,另一个是同步 。settings里面是全局设置,开头表示注释,代码如下:

settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status",
    -- maxProcesses = 15
}

-- default.rsync模式需要在远程服务器启动rsync服务
sync {
    default.rsync,
    source = "/data/wwwroot",
    target = "rsyncsunk@192.168.1.10::wwwroot",
    delete = true,
    delay = 10,

    -- 排除
   exclude={                 
        ".txt"
    },
    rsync = {
        binary = "/usr/bin/rsync",

        -- 归档
        archive = true,

        --压缩
        compress = true,

        -- 增量
        verbose = true,

        -- 属主
        owner = true,

        -- 权限
        perms = true,

        -- rsync同步密钥文件
        password_file = "/etc/rsyncd.pwd",
    }
}

-- default.rsyncssh模式需要两台服务器之间建立SSH信任
sync {
    default.rsyncssh,
    source = "/data/wwwroot",
    host = "192.168.1.20",
    targetdir = "/data/wwwroot",
    delete = true,
    delay = 10,
    rsync = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose = true,
        owner = true,
        perms = true,
    }
}

下面是几个常用选项说明:

  1. logfile 定义日志文件
  2. stausFile 定义状态文件
  3. nodaemon=true 表示不启用守护模式,默认
  4. statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
  5. inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是ModifyCloseWrite or Modify
  6. maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
  7. maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到

sync里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:

  1. default.rsync:本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
  2. default.direct:本地目录间同步,使用cp、rm等命令完成差异文件备份;
  3. default.rsyncssh:同步到远程主机目录,rsync的ssh模式,需要使用key来认证。

source同步的源目录,使用绝对路径。target 定义目的地址.对应不同的模式有几种写法:

  1. /tmp/dest :本地目录同步,可用于direct和rsync模式
  2. 172.29.88.223:/tmp/dest:同步到远程服务器目录,可用于rsync和rsyncssh模式
  3. 172.29.88.223::module:同步到远程服务器目录,用于rsync模式

其它优化选项有:

excludeFrom排除选项,后面指定排除的列表文件,如excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用exclude = LIST。这里的排除规则写法与原生rsync有点不同,更为简单:

  • 监控路径里的任何部分匹配到一个文本,都会被排除,例如/bin/foo/bar可以匹配规则foo
  • 如果规则以斜线/开头,则从头开始要匹配全部
  • 如果规则以/结尾,则要匹配监控路径的末尾
  • ?匹配任何字符,但不包括/
  • *匹配0或多个字符,但不包括/
  • **匹配0或多个字符,可以是/

rsync配置选项有:

  • bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
  • compress 压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为false
  • perms 默认保留文件权限。
  • 其它还有rsyncssh模式独有的配置项,如hosttargetdirrsync_pathpassword_file
  • lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。

优化/etc/sysctl.conf,添加如下参数:

fs.inotify.max_user_watches = 10000000

这个参数是调整lsyncd最大监控文件数

运行lsyncd

首先创建日志文件,用于跟踪。

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

启动相关命令

systemctl start lsyncd
systemctl stop lsyncd
systemctl restart lsyncd
systemctl status lsyncd
systemctl enable lsyncd
systemctl disable lsyncd

评论

随便说点,聊聊天~