阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Lsyncd搭建同步镜像-用Lsyncd实现本地和远程服务器之间实时同步

515次阅读
没有评论

共计 5562 个字符,预计需要花费 14 分钟才能阅读完成。

Lysncd 即 Live Syncing Daemon,它是开源的数据实时同步工具(后台进程),基于 inotify 和 rsync。

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

一、Lsyncd 安装方法

Lsyncd 官网是:http://axkibe.github.io/lsyncd/,Linux 安装命令如下:

# Ubuntu
sudo apt install lsyncd
 
# CentOS
sudo yum install epel-release
sudo yum install lsyncd
 
# 编译安装
cmake .
make
sudo make install

安装成功后,你可以在:/usr/share/doc/lsyncd/examples,看到 Lsyncd 配置使用示例,你可以参考这些示例自己再编写配置。

二、Lsyncd 配置说明

打开 Lsyncd 的配置,你可以看到主要包括两个部分:一是设置,另一个是同步。settings 里面是全局设置,–开头表示注释,代码如下:

settings {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
    default.rsyncssh,
    source = "/root/linsir", -- 源目录
    host = "192.168.2.16", -- 目的主机
    targetdir = "/root/remote", -- 远程目录
    delete = true,
    delay = 0,
    exclude={".txt"             -- 排除},
    rsync = {
           binary = "/usr/bin/rsync",
           archive = true, -- 归档
            compress = true, -- 压缩
            verbose = true, 
           owner = true,   -- 属主
            perms = true,   -- 权限
            _extra = {"--bwlimit=2000"},
            },
        ssh = {port = 3322}
}

下面是几个常用选项说明:

logfile 定义日志文件
stausFile 定义状态文件
nodaemon=true 表示不启用守护模式,默认
statusInterval 将 lsyncd 的状态写入上面的 statusFile 的间隔,默认 10 秒
inotifyMode 指定 inotify 监控的事件,默认是 CloseWrite,还可以是 Modify 或 CloseWrite or Modify
maxProcesses 同步进程的最大个数。假如同时有 20 个文件需要同步,而 maxProcesses = 8,则最大能看到有 8 个 rysnc 进程
maxDelays 累计到多少所监控的事件激活一次同步,即使后面的 delay 延迟时间还未到

sync 里面是定义同步参数,可以继续使用 maxDelays 来重写 settings 的全局变量。一般第一个参数指定 lsyncd 以什么模式运行:rsync、rsyncssh、direct 三种模式:

default.rsync:本地目录间同步,使用 rsync,也可以达到使用 ssh 形式的远程 rsync 效果,或 daemon 方式连接远程 rsyncd 进程;
default.direct:本地目录间同步,使用 cp、rm 等命令完成差异文件备份;
default.rsyncssh:同步到远程主机目录,rsync 的 ssh 模式,需要使用 key 来认证

source 同步的源目录,使用绝对路径。target 定义目的地址. 对应不同的模式有几种写法:

/tmp/dest:本地目录同步,可用于 direct 和 rsync 模式
172.29.88.223:/tmp/dest:同步到远程服务器目录,可用于 rsync 和 rsyncssh 模式,拼接的命令类似于 /usr/bin/rsync -ltsd –delete –include-from=- –exclude=* SOURCE TARGET,剩下的就是 rsync 的内容了,比如指定 username,免密码同步
172.29.88.223::module:同步到远程服务器目录,用于 rsync 模式

其它优化选项有:

init 这是一个优化选项,当 init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是 true
delay 累计事件,等待 rsync 同步延时时间,默认 15 秒(最大累计到 1000 个不可合并的事件)。也就是 15s 内监控目录下发生的改动,会累积到一次 rsync 同步,避免过于频繁的同步。(可合并的意思是,15s 内两次修改了同一文件,最后只同步最新的文件)
delete 为了保持 target 与 souce 完全同步,Lsyncd 默认会 delete = true 来允许同步删除。它除了 false,还有 startup、running 值,请参考 Lsyncd 2.1.x ‖ Layer 4 Config ‖ Default Behavior。

excludeFrom 排除选项,后面指定排除的列表文件,如 excludeFrom =“/etc/lsyncd.exclude”,如果是简单的排除,可以使用 exclude = LIST。这里的排除规则写法与原生 rsync 有点不同,更为简单:

监控路径里的任何部分匹配到一个文本,都会被排除,例如 /bin/foo/bar 可以匹配规则 foo
如果规则以斜线 / 开头,则从头开始要匹配全部
如果规则以 / 结尾,则要匹配监控路径的末尾
? 匹配任何字符,但不包括 /
* 匹配 0 或多个字符,但不包括 /
** 匹配 0 或多个字符,可以是 /

rsync 配置选项有:

bwlimit 限速,单位 kb/s,与 rsync 相同(这么重要的选项在文档里竟然没有标出)
compress 压缩传输默认为 true。在带宽与 cpu 负载之间权衡,本地目录同步可以考虑把它设为 false
perms 默认保留文件权限。
其它还有 rsyncssh 模式独有的配置项,如 host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={“-avz”,”–delete”}这样的写法在 2.1.* 版本已经不支持。
lsyncd.conf 可以有多个 sync,各自的 source,各自的 target,各自的模式,互不影响。

三、Lsyncd 本地同步

首先,创建日志文件,用于跟踪。

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

然后,创建配置文件。

mkdir /etc/lsyncd
vim /etc/lsyncd/lsyncd.conf.lua

配置文件写入以下内容(注意把 Source 和 Target 分别替换你的源目录路径和目标目录路径):

settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}
 
sync {
        default.rsync,
        source = "/var/www/source_dir",
        target = "/home/snail/backup",
}

最后,启动 lsyncd 服务:systemctl restart lsyncd,往源目录中添加文件,看看目标目录中会不会同步增加。如果没有,请查看日志。

四、Lsyncd 远程同步

用 Lsyncd 实现两台 VPS 主机服务器之间实时同步。首先,进入你的源 VPS 主机,使用 S -S- H 命令远程登录到目标 VPS 主机上。

ssh root@your_remote_server_IP 
#或者指定端口
ssh root@your_remote_server_IP -p 1234 

接着,执行命令, 在目标 VPS 上生成密钥:

ssh-keygen -t rsa  # 全部回车默认

   Lsyncd 搭建同步镜像 - 用 Lsyncd 实现本地和远程服务器之间实时同步

 

生成密钥成功后, 你需要将目标 VPS 上的密钥文件复制到源 VPS 主机上, 路径保持一致。

然后,重新进入到源 VPS 上,执行命令:ssh-copy-id root@your_remote_server_IP,再次输入远程登录密码,确认添加密钥。

Lsyncd 搭建同步镜像 - 用 Lsyncd 实现本地和远程服务器之间实时同步

 

密钥添加成功后,现在你就可以在源 VPS 上直接使用:ssh root@your_remote_server_IP,不需要输入密码就可以进入到远程 VPS 了。然后按照上面本地同步的方法,创建日志和配置文件,注意替换你自己的源目录与目标目录路径。

settings = {
    insist = true,
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}
 
sync {
    default.rsyncssh,
    source = "/home/www",
    host = "115.28.65.xxx",
    targetdir = "/home/backup"
}

如果你的目标 VPS 的端口不是默认的 22,你可以用以下方法指定端口:

settings = {
    insist = true,
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}
 
sync {
    default.rsyncssh,
    source = "/home/www",
    host = "115.28.65.xxx",
    targetdir = "/home/backup"

    ssh = {port = 36000}
    
}

最后,重新启动: systemctl restart lsyncd。

Lsyncd 搭建同步镜像 - 用 Lsyncd 实现本地和远程服务器之间实时同步

 

稍等一会儿,你就可以看到目标目录已经有了同步过来的文件了。

Lsyncd 搭建同步镜像 - 用 Lsyncd 实现本地和远程服务器之间实时同步

 

同时,打开日志文件,你也可以看到操作记录。

Lsyncd 搭建同步镜像 - 用 Lsyncd 实现本地和远程服务器之间实时同步

 

Lsyncd 其他模式示例(请根据实际替换路径与 IP 地址):

settings {
    logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",
    statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",
    inotifyMode = "CloseWrite",
    maxProcesses = 8,
    }

-- 远程目录同步,rsync 模式 + rsyncd daemon
sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "syncuser@172.29.88.xxx::module1",
    delete="running",
    exclude = {".*", ".tmp"},
    delay = 30,
    init = false,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        password_file = "/etc/rsyncd.d/rsync.pwd",
        _extra    = {"--bwlimit=200"}
        }
    }
--  远程目录同步,rsync 模式 + ssh shell
sync {
    default.rsync,
    source    = "/tmp/src",
    target    = "172.29.88.xxx:/tmp/dest",
    -- target    = "root@172.29.88.xxx:/remote/dest",
    -- 上面 target,注意如果是普通用户,必须拥有写权限
    maxDelays = 5,
    delay = 30,
    -- init = true,
    rsync     = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        bwlimit   = 2000
        -- rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
        -- 如果要指定其它端口,请用上面的 rsh
        }
    }
--  远程目录同步,rsync 模式 + rsyncssh,效果与上面相同
sync {
    default.rsyncssh,
    source    = "/tmp/src2",
    host      = "172.29.88.xxx",
    targetdir = "/remote/dir",
    excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
    -- maxDelays = 5,
    delay = 0,
    -- init = false,
    rsync    = {
        binary = "/usr/bin/rsync",
        archive = true,
        compress = true,
        verbose   = true,
        _extra = {"--bwlimit=2000"},
        },
    ssh      = {port  =  1234}
    }

五、总结

Lsyncd 配置起来还是蛮简单的,大家嫌麻烦的话不需要研究他们的参数,直接使用本篇文章中的 Lsyncd 远程同步示例代码,其它的选项保持默认的即可。Lsyncd 同步的速度取决你的 VPS 主机的带宽,并且是增量同步备份。

如何实现一对多的实时同步呢?解决的方法就是直接在配置中重复添加多个目标目录路径。

sync{ 
default.rsync, 
source='/sourcedir', 
target='targethost1:/targetdir' 
}

sync{ 
default.rsync, 
source='/sourcedir', 
target='targethost2:/targetdir' 
}

sync{ 
default.rsync, 
source='/sourcedir', 
target='targethost3:/targetdir' 
}

设置 Lsyncd 开机启动。代码如下:

/etc/init.d/lsyncd start
chkconfig lsyncd on

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5562字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7986262
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

300元就能买到的”小钢炮”?惠普7L四盘位小主机解析

  300 元就能买到的 ” 小钢炮 ”?惠普 7L 四盘位小主机解析 最近...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...