rsyncd实时同步
📖 介绍
Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync
海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。
🧰 部署
主机 |
服务器 |
需要安装的服务 |
8.142.100.116(Slave) |
Centos7.9 |
rsync |
192.168.99.5(Master) |
Centos7.9 |
lsyncd |
远程同步
部署需要在master安装lsyncd,lsyncd会通过ssh协议把本地数据实时同步到slave节点,同步之前master和slave需要做ssh免密认证
1 2 3 4 5
| 1、首先,确保系统已经安装了EPEL存储库。如果未安装,请运行以下命令进行安装: yum install lsyncd systemctl start lsyncd.service && systemctl enable lsyncd.service 2、安装lsyncd软件包,也可以创建配置目录方便写多个配置文件,需要在主配置里面用include包含,例如include "/path/to/config1.lua" sudo yum install lsyncd
|
3、配置lsyncd,编辑/etc/lsyncd.conf文件,记得删除注释
如果同步文件目录过多需要写子目录配置可以添加include
。例如:include “/path/to/config1.lua”,当然也支持多个目录卸载同一目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| [root@test-95 ~] settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite or Modify", -- nodaemon =true, statusInterval=3, maxProcesses = 1, }
-- 异地同步 sync { default.rsyncssh, source = "/data", host = "root@8.142.100.116", targetdir = "/tmp/data", delay=3, delete = false, maxDelays=2, rsync = { binary = "/usr/bin/rsync", archive = true, compress = false, perms = true, owner = true, rsh = "-e /usr/bin/ssh -p 22 -l dx -i /home/dx/.ssh/id_rsa -o StrictHostKeyChecking=no", }, ssh = { port = 22, options = {User = 'dx'}, _extra = { "-i /home/dx/.ssh/id_rsa"} } }
|
配置选项说明
settings 里面是全局设置,–开头表示注释,下面是几个常用选项说明:
logfile 定义日志文件
stausFile 定义状态文件
nodaemon=true 表示不启用守护模式,默认
statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite or Modify
-CloseWrite
: 只同步在写入完成后被关闭的文件。这是默认的操作模式,适用于大多数情况。
-Modify
: 同步所有经过修改的文件,即使它们正在被写入。这个操作模式可以提高同步的及时性,但可能会增加系统负载。
maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,则最大能看到有8个rysnc进程
maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
insist: 如果设置为true,则当第一个同步任务失败时,lsyncd将继续进行下一个同步,并在日志中记录错误信息。
sync 里面是定义同步参数
default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证
source
同步的源目录,使用绝对路径
targetdir
定义远程目的地址.对应不同的模式有几种写法:
delay
累计事件,等待rsync同步延时时间(默认15s内两次修改了同一文件,最后只同步最新的文件)
delete
为了保持target与souce完全同步,Lsyncd默认会delete = true
来允许同步删除。它除了false
,还有startup
、running
值
excludeFrom
排除选项,后面指定排除的列表文件
本地同步
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 7, -- nodaemon =true, } sync { default.rsync, source = "/data", target = "/tmp/data", delay=3, delete = false, -- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true } }
|
多任务同步
如果有多个路径实时同步任务可以参考以下内容,也可以通过include
写多个子文件方便管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| [root@test-95 ~] settings { logfile ="/var/log/lsyncd/lsyncd.log", statusFile ="/var/log/lsyncd/lsyncd.status", inotifyMode = "CloseWrite", maxProcesses = 1, -- nodaemon =true, }
-- 本地同步 sync { default.rsync, source = "/data", target = "/tmp/data", delay=3, -- excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst", rsync = { binary = "/usr/bin/rsync", archive = true, compress = true, verbose = true } }
-- 异地同步 sync { default.rsyncssh, source = "/data", host = "root@8.142.100.116", targetdir = "/tmp/", delay=3, delete = false, maxDelays=2, rsync = { binary = "/usr/bin/rsync", archive = false, compress = false, perms = true, owner = true, rsh = "-e /usr/bin/ssh -p 22 -l root -i /home/dx/.ssh/id_rsa", }, ssh = { port = 22, options = {User = 'root'}, _extra = { "-i /home/dx/.ssh/id_rsa"} } }
|