实时同步---------Inotify+rsync

企业网站和应用都得有完全的数据备份方案确保数据不丢失,通常企业有如下的数据备份方案

定时任务定期备份

需要周期性备份的数据可以分两类:

  • 后台程序代码、运维配置文件修改,一般会定时任务执行脚本进行文件备份,然后配置Rsync工具推送到远程服务器备份
  • 对于数据库文件用定时任务脚本配合数据库提供的备份工具,定时生成备份文件,配合Rsync备份到远端
实时同步服务

目前在用的实时备份工具有三种

  • Inotify+Rsync
  • sersync
  • lsyncd

Inotify+Rsync实时复制

Inotify机制软件工作流程如下

  1. 备份源客户端开机运行Inotify软件,检测指定目录的文件系统变化

  2. 一旦获取到指定监控目录的数据发生变化,即刻执行Rsync命令复制数据。

  3. 将变化的数据发送到Rsync服务端的备份目录。

Inotify部署步骤

1、配置好服务端的rsync服务并启动

2、部署inotify-tool软件
Inotify是一个强大的,细粒度的,异步的文件系统事件监控机制。
事件是指如文件的增删改查都是事件。
Linux2.6.13开始就引入了inotify这个功能,用于监控文件系统的增删改查等事件。
第三方软件能实现监控文件内容变化,其实是因为linux提供了这个inotify机制功能。

3、确保目前的linux内核版本支持inotify
[root@nfs-31 ~]#uname -r
3.10.0-862.el7.x86_64

4、内核参数检查
linux支持inotify机制,在性能还可以优化,支持更高的文件并发数
这个参数的优化,就是调整linux的几个文件
[root@nfs-31 ~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r--. 1 root root 0 Jul 25 20:57 max_queued_events
-rw-r--r--. 1 root root 0 Jul 25 20:57 max_user_instances
-rw-r--r--. 1 root root 0 Jul 25 20:57 max_user_watches

系统文件解释
max_user_watches:    设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances:    设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events:    设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384

5、安装inotify-tools工具
[root@nfs-31 ~]#yum install inotify-tools -y
检查生成的软件命令
[root@nfs-31 ~]#rpm -ql inotify-tools 

上述操作安装了inotify-tools工具后,生成了2个重要命令

 inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键


Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)

【inotifywait命令解释】

inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事件发生多少次等信息

从上面可知inotifywait是一个监控事件,可以配合shell脚本使用它。与它相关的参数:

语法格式:inotifywait [-hcmrq][-e][-t][–format][-timefmt][…]

-m: 即“–monitor” 表示始终保持事件监听状态。

-d:类似于-m参数,将命令运行在后台,记录出发的事件信息,记录在指定文件里,加上--outfile参数

-r: 即“–recursive” 表示递归查询目录

-q: 即“–quiet” 表示打印出监控事件

-o: 即“–outfile” 输出事情到一个文件而不是标准输出

-s: 即“–syslog” 输入错误信息到系统日志

-e: 即“–event”, 通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、close_write、move、close、unmount和attrib等


-format: 指定输出格式;常用的格式符如:

%w:表示发生事件的目录

%f:表示发生事件的文件

%e:表示发生的事件

%Xe:事件以“X”分隔

%T:使用由-timefmt定义的时间格式

-timefmt:指定时间格式,用于-format选项中的%T格式

利用Inotify软件监控的事件主要是如下,也是我们使用命令,需要指定的那些事件,指的就是你想监控文件内容变化了,还是被删了,还是正在被编辑,被修改,等情况。

Events    含义
access    文件或目录被读取
modify    文件或目录内容被修改
attrib    文件或目录属性被改变
close    文件或目录封闭,无论读/写模式
open    文件或目录被打开
moved_to    文件或目录被移动至另外一个目录
move    文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create    文件或目录被创建在当前目录
delete    文件或目录被删除
umount    文件系统被卸载

inotifywait实践

 

1、执行命令,以及对日志进行格式化,默认检测所有事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt "%F" --format "%T %w%f 捕获的事件是:%e" /nfs-nginx/
2023-07-25 /nfs-nginx/index.html 捕获的事件是:CLOSE_NOWRITE,CLOSE
2023-07-25 /nfs-nginx/access.log 捕获的事件是:CREATE
2023-07-25 /nfs-nginx/access.log 捕获的事件是:ATTRIB
2023-07-25 /nfs-nginx/access.log 捕获的事件是:ATTRIB
2023-07-25 /nfs-nginx/access.log 捕获的事件是:MODIFY
2023-07-25 /nfs-nginx/access.log 捕获的事件是:CLOSE_WRITE,CLOSE

2、创建事件监测
[root@nfs-31 ~]#inotifywait -mrq --timefmt "%F" --format "%T %w%f" -e create /inotify_test/
2023-07-25 /inotify_test/test.log

3、move事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  move   /nfs-data
12:31:48----/nfs-data/------xixi.log 捕获到的事件是:MOVED_FROM
12:31:48----/nfs-data/------xixi.png 捕获到的事件是:MOVED_TO
12:32:17----/nfs-data/------xixi.png 捕获到的事件是:MOVED_FROM

4、delete事件
[root@nfs-31 ~]#inotifywait -mrq --timefmt "%F" --format "%T %w%f 捕获的事件是:%e"  -e delete  /inotify_test/
2023-07-25 /inotify_test/test.log 捕获的事件是:DELETE

5、close_write事件
IN_CLOSE_WRITE
一个打开的,等待写入的文件或目录被关闭。
[root@nfs-31 ~]#inotifywait -mrq --timefmt "%F" --format "%T %w %f 捕获到的事件是:%e"  -e close_write /inotify_test/
2023-07-25 /inotify_test/ .test.txt.swx 捕获到的事件是:CLOSE_WRITE,CLOSE
2023-07-25 /inotify_test/ .test.txt.swp 捕获到的事件是:CLOSE_WRITE,CLOSE
2023-07-25 /inotify_test/ 4913 捕获到的事件是:CLOSE_WRITE,CLOSE
2023-07-25 /inotify_test/ test.txt 捕获到的事件是:CLOSE_WRITE,CLOSE
2023-07-25 /inotify_test/ .test.txt.swp 捕获到的事件是:CLOSE_WRITE,CLOSE

 inotify结合rsync实时同步

这个工具的用法就是

1.inotify检测文件变化

2.执行rsync同步

1、在服务端编写一个简单脚本
[root@nfs-31 ~]#cat inotify_test.sh
#!/bin/bash
path=/nfs-data
backup_server=172.16.1.41
export RSYNC_PASSWORD=123123

/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /nfs-data | while read line
do
    echo ${line}
    rsync -az --delete /nfs-data/ rsync_backup@${backup_server}::data
done


2、运行这脚本

3、进行测试,查看效果,在备份服务器是否有数据的交互

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值