因公司业务需要需要实时同步日志文件,刚一开始使用的是inotify+rsync来实现实时同步,但时间久而久之发现同步的速度越来越慢,往往延迟好几个小时。查了一下网上的inotify+rsync方案基本一致,基本都是使用后台运行脚本,持续监视文件,然后同步。我也查了一下是否有优化的可能性,但也因暂未找到相关优化方案,所找到了 lsyncd,发现lsyncd相较于inotify+rsync方案更为方便,安装配置也更加简单。特试用了一下,感觉还是不错。所特记录一笔。
1. inotify+rsync方案配置
2. lsyncd方案配置
2.1 lsyncd介绍
@来自网上搜索
lsyncd 是一个支持实时、双向、多机器的多模式文件同步工具。使用 Lua 语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过 rsync 去差异同步,达到实时的效果。
简单来说lsyncd就是将 inotify
与rsync
合并成一个东西,不过机器上还是需要有rsync来同步的哦。
2.2 安装
2.2.1 安装lsyncd
只需要在一台机器上安装,比如你需要将A上的文件同步到B上,那你只需要在A上安装lsyncd,配置lsyncd同理。
#lsyncd有两种安装方式,可直接yum安装也可编译安装。因编译安装比较麻烦,所以我这里采用的是yum安装方式。
#yum安装需要配置epel源,这里使用的是阿里的源。如果已经安装过的可忽略
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install lsyncd
如果需要编译安装的点击下载安装包️编译安装软件包下载链接然后不会编译安装的自己百度哈,跟其他软件的编译安装一样的哈。
2.2.2 安装rsync
因之前有写过一次所不再重复,不会的可参考我之前的文章点击前往️
3. 配置
3.1 rsync配置
因之前有写过一次所不再重复,不会的可参考我之前的文章点击前往️
3.2 lsyncd配置
lsyncd配置文件路径在 /etc/lsyncd.conf
--- 这个符号开头的都是默认的配置文件,因lsyncd是由Lua编写的,注释符号不是 # 而是 --
----
-- 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/
--
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}
settings {
logfile="/var/log/lsyncd/lsyncd.log",
statusFile="/var/log/lsyncd/lsyncd.status",
statusInterval=3,
maxDelays=1,
inotifyMode="CloseWrite or Modify",
maxProcesses=12,
nodaemon=true,
}
sync {
default.rsync,
source = "/data/chenfan-logs/",
target = "root@127.0.0.1::log",
delay = 100,
rsync = {
binary = "/usr/bin/rsync",
password_file = "/etc/rsync.pass",
archive = true,
compress = false,
verbose = true
}
}
3. 结束
使用了lsyncd后发现同步比原先的inotify+rsync方案快很多。在这里我想问一下,inotify+rsync方案在优化上面有没有什么要注意的地方?