博客 / Others/ 搭建linux服务器间实时同步,采用Lsyncd -- Live Syncing (Mirror) Daemon方案

搭建linux服务器间实时同步,采用Lsyncd -- Live Syncing (Mirror) Daemon方案

搭建linux服务器间实时同步,采用Lsyncd -- Live Syncing (Mirror) Daemon方案

Lsyncd 简介

Lsyncd (Live Syncing Daemon) 是一个轻量级的实时目录同步守护进程。它通过监控本地目录树(使用 inotify 或 fsevents),聚合一段时间内的事件变化,然后调用一个或多个进程(默认为 rsync)来同步这些变更。Lsyncd 易于安装,无需新的文件系统或块设备,也不会影响本地文件系统的性能。

核心特性与适用场景

Lsyncd 的核心是将 inotify 机制与 rsync 工具相结合,通过 Lua 脚本进行封装和配置。其主要优势在于:

  • 解决海量文件同步问题:通过延迟或累计事件次数触发同步,避免了 inotify + rsync 方案中频繁发送文件列表导致的性能问题。
  • 配置简单灵活:使用 Lua 语言作为配置文件,可读性强,支持多种同步模式(如本地目录复制、本地 rsync、远程 rsync/rsyncssh)。
  • 设计目标:适用于将本地目录树同步到远程镜像,尤其适合从安全区域向非安全区域同步数据。

相较于其他工具:

  • DRBD:工作在块设备层,适合高负载系统(如数据库)的同步,但配置更复杂。
  • inotify+rsync / sersync:在处理大量或大文件时效率较低,且 sersync 已停止开发。

准备工作:SSH 密钥认证

为实现免密同步,需在主从服务器间配置 SSH 密钥认证。

  1. 生成密钥对(在发送端执行):
    ssh-keygen -t rsa -f /root/.ssh/Lsyncd_rsa
  2. 分发公钥(在发送端执行,将 PUBLIC_IPPORT 替换为接收端信息):
    ssh-copy-id -p PORT -i /root/.ssh/Lsyncd_rsa.pub root@PUBLIC_IP

    若接收端已使用密钥登录,可能需要手动将公钥文件 Lsyncd_rsa.pub 内容追加到接收端的 /root/.ssh/authorized_keys 文件中。

  3. 双向同步:如需双向同步,请在接收端重复以上步骤。

安装 Lsyncd 与依赖

以下以 CentOS/RHEL 系统为例,使用 yum 包管理器安装。

  1. 安装 rsync
    yum install rsync -y
  2. 安装 EPEL 扩展源(如果系统未安装):
    yum install epel-release -y
    yum clean all && yum makecache
  3. 安装 Lsyncd 及其依赖
    yum install lua lua-devel lsyncd -y

配置 Lsyncd

Lsyncd 的主配置文件为 /etc/lsyncd.conf。以下是一个基础配置示例,用于将本地 /download 目录同步到远程服务器的相同路径。

settings {
    logfile      = "/var/log/lsyncd.log",
    statusFile   = "/tmp/lsyncd.stat",
    inotifyMode  = "CloseWrite or Modify",
    maxProcesses = 5,
    maxDelays    = 1
}

sync {
    default.rsync,
    source    = "/download",
    target    = "root@REMOTE_IP:/download",
    rsync     = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = true,
        verbose   = true
    }
}

关键配置参数说明

  • settings {}:全局设置。
    • logfile, statusFile:日志和状态文件路径。
    • inotifyMode:监控的事件类型。
    • maxProcesses:最大同步进程数。
    • maxDelays:累计事件数量阈值,达到即触发同步。
  • sync {}:同步任务定义,可配置多个。
    • default.rsync:同步模式,还可选 default.direct(本地 cp/rm)或 default.rsyncssh
    • source:本地源目录。
    • target:目标地址,格式因模式而异(本地路径、user@host:pathhost::module)。
    • delay:事件等待时间(秒),用于合并短时间内的多次变更。
    • delete:是否同步删除操作,可选 true, false, "startup", "running"
    • rsync {}:rsync 专用参数,如 bwlimit(限速)、_extra(附加参数)。

启动与管理服务

  1. 启动 Lsyncd 服务
    systemctl start lsyncd
  2. 设置开机自启
    systemctl enable lsyncd
  3. 查看同步日志
    tail -f /var/log/lsyncd.log

接收端配置(Rsync Daemon 模式)

若使用 rsync daemon 模式(配置中的 target = "host::module"),需在接收端配置 rsyncd。

  1. 安装 rsync
    yum install rsync -y
  2. 编辑配置文件 /etc/rsyncd.conf
    [module_name]
        path = /path/to/target/dir
        comment = Lsyncd Sync Module
        read only = no
        auth users = syncuser
        secrets file = /etc/rsyncd.secrets
  3. 创建密码文件并设置权限
    echo "syncuser:password" > /etc/rsyncd.secrets
    chmod 600 /etc/rsyncd.secrets
  4. 启动 rsync daemon 并开放端口
    systemctl start rsyncd
    systemctl enable rsyncd
    firewall-cmd --permanent --add-port=873/tcp
    firewall-cmd --reload

进阶配置示例

配置文件支持定义多个 sync 块,实现向不同目标同步。模式选择:

  1. 本地目录同步(direct 模式):使用 cp/rm/mv 命令,适合文件数量多但变动少的场景。
  2. 本地目录同步(rsync 模式):使用 rsync 在本地或挂载的目录间同步。
  3. 远程目录同步(rsync + daemon):目标格式为 user@host::module,需配置 rsyncd。
  4. 远程目录同步(rsync + ssh):目标格式为 user@host:path,利用 SSH 通道。
  5. 远程目录同步(rsyncssh 模式):与上一种效果类似,配置写法不同。

具体配置示例请参考 Lsyncd 官方手册或社区文档。

注意事项与排错

  • 确保同步目录的写权限,特别是非 root 用户运行时。
  • 使用 ssh -v 测试密钥认证是否成功。
  • 监控系统日志(/var/log/messagesjournalctl -u lsyncd)以排查问题。
  • Lsyncd 2.2.1 及以上版本要求所有机器的 rsync 版本 ≥ 3.1。

项目地址https://github.com/axkibe/lsyncd

发表评论

您的邮箱不会公开。必填项已用 * 标注。