lsyncd实时同步,双机同步,替代rsync+inotify

Lsyncd是一款基于Lua语言的实时文件同步工具,利用Linux内核inotify机制结合rsync,有效解决大规模文件同步问题。它支持多种同步模式,如本地目录cp、rsync,远程rsyncssh,并提供灵活的配置选项。

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

  1. 安装

    # 先安装 epel-release
    yum install -y epel-release
    # 安装 lsyncd
    yum install -y lsyncd
    
    
  2. 配置

    # 配置文件
    vim /etc/lsyncd.conf
    # 按需修改
    ````````````````````````````````````
    # setttings是全局设置
        logfile 定义日志文件
        stausFile 定义状态文件
        nodaemon=true 表示不启用守护模式,默认
        statusInterval 将lsyncd的状态写入上面的statusFile的间隔,默认10秒
        inotifyMode 指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite       or Modify
        maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses = 8,       则最大能看到有8个rysnc进程
        maxDelays 累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
    # sync是局域设置
        default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,       或daemon方式连接远程rsyncd进程;
        default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
        default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证
    `````````````````````````````````````
    
    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,
        excludeFrom = "/etc/rsyncd.d/rsync_exclude.lst",
        rsync = {
               binary = "/usr/bin/rsync",
               archive = true, --归档
                compress = true, --压缩
                verbose = true, 
               owner = true,   --属主
                perms = true,   --权限
                _extra = {"--bwlimit=2000"},
                },
            ssh = {
                port = 3322
                }
    }
    
  3. 配置免密登录

    # 三步走
    # 第一步,在本地电脑生成密钥
    ````````````````````````
    一路使用enter键确认
    ````````````````````````
    ssk-keygen
    # 第二步,将公钥复制到远程服务器中
    ssh-copy-id -i ~/.ssh/id_rsa.pub  user@192.168.x.xxx
    
    ```````````
    注意: ssh-copy-id 将key写到远程机器的 ~/ .ssh/authorized_key.文件中
    ```````````
    # 第三步: 登录到远程机器不用输入密码
    ssh user@192.168.x.xxx
    
  4. 启动lsyncd服务

    # 启动
    systemctl start lsyncd
    # 开机启动
    systemctl enable lsyncd
    
<think>嗯,用户想知道如何使用inotify在Linux上实现文件系统的实时同步。首先,我得回忆一下inotify的工作原理。记得inotify是Linux内核的一个子系统,可以监控文件系统的变化,比如文件的创建、修改、删除等事件。然后结合rsync工具,就可以在文件变动时自动同步,实现实时同步的效果。 根据用户提供的引用资料,他们提到了rsyncinotify的组合。引用[2]和[3]都提到了安装inotify-tools工具,并编写脚本来触发rsync同步。所以步骤应该是先配置好rsync,确保它能正确同步文件,然后安装inotify-tools来监控文件变动,最后通过脚本调用rsync进行实时同步。 首先,用户需要安装rsyncinotify-tools。在Debian系统上可以用apt安装,而RHEL系可能需要用yum或dnf。安装完成后,配置rsync的服务器端和客户端,设置密码文件,确保权限正确,避免安全风险。记得rsync默认使用873端口,要确保防火墙放行。 接下来是inotify的配置。inotify-tools提供了inotifywait命令,可以监控文件系统事件。需要编写一个脚本,用inotifywait监听指定目录的事件,当检测到变化时,触发rsync同步。引用[3]中的脚本示例可能是一个无限循环,持续监控并执行同步命令。需要注意脚本中的事件类型,比如modify,create,delete等,覆盖主要的文件操作。 用户可能需要双向同步,但引用资料中提到的例子是单向的。如果需要双向,可能需要在两个方向都配置监控和同步,但要注意避免循环触发的问题,比如同步回来的文件再次触发同步操作。可能需要设置一些排除规则,或者在同步时忽略特定的标记文件。 另外,性能方面,inotify监控大量文件时可能会占用较多资源,需要根据实际情况调整监控的参数,比如延迟时间,或者使用更高效的工具如lsyncd。引用中提到的rsync的--delete选项可以同步删除操作,但使用时要小心,避免误删重要文件。 最后,测试环节很重要,用户需要手动触发文件变动,查看日志是否正常,同步是否及时。可能还需要设置脚本为系统服务,或者用nohup在后台运行,确保长期稳定。 总结步骤:安装依赖工具,配置rsync服务,编写监控脚本,处理双向同步的潜在问题,测试并优化性能,最后部署到生产环境。需要确保每一步都正确无误,尤其是权限和路径设置,否则可能导致同步失败。</think>### 如何使用INOTIFY实现文件系统的实时同步? #### 一、核心组件与原理 1. **INOTIFY**:Linux内核子系统,监控文件系统事件(如创建、修改、删除)[^1]。 2. **RSYNC**:高效文件同步工具,支持增量传输和远程同步[^2]。 3. **结合方式**:通过`inotify-tools`监听文件变动,触发`rsync`执行同步操作[^3]。 --- #### 二、实现步骤 ##### 1. 安装依赖工具 ```bash # Debian/Ubuntu apt install rsync inotify-tools # RHEL/CentOS yum install rsync inotify-tools ``` ##### 2. 配置RSYNC ###### 服务器端(假设IP为10.1.118.2): - 创建配置文件`/etc/rsyncd.conf`: ```ini uid = root gid = root use chroot = no max connections = 5 pid file = /var/run/rsyncd.p
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值