Rsync + lsyncd 文件实时同步

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
THE END
点赞0赞赏 分享
抢沙发
头像
提交
头像

昵称

取消
昵称表情

    暂无评论内容