Lysncd即Live Syncing Daemon,它是开源的数据实时同步工具(后台进程),基于inotify和rsync。Lysncd会密切监测本地服务器上的参照目录,当发现目录下有文件或目录变更后,立刻通知远程服务器,并通过rsync 或rsync+ssh方式实现文件同步。这样做的好处就是,你可以利用Lsyncd搭建一个VPS同步镜像,应用场景例如CDN镜像、网站数据备份、网站搬家等等。

发送端需要安装lsyncd,而接收端不需要安装。 lsyncd是基于rsync,故发送端安装lsyncd后会也自动依赖安装rsync。

发送端设置SSH免密登录

如果想要将发送端的数据同步到接收端,发送端必须拥有免密码登录接收端的权限,可以设置密钥登录来完成。

ssh-keygen -t rsa #生成秘钥直接按回车
ssh-copy-id 目的IP #将公钥发送到目标机器
ssh 192.168.1.101  #测试免密效果

发送端安装lsync

yum -y install epel-release
yum -y install lsyncd
lsyncd --version #查看lsyncd版本

发送端配置/etc/lsyncd.conf(lua语言通过两个“-”注释)

settings {
   logfile = "/var/log/lsyncd.log",  -- 指定日志文件位置
   statusFile = "/var/log/lsyncd.status",  -- 指定状态文件位置
   inotifyMode = "CloseWrite", --当文件被关闭时开始同步
   maxProcesses = 1, --最大线程,ssh模式的缺点就是最大线程只能为1
}
sync {
    default.rsyncssh, --指定工作模式为ssh
    source    = "/home/prometheus-2.31.1.linux-amd64/",  --源路径
    host      = "10.31.140.28",  --目标主机
    targetdir = "/home/prometheus-2.31.1.linux-amd64/", --目标路径
    maxDelays = 1,  --为了实时同步,一般设置为1,表示即使只有一个文件改变也同步
    delay = 0,
    -- init = false,
    rsync    = {
        binary = "/usr/bin/rsync",--告诉lsync,rsync的地址在哪里
        archive = true, -- 打包后再同步(打包不等于压缩,打包即可以压缩也可以不压缩)
        compress = true,-- 压缩后再同步
        verbose  = false,-- 输出同步信息 
       _extra = {
      "--include=rules.yml",--同步的文件
      "--exclude=*",--排除掉的文件
          },
        },
        ssh   = {
        port  =  22
        }
    }

发送端启动lsyncd

systemctl start lsyncd
systemctl enabled lsyncd #配置开机启动

接收端安装rsync

检查是否已安装,rsync配置文件不用做修改。

rpm -qa |grep rsync #rsync是git的依赖,所以如果装了git,就会有rsync
netstat -an | grep 873 #检查rsync服务是否启动
systemctl start rsyncd
systemctl status rsyncd #查看服务状态
systemctl enable rsyncd.service
kill $(ps -aux |grep rsync |awk '{print $2}') # 关闭lsync

设置lsync开启自启动

写进/etc/rc.local

/usr/bin/lsyncd /etc/lsyncd.conf #启动lsync
#kill $(ps -aux |grep lsync |awk '{print $2}') # 关闭lsync

测试成功