企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案
需要周期性备份的数据可以分两类:
因为定时任务有缺陷,一分钟以内的数据无法进行同步,容易造成数据丢失
实施复制是最适合企业备份重要数据的方式,用于用户提交的数据备份,对于用户提交的普通文件(jpg、tar、zip、MP4、txt、html)等待,都可以用实时备份方案。
对于数据文件,还有更复杂的分布式存储方案,把数据同时备份成多份,如FastDFS、GlusterFS等
对于提交到数据库中的数据,还可以用数据库的主从复制(如MySQL),这是软件自带的实时备份。
Inotify是一个强大的,细粒度的,异步的文件系统事件监控机制。
事件是指如文件的增删改查都是事件。
Linux2.6.13开始就引入了inotify这个功能,用于监控文件系统的增删改查等事件。
第三方软件能实现监控文件内容变化,其实是因为linux提供了这个inotify机制功能。
软件依赖程序部署难点说明
Inotify-tools
Rsync守护进程
写复制脚本
监控目录数据变化
Inotify是一种异步的系统事件监控机制,通过Inotify可以监控文件系统中添加、删除、修改等事件,利用这个内核接口,第三方软件可以监控文件系统下的情况变化。
那么Inofity-tools就是该类软件的实现,是一个监控指定目录数据实时变化的软件。
1.实时复制软件会监控磁盘文件系统的变化,比如指定的/data目录,实时复制软件进程会实时监控这个/data目录中对应文件系统数据的变化。
2.一旦/data目录文件发生变化,就会执行rsync命令,将变化的数据推送到备份服务器对应的备份目录中
Inotify-tools本身的核心功能都是,具体的复制到远端服务器的功能还是借助Rsync工具配合,
Inotify机制软件工作流程如下
部署拓扑图
以rsync守护进程模式部署,且以远程数据同步方式,由client向server推送数据。
我们这里设计的形式是,数据推送
理解rsync部署流程
具体部署流程就跳过了,看于超老师讲解rsync的博客篇即可。
1.确认rsync命令存在
2.创建rsync连接所需的密码文件,授权
具体部署流程就跳过了,看于超老师讲解rsync的博客篇即可。
在上述,确保了,两台机器可以正确进行rsync数据同步后。
我们可以开始部署inotify了
只有Linux内核版本在2.6.13起才支持,以及是否存在三个系统文件,存在则支持
(需要配置epel源)
上述操作我们安装好了Inotify-tools软件,生成2个重要的命令
【inotifywait命令解释】
利用Inotify软件监控的事件主要是如下,也是我们使用命令,需要指定的那些事件,指的就是你想监控文件内容变化了,还是被删了,还是正在被编辑,被修改,等情况。
关于监控事件的细节解释
使用参数解释
当我们的代码目录,有了更新,希望立即实现数据同步,即可检测create事件。
执行命令,以及对日志进行格式化,默认检测所有事件
可以知道,inotiify的作用是,基于不同的事件,检测文件夹中,文件的变化。
当检测到有事件发生后,证明文件变化,我们可以执行数据同步rsync操作了。
可知,这个工具的用法就是
1.inotify检测文件变化
2.执行rsync同步
那么想自动化实现的话,手工是不行了,就的结合脚本实现。
1.脚本如下,这里需要跟着超哥学完shell编程之后,方可理解。 先看下shell脚本,如何检测到文件内容的变化
这个脚本作用是让shell的while循环,不断的读取,文件内容
因此也可以用来读取inotifywait检测的日志信息,一旦有新日志出现,我们就执行rsync同步,实现(文件内容检测+rsync同步)
改造脚本,脚本需求是
1.开发机器上的代码目录,一旦有代码更新,执行rsync,将代码文件发给备份服务器
1.写入数据;2.查看rsync是否有数据同步 ;3.删除事件也支持
https://code.google.com/archive/p/sersync/ 关于软件的下载地址,以及项目介绍,作者介绍。
提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输。
针对数据实时同步需求大多数人会选择rsync+inotify-tools的解决方案。
sersync是国人基于前两者开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
Sersync项目利用Inotify和Rsync工具技术实现对服务器数据实时复制。
当事件发生变化后,利用rsync命令把变化的数据复制到远端服务器上。
Sersync特点
其中confxml.xml是配置文件,文件内容很容易理解。以下是示例文件内容说明。
只监控一个目录
监控2个目录