使用lsyncd实时同步-解决服务器双向实时同步问题(内含常见错误)!

生产环境中大家也许会遇到需要将2台服务器xx目录进行实时同步,有人可能会想到sersync,但是臣妾做不到(例如2台服务器双向配置了sersync进行实时同步,如果有一台重启后,那么sersync将会按照重新启动sersync软件的服务器目录进行同步,所以请慎重使用)!

下面介绍一下lsyncd这个软件,Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。我认为它最令人称道的特性是,完美解决了 inotify + rsync 海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。另外,它的配置方式很简单,lua本身就是一种配置语言,可读性非常强。
lsyncd也有多种工作模式可以选择,本地目录cp,本地目录rsync,远程目录rsyncssh。

实验环境:
VMware14
Centos7.6
lsyncd2.2.2(yum安装即可)
rsync3.1.2(yum安装即可,lsyncd自带可能版本低,请自行安装)
创建2台服务器(nfs01、nfs02)

首先配置好rsync配置文件(/etc/rsyncd.conf),然后配置lsyncd配置文件(/etc/lsyncd.conf),详解如下:

#只适合小文件,实验环境(1g内存1核心)大于500m,死机;
settings {
        #定义日志文件位置
        logfile = "/var/log/lsyncd.log",
        #定义(文件修改等)状态文件位置;
        statusFile = "/var/log/lsyncd.status",
        #指定inotify监控的事件,默认是 CloseWrite ,还可以是 Modify 或 CloseWrite or Modify;
        inotifyMode = "CloseWrite or Modify",
        #同步进程的最大个数,可根据服务器性能修改,最好不要超过核心数;
        maxProcesses = 2,
        }
sync {
        #默认同步方式有rsync、direct、rsyncssh等;
        default.rsync,
        #需要同步的本地目录;
        source = "/zhihuupload",
        #目标远端服务器;
        target = "[email protected]::zhihuupload",
        #running:指Lsyncd在启动时不会删除目标上的文件,但会删除正常运行操作期间删除的文件,同步删除需要使用running;
        delete = "running",
        #多久(15s)同步一次;
        delay = 15,
        #当 init = false ,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步,但是2.2版本无法填写init=true会报错,所以不写默认为true
        #init = true,
        rsync = {
                #rsync命令位置;
                binary = "/usr/bin/rsync",
                #归档模式
                archive = true,
                #压缩传输;
                compress = true,
                #增量复制
                verbose = true,
                password_file = "/etc/rsync.passwd",
                #限制传输速率1m,参数-av;
                _extra = {"--bwlimit=5000"}
                }
        }

实现功能:
nfs01和nfs02共享目录/zhihuupload实现双向实时同步,且重启服务时同步拉取对方最新数据,还可以定时如15s同步一次,降低负载,但不足之处就是同步文件过大会造成负载过高的问题(可能是实验环境造成的)。


报错分析:
1、加载配置文件正常,服务启动失败报lsyncd[7885]错误

Error: in Lua: /builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:2659: attempt to call field 'init' (a boolean value)
Error: Backtrace 1 :/builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:2659
Error: Backtrace 2 :/builddir/build/BUILD/lsyncd-release-2.2.2/lsyncd.lua:4374
主要是因为lsyncd2.2版本bug引起,如需使用init=true功能,配置文件中请不要直接写init=true来开启功能,如需init=true请将init=true注释或删除(因为默认init=true)来解决7885报错。

2、rsync未启动或配置错误,报错中会突出显示rysnc错误,根据错误提示修改即可


BTC:3LD8DBk5nZSwmGoF1mvM12Pp5YqNFEvfLA
ETH:0xAD765200e7Feb98a2AF262387A41F078e9F91eAc

你可能感兴趣的:(使用lsyncd实时同步-解决服务器双向实时同步问题(内含常见错误)!)