inotify介绍及rsync + inotify 实时同步备份

1、前言

rsync (remote sync)是一款非常好的数据同步工具,能够通过对比同步双方的数据变动,实现增量同步,还可以通过LAN/WAN实现远程多台主机间文件的同步,还能结合crond任务计划来执行自动备份,又可以结合ssh实现远程数据备份的安全,种种特性使他看起来相当优秀。但如果需备份数据十分庞大时,它的不足之处就显现出来了,比如每次执行同步操作时,rsync都会扫描全部数据进而计算出增量部分,而后再同步增量数据,这将会十分耗时,使其变得低效;并且受限于crond计划任务最小时间间隔为一分钟,会导致同步源端和目的段数据不一致,这在高可用环境中是不被允许的。这个时候我们就可以构建rsync+Inotify架构来解决此应用瓶颈。

备注:关于rsync的使用请查阅http://windchasereric.blog.51cto.com/5419433/1711313

2、inotify介绍

Inotify 是一个Linux特性,是一种强大的、细粒度的、异步的文件系统监控机制,linux内核从2.6.13起便加入了Inotify支持,通过Inotify可以监控文件系统中添加、修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而Inotify-tools就是这样的一个第三方软件。Inotify反应灵敏,用法简单,并且比使用Crontab轮询高效很多。

2.1、inotify常见监控事件

  • IN_ACCESS :文件被访问
  • IN_MODIFY : 文件被修改
  • IN_ATTRIB : 文件属性被修改
  • IN_CLOSE_WRITE : 以可写方式打开的文件被关闭
  • IN_CLOSE_NOWRITE : 以不可写方式打开的文件被关闭
  • IN_OPEN : 文件被打开
  • IN_MOVED_FROM : 文件被移出监控的目录
  • IN_MOVED_TO : 文件被移入监控着的目录
  • IN_CREATE : 在监控的目录中新建文件或子目录
  • IN_DELETE : 文件或目录被删除
  • IN_DELETE_SELF : 自删除,即一个可执行文件在执行时删除自己
  • IN_MOVE_SELF : 自移动,即一个可执行文件在执行时移动自己

2.2、inotify相关的内核参数

[[email protected] ~]# ll /proc/sys/fs/inotify/-rw-r--r-- 1 root root 0 Jun 13 17:49 max_queued_events-rw-r--r-- 1 root root 0 Jun 13 17:49 max_user_instances-rw-r--r-- 1 root root 0 Jun 13 17:49 max_user_watches
  • /proc/sys/fs/inotify/max_queued_events 
    该参数值是调用inotify_init时分配给实例的event队列最大值,超出该值的event被丢弃,并触发IN_Q_OVERFLOW事件。默认值:16384 
    注意,该参数定义的是events队列长度,若文件庞大且变化频繁需调整该值以适应监控。
  • proc/sys/fs/inotify/max_user_instances 
    该参数值定义了用户创建inotify实例的上限。默认值:128
  • /proc/sys/fs/inotify/max_user_watches 
    该参数定义了每个inotify示例可监控的最大目录数,如果监控文件庞大需调大该值。默认值:8192 
    参数调整示例: 
    可使用重定向方式修改 
    echo 10000000 > /proc/sys/fs/inotify/max_user_watches

2.3、inotify-tools介绍

Inotify-tools工具安装后提供了两个命令

  • /usr/bin/inotifywait:监控文件系统变化
  • /usr/bin/inotifywatch:用来统计文件系统访问的次数

2.3.1、Inotifywait用法

inotifywait  [-hcmrq] [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt<fmt> ] <file> [ ... ]   -h,–help     //输出帮助信息    @          //排除不需要监视的文件,可以是相对路径,也可以是绝对路径    –fromfile    //从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头    -m,–monitor   //接收到一个事情而不退出,无限期地执行。默认行为是接收到一个事情后立即退出    -d,–daemon    //跟–monitor一样,除了是在后台运行,需要指定 –outfile把事情输出到一个文件。也意味着使用了–syslog    -o,–outfile    //输出事情到一个文件而不是标准输出。    -s,–syslog    //输出错误信息到系统日志    -r,–recursive  //监视一个目录下的所有子目录。    -q,–quiet     //指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。    –exclude      //正则匹配需要排除的文件,大小写敏感。    –excludei     //正则匹配需要排除的文件,忽略大小写。    -t,–timeout#  //设置超时时间,如果为0,则无限期地执行下去。    -e,–event    //指定监视的事件。    -c,–csv      //输出csv格式。    –timefmt     //指定时间格式,用于–format选项中的%T格式。    –format      //指定输出格式。    %w 表示发生事件的目录    %f 表示发生事件的文件    %e 表示发生的事件    %Xe 事件以“X”分隔    %T 使用由–timefmt定义的时间格式

2.3.2、inotifywatch用法

inotifywatch [-hvzrqf] [-e <event> ] [-t <seconds> ] [-a <event> ] [-d <event> ] <file> [ … ]          -h,–help    # 输出帮助信息    -v,–verbose  # 输出详细信息    @          # 排除不需要监视的文件,可以是相对路径,也可以是绝对路径。    –fromfile    # 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。    -z,–zero    # 输出表格的行和列,即使元素为空    –exclude     # 正则匹配需要排除的文件,大小写敏感。    –excludei    # 正则匹配需要排除的文件,忽略大小写。    -r,–recursive # 监视一个目录下的所有子目录。    -t,–timeout  # 设置超时时间    -e,–event    # 只监听指定的事件。    -a,–ascending # 以指定事件升序排列。    -d,–descending# 以指定事件降序排列

3、rsync + in otify 实时同步备份实验

3.1、实验拓扑

3.2、服务器端

1、安装超级守护进程

[[email protected] data]# yum -y install xinetd

注意:要想启动rsync服务,必须先安装此进程。rsync服务是依赖xinetd来启动

2、设置开机自动启动

[[email protected] data]# chkconfig xinetd on

3、安装rsync

[[email protected] data]# yum -y install rsync

4、查看超级守护进程下自动生成的rsync服务,并设置激活

[[email protected] data]# vim /etc/xinetd.d/rsyncservice rsync{        disable = no       # 改为no ,表示启用rsync,默认是关闭的        flags           = IPv6        socket_type     = stream        wait            = no        user            = root        server          = /usr/bin/rsync        server_args     = --daemon        log_on_failure  += USERID

5、创建共享的目录文件

[[email protected] /]# mkdir /data/

6、编辑配置文件/etc/rsyncd.conf

[[email protected] data]# vim /etc/rsyncd.conf# Global Settinguid = nobody                    #运行rsync服务器的角色名称gid = nobody                    #运行rsync服务器的组名称use chroot = no             # 是否允许使用chrootmax connections = 10            #最大的连接数strict modes = yes              # 是否启用严格检查权限,用户是否允许上传下载pid file = /var/run/rsync.pid       # pid文件路径log file = /var/log/rsyncd.log      #日志文件记录路径# Directory to be synced [tools]                     #共享存储的模块名称path = /data                    #共享文件存储路径ignore error = yes              #传输过程出现错误处理方式,yes表示忽略read only = no                  #是否只读write only = no             #是否只写,表示不允许别人看hosts allow = 192.168.80.0/24   #允许哪些主机来实现数据同步(类似白名单)hosts deny = *                  # 如果匹配到上面的就表示通过,否则就拒绝list = false                    #是否允许你列出所有 {true | false}uid = root                      #以什么身份运行,如果这里不填,将会继承上面gid = rootauth users = wqp                #认证用户secrets file = /etc/rsyncd.passwd   #认证用户密码的文件# rsyncd.passwd格式为 USERNAME:PASSWORD

注意:(此文件需要手动创建,系统不会自动生成,请注意,文件名必须是rsyncd.conf,否则rsync会无法正常读取配置文件)

7、编辑密码文件

[[email protected] /]# vim /etc/rsyncd.passwdwqp:redhat

8、启动服务

[[email protected] /]# service xinetd start

9、查看所监听的端口

[[email protected] /]# netstat -tanlp | grep xinetdtcp        0      0 :::873         :::*               LISTEN      1362/xinetd

10、使用客户端测试连接rsync服务器

[[email protected] ~]# rsync /etc/fstab [email protected]::tools

3.3、客户端配置

1、安装inotify-tools

[[email protected] ~]# yum -y install inotify-tools

备注:如果使用yum安装,需要配置好epel源

2、编辑密码文件,目的是为后面脚本自动化执行

[[email protected] ~]# vim /etc/rsyncd.passwdredhat

3、设置密码文件权限

[[email protected] ~]# chmod 600 /etc/rsyncd.passwd# 设置密码文件夹权限为600,目的是为了更安全,而且如果不设置,有可能导致脚本读取密码文件出错

4、创建监控脚本

[[email protected] ~]# vim rsyncInotify.sh#!/bin/bash                                        #host=‘192.168.80.106‘user=‘wqp‘src=‘/tmp/dir‘dest=‘tools‘passwdFile=‘/etc/rsyncd.passwd‘inotifywait -mrq -e modify,attrib,moved_to,moved_from,move,move_self,create,delete,delete_self --timefmt=‘%d/%m/%y %H:%M‘ --format=‘%T %w%f %e‘ $src  | while read chgeFiledorsync -avqz --delete --progress --password-file=$passwdFile $src [email protected]$host::$dest &>>/var/log/rsync.logdone

5、设置开机自动启动

[[email protected] ~]# echo ‘bash /root/rsyncInotify.sh &‘ >> /etc/rc.local

3.4、 验证试验结果

1、手动启动脚本

[[email protected] ~]# bash /root/rsyncInotify.sh &

2、在客户端上被监控的目录下创建文件

[[email protected] dir]# touch file{1..10}

3、查看服务器端rsyncd.log日志文件

[[email protected] data]# tail /var/log/rsyncd.log

4、查看已同步的文件

时间: 2024-12-13 09:35:20

inotify介绍及rsync + inotify 实时同步备份的相关文章

Rsync + sersync 实时同步备份

Rsync + sersync 实时同步备份 一      Rsync + Sersync  实时同步介绍 1.Rsync 服务搭建介绍 云机上搭建Rsync server,在本地搭建Rsync Clinet. 2. Sersync 服务搭建介绍 在本地服务器上搭建 Sersync  Server  检测本地的ftp目录变化,实时同步到云机上 二.Rsync编译安装 1.检查本机是否存在 [[email protected]云机 ~]# rpm -qa  rsync rsync-3.0.6-12

sersync+rsync实现实时同步备份

第一个里程:下载安装sersync软件 先进行软件下载,把软件包上传到系统中 unzip sersync_installdir_64bit.zip cd sersync_installdir_64bit mv sersync /usr/local/ tree 第二个里程:编写sersync配置文件 [[email protected] sersync]# cd /usr/local/sersync/conf/ [[email protected] conf]# ll 总用量 4 -rw-r--r

rsync+inotify实现Git数据实时同步备份

定时备份和实时备份 说到备份,无疑于定时备份和实时同步备份.定时备份可以通过脚本或者Crontab来实现,而实时同步备份可以通过某些接口监控文件的各种变化情况来实现的(比如内核接口inotify):通过对比可以发现对数据信息要求高的环境使用实时同步备份可以更好更有利的保护数据的安全性. 软件介绍之rsync rsync说明 rsync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘中去.所以有时候要同步到磁盘中去的,而rsync说白了和复制差不多.能将一

rsync的简单介绍及rsync+inotify实现实时同步更新

Rsync的简单介绍及rsync+inotify实现实时同步更新 rsync是类unix系统下的数据镜像备份工具--remotesync.一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSH.rsync主机同步.Rsync是超级进程来管理的,服务端口为873. 特点: 1.可以镜像保存整个目录树或文件系统: 2.有较高的数据传输效率: 3.可借助于SSH实现安全数据传输: 4. 支持匿名传输 工作模式: 1.shell模式,也称作本地模式 2.远程shell模式,

rsync+inotify实现数据实时同步备份

在实际生产环境当中,我们总会遇见需要把一些重要数据进行备份,且随着应用系统规模的增大,对数据的安全性.可靠性.时效性要求还是比较高的, 因此我自己有在用rsync+inotify来实现数据实时同步备份,下面记录下操作步骤,以防日后自己忘记. 实验背景: 操作系统          IP         机器名        角色 CentOS 7.2       172.16.22.1     nginx01        数据源(服务器端) CentOS 7.2       172.16.22

linux下rsync+inotify实现服务器之间文件实时同步

先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所

rsync + inotify 用来实现数据实时同步

一.简介 1.rsync 比其cp.tar备份的方法,rsync的优点是,安全性高.备份迅速.支持增量备份.只能做对实时性要求不高的数据备份,例如:备份文件服务到远端从服务器.在本地磁盘上做数据镜像等 增量备份:就是rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.但是对于大量文件达到千万量级别时,扫描所有文件是非常耗时的. 如果发生改变的只是其中的一小部分的话,这是非常低效的方式. rsync 不能实时的去监测,同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,两

20190308 samba服务、inotify和rsync实现实时同步、防火墙

Samba服务[root@centos7 ~]#yum install samba[root@centos7 ~]#systemctl start smb[root@centos7 ~]#ss -ntluNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 50 :139 : tcp LISTEN 0 50 :445 端口已开启 : 可以做共享了. 主配置文件:/etc/samba/smb.conf

inotify和rsync实现实时同步

inotify和rsync实现实时同步首先先用两台主机实现rsyncc同步服务端:[[email protected] data 14:20:35]#echo "rsyncuser:123" > /etc/rsync.pass 生成验证文件[[email protected] data 14:21:13]#chmod 600 /etc/rsync.pass [[email protected] data 14:21:19]#mkdir /backup 准备目录[[email pr