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

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 #重启

测试略

四、更多资料参考

原文地址:https://www.cnblogs.com/huligong1234/p/13549848.html