Rsync+Inotify实时同步文件

摘要

在企业日常web应用中,某些特殊的数据需要要求保持跟服务器端实时同步,那我们该如何来配置呢?如何来实现呢?这里可以采用rsync+inotify来实现需求。

Inotify简介

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

Inotify,它是在内核 2.6.13 版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

在inotify 的前身是 dnotify。由于 dnotify 的局限性太大,加之用户始终都希望用到更好的产品。因此,inotify 顺理成章的取代了 dnotify。

Rsync安装完毕后,需要安装inotify文件检查软件。同时为了同步的时候不需要输入密码,这样可以使用ssh免密钥方式进行同步。

Rsync认证方式

两种方式

rsync-daemon

ssh

注意:在使用rsync时,同步端和被同步端都必须安装rsync程序。

1、rsync-daemon认证

在rsync-daemon认证方式下,默认监听tcp的873端口

在rsync-daemon认证下,rsync可以把密码写入到一个文件中。

注意:被同步端的rsync必须启动,配置文件。同步端可以不起动服务,但必须有这个应用。

2、ssh认证

通过ssh隧道进行传输,类似于scp工具,同步操作不在局限于rsync中定义的同步文件夹,并且双方只要安装rsync,也不要双方启动rsync。

Rsync安装配置参考我另一篇文章:https://www.yangxingzhen.com/archives/863

这里采用Rsync基于SSH认证方式+inotify实时同步

服务端IP:192.168.8.7

客户端IP:192.168.8.8

inotify安装配置

1)下载inotify-tools安装包

[root@localhost ~]# wget -c http://mirrors.yangxingzhen.com/inotify-tools/inotify-tools-3.14.tar.gz

Rsync+Inotify实时同步文件

2)解压,安装

[root@localhost ~]# tar zxf inotify-tools-3.14.tar.gz

[root@localhost ~]# cd inotify-tools-3.14

[root@localhost inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify

[root@localhost inotify-tools-3.14]# make && make install

Rsync+Inotify实时同步文件

Rsync+Inotify实时同步文件

3)配置免密钥认证,这里不再介绍,SSH免密钥认证可以参考我另一篇文章:SSH免密钥认证

4)编写脚本

[root@localhost ~]# vim rsync_inotify.sh

#脚本内容如下

#!/bin/sh
#2017-12-17 22:05:29
#by author 、、、小柒

#本地需要同步的目录
SRC=/test/
##远程目录
DATA=/test/
##远程同步IP
IP=192.168.8.8
inotifywait -mrq --timefmt '%Y-%m-%d-%H:%M' --format '%T %w %f' -e modify,delete,create,attrib,move $SRC | while read file
do
rsync -aP --delete $SRC root@$IP:$DATA
done

保存退出~~

5)在服务端启动该脚本,创建测试文件

[root@localhost ~]# ln -s /usr/local/inotify/bin/* /usr/sbin            //创建软连接

[root@localhost ~]# mkdir /test

[root@localhost ~]# sh -x rsync_inotify.sh

[root@localhost ~]# cd /test/

[root@localhost test]# touch test.txt

Rsync+Inotify实时同步文件

6)在客户端查看是否同步,如有数据代表同步

Rsync+Inotify实时同步文件

至此,实时同步文件成功

PS:创建文件、删除文件、移动文件(重命名)、访问文件、修改文件都会被记录

7)后台运行此脚本

[root@localhost ~]# nohup sh rsync_inotify.sh &

注:日志会记录到nohup.out文件

其他Linux发行版安装方法可以参见:https://github.com/rvoicilas/inotify-tools/wiki#wiki-getting

inotifywait命令

Inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。。

inotify-tools是一个C库和一组命令行的工作提供Linux下inotify的简单接口。inotify-tools安装后会得到inotifywait和inotifywatch这两条命令:

1)inotifywait命令可以用来收集有关文件访问信息,Linux发行版一般没有包括这个命令,需要安装inotify-tools,这个命令还需要将inotify支持编译入Linux内核,好在大多数Linux发行版都在内核中启用了inotify。 2)inotifywatch命令用于收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。

开始之前需要检测系统内核是否支持inotify:

使用uname -r命令检查Linux内核,如果低于2.6.13,就需要重新编译内核加入inotify的支持。
inotify相关参数

inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小:

1) /proc/sys/fs/inotify/max_queued_evnets表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。

2)/proc/sys/fs/inotify/max_user_instances表示每一个real user id可创建的inotify instatnces的数量上限。

3)/proc/sys/fs/inotify/max_user_watches表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。

inotifywait命令参数

-m是要持续监视变化。

-r使用递归形式监视目录。

-q减少冗余信息,只打印出需要的信息。

-e指定要监视的事件列表。

–timefmt是指定时间的输出格式。

–format指定文件变化的详细信息。

可监听的事件

事件

描述

access 访问,读取文件。
modify 修改,文件内容被修改。
attirb 属性,文件元数据被修改。
move 移动,对文件进行移动操作。
create 创建,生成新文件
open 打开,对文件进行打开操作。
close 关闭,对文件进行关闭操作。
delete 删除,文件被删除。

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/669.html

(0)
admin的头像admin
上一篇 2017年12月17日 下午9:21
下一篇 2017年12月19日 下午5:53

相关推荐

  • Linux系统目录大小通过du命令获取实例

    使用过 Linux 系统的小伙伴都知道应该都知道, Linux 系统下的 ls 命令通常被我们用来查看文件目录的内容,但是不知道大家有没有细心留意,ls 命令所显示出来的每一个目录…

    2024年6月29日
    000
  • Linux下动态库.so和静态库.a的生成和使用指南

    1. Linux下静态库和动态库的基本概念 库(Library)是一组预先编写好的程序代码,它们被打包在一起以供其他程序使用,从而避免了重复编写相同的代码。库可以分为静态库和动态库…

    2025年8月21日
    000
  • Linux服务器快速定时CPU占用高线程的方法

    场景描述 最近遇到一个生产环境,一个程序因为代码写的有问题,导致CPU占用很高,所以需要马上排查问题,首先要先找出哪个程序,具体代码在哪里,所以需要借助jstack、jmap这些命…

    2025年8月18日
    000
  • 在Linux操作系统下正确安装OpenCV的保姆级教程

    前言 我是在虚拟机上跑的 Linux 5.8.0-44-generic。 配置如下: 第一步:下载依赖文件 这一步非常重要,如果是缺少某个依赖文件,编译 过程也不会出错,但是在使用…

    2025年8月22日
    000
  • linux 服务器安全设置教程

      一、系统安全记录文件   操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果您的系统是直接连到Internet,您发现有很多人对您的系统做Telnet/FTP登录尝试,…

    2024年6月29日
    000
  • 检查Linux中的磁盘使用的四种方法

    有时你需要下载一些重要文件或将一些照片传输到你的Linux系统,但面临磁盘空间不足的问题。你前往你的文件管理器删除你不再需要的大文件,但你不知道其中哪些占用了你大部分的磁盘空间。在…

    2025年9月27日
    000
  • Ubuntu 22.04安装PHP

    一、PHP简介 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。它最初由Rasmus Lerdorf于1994年创…

    2024年11月21日
    000
  • Linux文件权限解析

    Linux权限的用途  权限是OS用来限制对资源访问的机制,权限一般分为读、写、执行。系统中每个文件都拥有特定的权限、所属用户及所属组,通过这样的机制来限制哪些用户或用户组可以对特…

    2017年12月14日
    000
  • Linux查看进程内存占用的6种方法汇总

    CPU和内存是机器性能好坏的关键部件,内存大了就能运行更多的程序,但是程序运行多了就会出现资源消耗竞争的关系,有时候系统出现负载过高的情况下,我们如何去判断是那个程序导致的呢?这就…

    2025年7月28日
    000
  • Linux环境变量与程序地址空间详解

    一、环境变量:系统的“运行说明书” 你可以把环境变量理解成Linux系统的“小记事本”——里面记满了程序运行…

    2025年9月18日
    000

发表回复

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