编程 rsync+inotify-tools liunx文件实时同步数据

2024-11-18 18:43:43 +0800 CST views 478

rsync+inotify-tools 实时同步数据

rsync 是 Linux 系统下的一个强大数据镜像备份工具,它可以在本地或远程系统之间同步文件和目录。该工具支持增量备份,速度快,占用资源少,操作简单,广泛应用于数据备份和同步场景中。

rsync 的特点

  • 速度快,占用资源少:支持增量同步,传输速度快。
  • 多种传输方式:可以通过 scpssh 等方式传输文件,也可以通过直接的 socket 连接。
  • 支持特殊文件类型:支持拷贝特殊文件,如链接、设备文件等。
  • 灵活的文件过滤:可以排除指定的文件或目录。
  • 保留文件属性:同步时可以保持原来文件或目录的属性(权限、时间、软硬链接等)。

安装 rsync

可以通过多种方式安装 rsync,如源码安装或使用包管理工具安装。本文选择使用 yum 安装:

dnf install rsync -y

rsync 常用命令

以下是一些常用的 rsync 命令示例:

rsync -avz 本地目录A 本地目录B    # 同步整个目录A到目录B
rsync -avz 本地目录/A/ 本地目录B   # 只同步目录A下的数据到目录B

常用选项说明

  • --delete:删除目标目录下多余的文件。
  • -v:显示详细的操作信息。
  • -z:传输过程中启用压缩。
  • -a:递归同步,保持文件属性。

本地文件同步示例

  1. 新建两个文件夹,在其中一个文件夹内复制多个文件后执行同步。

    mkdir /lr
    mkdir /lr2
    rsync -avz /lr/ /lr1    # 只同步 lr 文件夹内的文件到 lr1 文件夹内
    
  2. 修改 ping.yml 文件的内容,再次执行同步命令。

    rsync -avz /lr/ /lr1
    

    可以看到,只同步了有修改的文件。

远程文件同步

使用 rsync 命令可以轻松实现远程主机之间的文件同步:

rsync -avz /root/ root@192.168.10.210:/host1

由于配置了 SSH 免密认证,上述命令可以不需要输入密码。

实时数据同步

rsync 配合 inotify-tools 实现实时数据同步。inotify-tools 是由 Red Hat 开发的 Linux 文件系统监控工具,能够高效监控文件系统的变化。

配置同步主机之间的免密登录

首先,在主机之间配置 SSH 免密登录:

ssh-keygen
ssh-copy-id root@192.168.10.210

安装 inotify-tools

  1. 解压源码包:

    tar -zxvf inotify-tools-3.13.tar.gz
    
  2. 安装 GCC 依赖:

    dnf install gcc* -y
    
  3. 编译安装:

    ./configure --prefix=/usr/local/inotify && make && make install
    
  4. 创建软链接:

    ln -s /usr/local/inotify/bin/inotifywait /usr/sbin/
    ln -s /usr/local/inotify/bin/inotifywatch /usr/sbin/
    

inotify 常用选项

  • -m:持续监控。
  • -r:递归监控。
  • -q:减少屏幕输出信息。
  • -e:指定监控的事件类型(如 modifymovecreatedeleteattrib 等)。

编写实时监控脚本

编写以下脚本,实现实时同步监控:

#!/bin/bash
while true
do
    inotifywait -rq -e modify,create,delete /lr/
    rsync -avz --delete /lr/ root@192.168.10.210:/host1
done

当被监控的目录内新增、修改或删除文件时,该脚本将触发监控,并实时同步到远程主机目录。

测试同步

向被监控的文件夹内复制新文件,此时将触发监控,自动同步文件到远程主机目录。登录远程主机查看目录文件,验证同步结果。

以上是 rsync 结合 inotify-tools 实现实时同步数据的完整流程及示例脚本,希望对你有所帮助!

复制全文 生成海报 数据同步 备份工具 Linux系统

推荐文章

使用Vue 3实现无刷新数据加载
2024-11-18 17:48:20 +0800 CST
Vue3中的组件通信方式有哪些?
2024-11-17 04:17:57 +0800 CST
最全面的 `history` 命令指南
2024-11-18 21:32:45 +0800 CST
如何在Rust中使用UUID?
2024-11-19 06:10:59 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
PHP 唯一卡号生成
2024-11-18 21:24:12 +0800 CST
关于 `nohup` 和 `&` 的使用说明
2024-11-19 08:49:44 +0800 CST
智慧加水系统
2024-11-19 06:33:36 +0800 CST
api远程把word文件转换为pdf
2024-11-19 03:48:33 +0800 CST
PyMySQL - Python中非常有用的库
2024-11-18 14:43:28 +0800 CST
Rust async/await 异步运行时
2024-11-18 19:04:17 +0800 CST
Golang 几种使用 Channel 的错误姿势
2024-11-19 01:42:18 +0800 CST
Vue3中如何处理跨域请求?
2024-11-19 08:43:14 +0800 CST
程序员茄子在线接单