实时备份工具之inotify+rsync

1.inotify简介

inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率、细粒度、异步地监控机制, 用于通知用户空间程序的文件系统变化。可利用它对用户空间进行安全、性能、以及其他方面的监控。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。如果内核版本不低于 2.6.13,系统就支持 inotify。 如果存在
/usr/include/sys/inotify.h 文件, 表明内核支持 inotify。

[[email protected] ~]#  ls -l /proc/sys/fs/inotify/     #列出文件目录,出现下面的内容,说明服务器内核支持inotify
total 0
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_queued_events
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_instances
-rw-r--r-- 1 root root 0 Oct 13 05:39 max_user_watches

2.inotify的作用

inotify 可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外, inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 来监视文件系统的变化。

3.inotify实现数据实时同步原理

无论是手动执行 rsync 还是把 rsync 客户端发出的数据同步请求命令做成周期性任务计划, 每隔一段时间不管有没有数据变化都发出一次数据同步请求命令, 同步一次数据。 服务端和客户端都有时间差。所以, 使用内核提供的 inotify 机制,当数据发生改变时(删除、修改等)就触发 rsync 客户端发出数据 同步请求。 从而实现数据的实时传输。
rsync + inotify 机制实现的两台服务器数据同步如下图如示:

4.inotify的安装与使用

[[email protected] ~]# yum install -y inotify-tools
[[email protected] ~]# inotifywait -mrq --timefmt ‘%d%m%Y %H:%M‘ --format ‘%T %w%f‘ -e create /backup  #创建对目录/backup的监控
17102017 00:02 /backup/1.txt
17102017 00:02 /backup/2.txt
17102017 00:02 /backup/3.txt
17102017 00:02 /backup/4.txt
17102017 00:02 /backup/5.txt

5.inotify之inotifywait命令详解

参数详解:
-r:递归查询目录
-q:打印监控时间信息
-m:始终保持时间监听状态
--excludei: 排除文件或目录时,不区分大小写。
--timefmt: 指定时间输出的格式
--format: 打印使用指定的输出类似格式字符串
a、 %w:显示被监控文件的文件名;
b、 %f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;
c、 %T:使用--timefmt 选项中自定义的时间格式;
d、 %e 表示发生的事件
e、 %Xe 事件以“X”分隔
-e:指定需要监控的事件
access: 文件或目录被读取
modify: 文件或目录内容被修改
attrib: 文件或目录属性被改变
close: 文件或目录封闭,无论读/写模式
open:文件或目录被打开
move_to:文件或目录被移动到另外一个目录
move:文件或目录被移动另一个目录或从另一个目录移动到当前目录
create:文件或目录被创建在当前目录
delete:文件或目录被删除
unmount:文件系统被卸载
常用组合:close_write,modify,delete,create,attrib 

6.编写监控脚本

[[email protected] scripts]# vim inotify.sh
#!/bin/bash
/usr/bin/inotifywait -mrq ‘%w%f‘ -e close_write,modify,delete,create /backup | while read line
do
cd /backup && rsync -azP ./ [email protected]::backup/ --password-file=/etc/rsync.password >/dev/null 2>&1
done
exit 0
[[email protected] scripts]# sh inotify.sh &             #<==运行脚本监控/backup
[[email protected] scripts]# touch /backup/{1..10}.log           #<==NFS上创建文件进行测试
[[email protected] backup]# ll                    #<==备份服务上查看是否备份成功
total 4
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 10.log
drwxr-xr-x 2 rsync rsync 4096 Oct 12 21:43 192.168.0.165
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 1.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 2.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 3.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 4.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 5.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 6.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 7.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 8.log
-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 9.log
[[email protected] scripts]# echo "/bin/bash /server/scripts/inotify.sh &" >> /etc/rc.local  #<==设置开机启动

7.修改inotify默认参数(inotify默认内核参数值太小)

查看系统默认参数值
sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances = 128
修改参数:
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
vim /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
:wq! #保存退出
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
max_user_instances:
每个用户创建inotify实例最大值
【inotify在实际生产环境中,对于50-200KB的文件,inotify的最发并发量为200-300,如果客户端写入速度大于这个量,将会造成短暂的延迟】

8.总结

rysnc+inotify实时备份流程:
a.实现从NFS客户端到rsync服务端的rsync的部署
b.实现从NFS客户端对NFS目录文件系统时间的实时监控
c.当监控到NFS目录文件系统事件变化后,触发rsync推送变化的文件

高并发数据实时同步方案:
(1)inotify(sersync)+rsync,是文件级别
(2)drbd文件系统级别,基于block块文件
(3)第三方软件的同步功能:
mysql同步,oracle,mongodb
(4)程序双写,直接写入两台服务器
(5)业务逻辑解决(读写分离,备读不到,读主)

原文地址:http://blog.51cto.com/jinlong/2091898

时间: 2024-11-04 03:42:06

实时备份工具之inotify+rsync的相关文章

通过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实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等. 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首

通过rsync+inotify实现数据的实时备份 【转载】

   在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足  与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等.  随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中

Linux命令之文件实时备份 -incron,rsync,inotify

一.rsync.incron简介 关于rsync工具的介绍和使用,以及其结合cron工具实现定时备份的功能,可参考博文:http://blog.csdn.net/wangjunjun2008/article/details/38658539; inotify 是一种文件变化通知机制,Linux内核2.6.13(2005/06/18)版本开始引入; inotify仅仅是一个API,需要通过开发应用程序进行调用; inotify-tools则是inotify的一种实现,它是一套组件,包括一个C库和几

inotify+rsync、sersync 实时备份

作者:Georgekai 归档:学习笔记 2018/1/26 inotify+rsync.sersync 实时备份 1.1 定时备份缺点: 1. 浪费系统性能(数据没变化到时间也会备份) 2. 数据安全性不高(定时任务最短1分钟同步一次,如果1分钟内数据变化后,服务器宕机了,就 会丢失数据) 1.2 inotify+rsync 1.2.1 inotify是什么? 1. 是一种强大的,细粒度的,异步的文件系统事件监控系列 2. linux内核从2.6.13起,加入了inotify的支持 3. 作用

inotify+rsync实时备份总结

第1章 inotify简介 1.1 rsync+inotify组合的起源Rsync(remote sync)远程同步工具,通过rsync可以实现对远程服务器数据增量备份同步,但是rsync自身也有瓶颈,同步数据时,rsync采用核心算法对远程服务器的目标文件进行对比,只进行差异同步,如果服务器文件的数量达到百万甚至是千万量级,那么文件对比将是非常耗时的,而且发生变化的往往只是其中很少的一部分,这是非常低效的方式,Inotify的出现,可以缓解rsync的不足之处,取长补短1.2 Inotify介

inotify+rsync+sersync实时数据备份

第1章 rsync备份服务 1.1 rsync软件介绍 rsync软件官方链接地址:http://www.samba.org/ftp/rsync/rsync.html 提示信息: man rsync查看客户端说明信息 man rsyncd.conf查看服务端配置 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具 全量:将全部数据,进行传输覆盖 cp mv scp 增量:只传输差异部分的数据 rsync rstync适用于unix/linux/windo

Rsync远程同步,实现下行 ,上行异地备份。配置rsync+inotify实时备份。

rsync作为一款最常用的备份工具,是linux/unix系统默认安装的基本组件之一. 本次实验环境: 1)VMware Workstation虚拟机环境 2)以CentOS7系统为实验对象,一台PC作为rsync源服务器,设置IP地址为,192.168.30.55 一台PC作为Rsync客户端,设置IP地址为,192.168.30.77.在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源. 首先配置rsync源服务器, r

NFS +inotify+rsync 实现数据的远程挂载与实时增量备份

NFS 网络文件系统 功能: 用户可以像访问自己的本地文件系统一样使用网络中的远端系统上的文件 原理: 用户进程-->RPC服务(portman)-->tcp/ip协议栈-->远端主机RPC服务 后 -->远端NFS服务-->远端主机本地磁盘数据-->NFS服务-->tcp/ip协议栈-->本地数据 优点: 易于实现前段服务器代理分流的时候处理sission以及数据查找时找不到数据等问题,且同时起到了就算任何一个web服务器宕机都不影响数据的访问 缺点: 单