使用inotify-tools与rsync构建实时备份系统

使用inotifywait监控文件变动

inotifywait是 inotify-tools 包中提供的一个工具,它使用 inotify API 来监控文件/目录中的变动情况。

在archlinux上,我们可以使用下面命令来安装

sudo pacman -S --noconfirm inotify-tools

平时 inotifywait 会挂起在那里,直到文件/目录发生了要引起关注的事件后,它会退出并输出事件发生的场所、事件的名称以及引起事件的文件(当事件发生在目录上时才会输出).

inotifywait 最常用的选项有两个,一个是 -r 一个是 -e ,其中:

-r
表示递归监控子目录中文件发生的事件
-e
指定要监控的事件列表。对于备份系统来说,只需要监控 modify、create和delete三种事件就行了。

比如,我们运行

inotifywait -r -e modify,create,delete /tmp

表示监控 /tmp 目录及其子目录中文件修改、文件创建和文件删除三种事件。

这时程序一直在挂起状态

[[email protected] ~]$ inotifywait -r -e modify,create,delete /tmp
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.

这时在 /tmp 目录下新建一个文件

touch /tmp/newFile

则 inotifywait 进程退出,并输出如下信息

/tmp/ CREATE newFile

使用rsync同步变动

rsync是一款快速增量备份工具。它的具有以下几个特点使得它很适合用作做备份的工具:

  • 增量备份,只会传输修改过的内容
  • 可以在传输过程中实时解压缩,减少带宽消耗
  • 可以保持原来文件的权限、事件、软硬链接
  • 即支持本机复制,也支持远程复制

rsync常用法为:

rsync -avz --delete  src/ foo:/data

其中

-a
表示archive mode,即备份目录下的所有内容(包括子目录中的内容),并且保持软链接、文件属性、文件修改事件、文件的所有者和宿主信息不变,并且同步字符/块设备以及命名socket和fifo等特殊文件。
-v
表示输出备份的详细信息
-z
表示传输时进行压缩
–delete
删除备份目的地里src中没有的文件
src/
表示要备份的是src目录下的所有内容,注意这里最后的 / 不能去掉,否则会把src目录本身备份过去
foo:/data
表示备份的目的地是foo主机下的 /data/ 目录

整合起来

接下来我们只需要用个 while 死循环把两个工具整合起来就行了,非常简单

#!/bin/bash

if [[ $# -ne 2 ]];then
    cat<<EOF
Usage $(basename $0) source_dir [host:]dest_dir
EOF
    exit 0
fi

source_dir=$1
dest_dir=$2
while :
do
    inotifywait -r -e modify,create,delete ${source_dir} && rsync -avz ${source_dir}/ ${dest_dir} --delete
done

这里有必要说明的是,虽然用 inotifywait 能探测出文件具体做了什么改动,但实际上我们根本不需要知道具体的改变是什么。

我们只需要知道有所改变了,然后具体改变了什么由 rsync 来自己处理就行了。

原文地址:https://lujun9972.github.io/blog..

原文地址:https://www.cnblogs.com/lalalagq/p/9748098.html

时间: 2024-11-01 19:55:08

使用inotify-tools与rsync构建实时备份系统的相关文章

使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)

原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&utm_source=tuicool 引言 在很多领域,如股市走向分析, 气象数据测控,网站用户行为分析等,由于数据产生快,实时性强,数据量大,所以很难统一采集并入库存储后再做处理,这便导致传统的数据处理架构不能满足需要.流计算的出现,就是为了更好地解决这类数据在处理过程中遇到的问题.与传统架构不同,流计算模型

NoSQL:如何使用NoSQL架构构建实时广告系统

JDNoSQL平台是什么 JDNoSQL平台是一个分布式面向列的KeyValue毫秒级存储服务,存储结构化数据和非机构化数据,支持随机读写与更新,灵活的动态列机制,架构上支持水平扩容,提供高并发.低延迟.高可用.强一致数据库服务,可满足各种业务场景.完善的平台支持,支持业务自助化建表,查看监控,在线DDL等. 1.1 JDNoSQL所处生态的位置 从上图可以看出,JDNoSQL是一种构建在HDFS之上的分布式.面向列的存储系统.在需要实时读写.随机访问超大规模数据集时,可以使用JDNoSQL.目

flume+kafka+hdfs构建实时消息处理系统

flume是一个实时消息收集系统,它定义了多种的source.channel.sink,可以根据实际情况选择. Flume下载及文档: http://flume.apache.org/ Kafka kafka是一种高吞吐量的分布式发布订阅消息系统,她有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能. 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息. 支持通过kafka服务器和消费机集群来分区消息. 支持Ha

实时备份

第1章 实时备份介绍 1.1 定时备份缺点 1. 浪费系统性能(数据没发生变化,但到时间也会备份) 2. 数据安全性不高(定时任务最短备份周期1分钟同步一次,如果1分钟内数据变化后,服务器宕机了, 数据就会丢失) 1.2 实时备份过程 1. 划分存储与备份服务器 2. 在存储服务器上部署监控服务,监控相应文件或目录中数据信息的变化 3. 将监控文件或目录,变化的数据信息进行推送,实现实时备份到rsync服务器中 第2章 实时备份部署原理(Inotify+rsync实现实时备份部署) 2.1 实时

备特佳容灾备份系统

-- 集数据库备份.文件备份.操作系统备份于一体的综合实时备份系统 针对Windows.Linux.Unix平台下的各类数据库.文件.操作系统进行智能备份的CDP灾备系统.具有实时备份.任意回退.业务接管.异地容灾.集中备份.异构备份.集中管理.中转备份.信息报警等功能. 支持全系列32位和64位的Windows操作系统(包括IA安腾系列的CPU):支持HP-UX.Saloris.AIX等Unix操作系统:支持Redhat.Redflag.SUSE.Ubuntu.中标麒麟等Linux系统:支持M

rsync+inotify 实现数据的实时备份

我这个人写一些东西难免要发一番感慨,今天做rsync+inotify实现实时备份,做了好长时间没做出来,这段时间我看了好多博文还有一些视频,但自己做的时候还是没做出来,非常郁闷,就拿起书慢慢的看起来,最终我把思路整理好,又重新试验了一遍终于成功了.是的,你百分之九十的时间在实践,而剩下百分之十的时间才能到达成功,坚持加再看一遍很重要. 我先整理一下大致思路,如有时间,我再整理完整的文档出来. 1.先在两台主机里面安装rsync. 2.在服务节点上配置rsync. 3.在内容发布节点上安装inot

通过rsync+inotify实现文件的实时备份同步

原文参考:http://ixdba.blog.51cto.com/2895551/580280/ http://www.bamaol.com/Psy/Showposts-010000108-5048.html 一,rsync安装 目前rsync的最新版本是3.0.9 wget http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz tar-xvzfrsync-3.0.9.tar.gz;cdrsync-3.0.9; ./configure;make;

rsync+inotify实现数据的实时备份

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

【运维小实验】数据镜像备份实验inotify+rsync实时备份

数据镜像备份实验inotify+rsync实时备份 本文是基于VM搭建的虚拟集群环境,全部虚拟机网卡模式为NAT方式相连,处于同一网段. 搭建环境: 使用redhead 2.6.32-431.el6.x86_64版本的linux,创建两台,配置相关网络信息,确保同一网段下. 安装配置rsync+inotify Rsync一般系统默认安装了,如果没有安装的去相关网站下载安装包解压安装即可 Inotify登陆https://github.com/rvoicilas/inotify-tools/wik