前言

  • 系统:centos 7

  • inotify-tools版本:3.14(3.22版本测试有问题,所以找的比较旧的一版)

  • 主机IP:

    • 192.168.137.7(服务端,接收同步文件)
    • 192.168.137.8(客户端,发送同步文件)
  • github下载inotify-tools的源码压缩包

  • 需求:客户端的/home/testpath目录和服务端的/home/testpath同步。客户端目录有变动时,同步复制到服务端

  • 流程逻辑:inotify-tools基于linux的inotify事件,监听文件是否有发生增删改查,如果有,就通过rsync将文件发到另一台服务器。

编译安装inotify

  1. 安装依赖
yum install -y autoconf automake libtool make gcc gcc-c++ make
  1. 客户端解压,编译,安装
tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./autogen.sh
./configure --prefix=/home/apps/inotify-tools
make
make install
# inotifywait: 仅执行阻塞,等待inotify事件
# inotifywatch: 收集关于被监视文件系统的统计数据
  1. 两台主机都安装rsync
yum install -y rsync
  1. 服务端编辑rsync配置文件 /etc/rsyncd.conf
uid = root
gid = root
usechroot = no
max connections = 20
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log [testpath]
path = /home/testpath
ignore errors
read only = false
writeonly = false
list = false
hosts allow = 192.168.137.8
auth users = backuser
secrets file = /etc/rsync.pass
  1. 编辑用户文件 /etc/rsync.pass,编辑完成后修改权限:chmod 600 /etc/rsync.pass
backuser:123
  1. 客户端编辑 /etc/rsync.pass,编辑完成后修改权限:chmod 600 /etc/rsync.pass
123
  1. 客户端测试rsync传输
rsync -a --progress /home/tmp/* backuser@192.168.137.7::testpath --password-file=/etc/rsync.pass
  1. 编辑inotify.sh脚本
#!/bin/bash

# 避免空变量
set -u
# 待同步目录
src=/home/testpath
# 监听修改、删除、添加、改属性事件
/home/apps/inotify-tools/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -emodify,delete,create,attrib $src | while read file
do
rsync -zrtopg --progress $src/* backuser@192.168.137.7::testpath --password-file=/etc/rsync.pass
echo "$(date) rsync event occur" >> /home/scripts/inotify.log 2>&1
done
  1. 赋予可执行权限并运行。
chmod +x inotify.sh
./inotify.sh &
  1. 测试两台服务器之间是否能实时同步

补充

  • inotifywait选项
-h: 帮助信息
-m: 接收到事件时不退出。默认接收到一个事件后即退出
-r: 监视一个目录下的所有子目录
-q: 安静模式
-e: 指定监听的事件
-timefmt: 指定时间格式,用于format的%T
--format: 指定输出格式
%T: 时间格式
%f: 发生事件的文件
%w: 发生事件的目录
%e: 发生的事件
  • inotifywait可监听事件,配合-e选项
access: 文件读取
modify: 文件修改
attrib: 文件属性修改,如时间、权限
delete: 文件或目录删除
create: 文件或目录创建

基于inotify-tools和rsync实现文件实时同步的更多相关文章

  1. rsync+inotify-tools文件实时同步

    rsync+inotify-tools文件实时同步案例 全量备份 Linux下Rsync+sersync实现数据实时同步完成. 增量备份 纯粹的使用rsync做单向同步时,rsync的守护进程是运行在 ...

  2. rsync+inotify 实现服务器之间目录文件实时同步(转)

    软件简介: 1.rsync 与传统的 cp. tar 备份方式相比,rsync 具有安全性高.备份迅速.支持增量备份等优点,通过 rsync 可 以解决对实时性要求不高的数据备份需求,例如定期的备份文 ...

  3. Rsync+sersync文件实时同步

    一.为什么要用Rsync+sersync架构1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改 ...

  4. rsync + inotify 打造多server间文件实时同步

    在上篇文章ssh无password登陆server的基础之上.能够利用rsync + Inotify 在多server间实现文件自己主动同步. 例如以下測试机基于三台server做的.内网IP分别例如 ...

  5. Linux服务器间文件实时同步的实现

    使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...

  6. (转)Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

    Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步原文:http://www.summerspacestation.com/linux%E4%B8%8B%E9%80 ...

  7. inotify用法简介及结合rsync实现主机间的文件实时同步

    一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系 ...

  8. Centos 6.5 rsync+inotify 两台服务器文件实时同步

    rsync和inotify是什么我这里就不在介绍了,有专门的文章介绍这两个工具. 1.两台服务器IP地址分别为: 源服务器:192.168.1.2 目标服务器:192.168.1.3 @todo:从源 ...

  9. Rsync + inotify 实现文件实时同步

    Rsync 用来实现触发式的文件同步. Inotify-tools是一套组件,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等 ...

  10. rsync+inotify百万级文件实时同步

    实验环境:Centos7.4 目的:将源服务器的文件实时同步至目标服务器 源服务器:10.11.1.107 目标服务器:10.11.1.106 分别在两个节点安装rsync yum -y instal ...

随机推荐

  1. 【深入浅出 Yarn 架构与实现】6-3 NodeManager 分布式缓存

    不要跳过这部分知识,对了解 NodeManager 本地目录结构,和熟悉 Container 启动流程有帮助. 一.分布式缓存介绍 主要作用就是将用户应用程序执行时,所需的外部文件资源下载缓存到各个节 ...

  2. pandas 常用操作记录

    apply函数 一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作. 函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数. 作用: 用 ...

  3. 存下吧!Spring高频面试题总结

    Spring是什么? Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring的优点 通过控制反转和依赖注入实现松耦合. 支持面向切面的编程,并且把应用业务逻辑和系统 ...

  4. React项目build

    1.项目根目录下新建app.js文件 // 使用 express 搭建一个服务器 const express = require("express"); const { creat ...

  5. 2022-11-01:给定一个只由小写字母和数字字符组成的字符串str。 要求子串必须只含有一个小写字母,数字字符数量随意。 求这样的子串最大长度是多少?

    2022-11-01:给定一个只由小写字母和数字字符组成的字符串str. 要求子串必须只含有一个小写字母,数字字符数量随意. 求这样的子串最大长度是多少? 答案2022-11-01: 经典的滑动窗口问 ...

  6. 2022-09-13:给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽。 同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei] 表示你可以

    2022-09-13:给你两个整数 m 和 n ,分别表示一块矩形木块的高和宽. 同时给你一个二维整数数组 prices ,其中 prices[i] = [hi, wi, pricei] 表示你可以以 ...

  7. LeetCode 周赛 345(2023/05/14)体验一题多解的算法之美

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 往期回顾:LeetCode 双周赛第 104 场 · 流水的动态规划,铁打的结构化思考 周赛概览 T1. 找 ...

  8. python 之路,致那些年,我们依然没搞明白的编码

    摘自:金角大王https://www.cnblogs.com/alex3714/articles/7550940.html 本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编 ...

  9. C语言访问数据对象在内存中真实位模式的一个方法

    在判定机器采用大端还是小端存储时,可以按字节输出某数据对象的机器表示的位模式.机器表示的位模式即某数据对象在内存中的二进制串.下面是一个访问数据对象位模式的方法: //传入一个数据对象,从低地址到高地 ...

  10. 【编程日记】搭建PyCharm集成开发环境

    0.相关确定 本教程使用的版本号为专业版PyCharm 2022.3.2,如果您是初学者,为了更好的学习本教程,避免不必要的麻烦,请您下载使用与本教程一致的版本号. 1.PyCharm的下载 官网下载 ...