Lsyncd实现文件实时同步
Lsyncd实现文件实时同步
目录
一、概述
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。
实验环境:CentOS7
发送端:192.168.1.100
接收端:192.168.1.101
实验场景:发送端实时同步文件到接收端所在服务器指定目录。
发送端需要安装lsyncd,而接收端不需要安装。
lsyncd是基于rsync,故发送端安装lsyncd后会也自动依赖安装rsync。
本文实验两种模式:Lsyncd+SSH, Lsyncd+Rsync。
两种模式区别是:Lsyncd+SSH需要配置ssh免密登录;而Lsyncd+Rsync 接收端需要配置启动Rsync服务。
Rsync安装使用可参考我的上一篇博文:https://www.cnblogs.com/huligong1234/p/13513395.html
lsyncd官方文档 https://axkibe.github.io/lsyncd/
二、Lsyncd+SSH配置实现
2.1.发送端Lsyncd安装
yum -y install epel-release
yum -y install lsyncd
lsyncd --version #查看lsyncd版本
2.2.发送端设置SSH免密登录
如果想要将发送端的数据同步到接收端,发送端必须拥有免密码登录接收端的权限,可以设置密钥登录来完成。
只需要两条命令即可,下面的命令在发送端服务器(192.168.1.100)执行:
#发送端生成密钥文件
ssh-keygen -t rsa
#将公钥拷贝到接收端
ssh-copy-id root@192.168.1.101
#测试免密登录
ssh 'root@192.168.1.101'
如果服务器不是使用的22作为SSH端口,需要-p参数指定端口号
2.3.接收端安装rsync
#仅安装好即可,无需额外配置
yum -y install rsync
2.4.发送端配置/etc/lsyncd.conf
注意:lsyncd.conf是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",
insist = true,
statusInterval = 10
}
sync {
default.rsyncssh,
source="/data/uploads",
host="192.168.1.100",
targetdir="/data/uploads",
rsync = {
archive = true,
compress = false,
whole_file = false
},
ssh = {
port = 22
}
}
2.4.发送端启动lsyncd
systemctl start lsyncd
systemctl enabled lsyncd #配置开机启动
测试略
三、Lsyncd+Rsync配置实现
3.1.接收端安装配置/etc/rsyncd.conf
#安装 yum -y install rsync
#配置/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 10
timeout = 900
ignore nonreadable = yes
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
dont compress=*.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[uploadsbackup]
comment=uploads file remote backup
path=/data/uploads
ignore errors=yes
hosts allow=192.168.1.100
auth users=rsync_backup
secrets file=/etc/rsyncd.passwd
list=false
read only=no
3.2.接收端配置rsyncd密码
echo "rsync_backup:123456" >/etc/rsyncd.passwd
chmod 600 /etc/rsyncd.passwd
#启动rsyncd
systemctl start rsyncd
#配置开机启动
systemctl enable rsyncd.service
3.3.发送端Lsyncd安装
yum -y install epel-release
yum -y install lsyncd
lsyncd --version #查看lsyncd版本
3.4.发送端配置rsync客户端密码
echo "123456" >/etc/rsync_client.passwd
chmod 600 /etc/rsync_client.passwd
3.5.发送端修改配置/etc/lsyncd.conf
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
insist = true,
statusInterval = 10
}
sync {
default.rsync,
source="/data/uploads",
target="rsync_backup@192.168.1.101::uploadsbackup",
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
--delete = true,
_extra = {"--password-file=/etc/rsync_client.passwd"}
}
}
3.6.接收端启动lsyncd
systemctl restart lsyncd #重启
测试略