定时备份将适合设备的网站程序文件、配置文件、日志文件等,通过定时脚本上传至备份服务器。
实时备份适合将用户上传的普通文件(文档、视频、压缩包等),通过Inotify/Sersync工具实时监控指定备份目录对应文件系统数据的变化,把变化的数据通过rsync命令推送到备份服务器。从而实现实时备份。
inotify机制介绍
inotify是一种异步的系统实践监控机制,通过内核接口可以监控文件系统中的添加、删除、修改、移动等各种事件。利用inotify,第三方软件就可以通过监控指定目录数据的实时变化,提供对事件处理的实时响应。
inotify机制可以实现多线程复制,但是如果并发大于200个文件(100K左右),复制会有延迟。
常用的实时复制软件介绍
软件服务 | 依赖程序 | 部署难点 | 说明 |
---|---|---|---|
inotify-tools | rsync守护进程 | 复制脚本编写 | 监控目录数据变化,实时数据复制 |
sersync | rsync守护进程 | 配置文件编写 | 复制脚本编写 |
inotify-tools是原始的监控软件,sersync是对inotify进行封装,增加了一些功能。
确保rsync环境部署完成
参考rsync部分内容
检查Linux系统支持inotify实时监控
1 | uname -r # 检查操作系统内核版本是否超过2.6.13 |
文件名称 | 作用说明 |
---|---|
max_queued_events | 设置inotify实例事件队列可容纳的事件数量 |
max_user_instances | 设置每个用户最多可以运行的inotify命令的进程数 |
max_user_watches | 设置inotify命令最多可以监视的文件数量(单进程) |
安装inotify工具
1 | yum install inotify-tools -y # 安装 |
常用监控文件的事件
事件名称 | 事件说明 |
---|---|
access | 被读取 |
modify | 被写入 |
attrib | 属性改变 |
close_write | 在写入模式打开后关闭,包含create |
close_nowrite | 在只读模式打开后关闭 |
close | 被关闭,不区分写入和只读模式,包含close_write和close_nowrite |
open | 被打开 |
move_to | 有文件或目录被移入到监控目录 |
move_from | 监控目录中有文件被移出 |
move | 移动,不区分是移入还是移出,包含move_to和move_from |
create | 创建 |
delete | 删除 |
实际在nfs服务器的场景中,只需要监控close_write
和delete
事件即可,包含了增删改。
inotifywait命令的参数
命令参数 | 参数说明 |
---|---|
**-m **(–monitor) | 始终保持监听状态 |
-d (–daemon) | 类似于-m参数,只是保持后台监听事件并记录 |
-r | 递归监控目录数据变化 |
-e | 指定监听的事件,如果省略,则表示监听所有事件 |
-o (–outfile) | 打印事件到文件中,相当于标准正确输出 |
-s (–syslog) | 发送错误信息到syslog中,相当于标准错误输出 |
-q (–quiet) | 只打印事件信息,输出信息少 |
–excludei | 排除文件或目录 |
–timefmt | 指定事件输出的格式 |
–format | 控制输出的内容,输出指定格式的字符串 |
部署inotify-tools其实就是利用inotifywait的方法,编写脚本监控指定目录,根据事件响应rsync同步到备份服务器
编写脚本
vim /server/scripts/monitor1.sh
1 | !/bin/bash |
写入开机自启文件中
vim /etc/rc.local
1 | /bin/sh /server/scripts/monitor1.sh & > /dev/null & |