inotify+rsync数据的实时同步

生产需求:企业一般有多台web为了保证数据的统一和将web文件放在samba服务器或者nfs上,方便统一管理,

同时为了数据的安全可以找一台服务器实时同步数据,可以通过inotify+rsync+脚本实现

image.png

一、监控软件inotify介绍

        inotify可以监控同步数据服务器目录中信息的变化,采用异步的文件系统事件监控机制,利用事件驱动

机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监

控文件系统中添加、删除,修改、移动等各种事件。

image.png

ll /proc/sys/fs/inotify #列出下面的文件,说明服务器内核支持inotify

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events   inotify事件队列最大长度默认值:16384

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances  每个用户创建inotify实例最大值默认值:128

-rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches   可以监视的文件数量(单进程),默认值:8192


inotify是内核级的功能,需要通过用户空间程序,安装包:

    yum install inotify-tools       基于epel源

inotify-tools包主要文件:

1、inotifywait命令

     在被监控的文件或目录上等待特定文件系统事件(open closedelete等)发生,常用于实时同步的

目录监控,直接使用不加选项会一次性监控,当对该目录进行操作会结束当次监控

image.png

inotifywait命令常见选项

    -m, --monitor 始终保持事件监听

     -d, --daemon 以守护进程方式执行,和-m相似,配合-o使用

    -r, --recursive 递归监控目录数据信息变化

    -q, --quiet 输出少量事件信息

    --exclude <pattern> 指定排除文件或目录,使用扩展的正则表达式匹配的模

    式实现

    --excludei <pattern> 和exclude相似,不区分大小写

     -o, --outfile <file>打印事件到文件中,相当于标准正确输出

     -s, --syslogOutput 发送错误到syslog相当于标准错误输出

     --timefmt <fmt> 指定时间输出格式

            --timefmt <fmt>时间格式,参考 man 3 strftime

            %Y 年份信息,包含世纪信息

            %y 年份信息,不包括世纪信息

            %m 显示月份,范围 01-12

            %d 每月的第几天,范围是 01-31

            %H 小时信息,使用 24小时制,范围 00-23

            %M 分钟,范围 00-59

            示例:

            --timefmt "%Y-%m-%d %H:%M"

     --format <fmt> 指定的输出格式;即实际监控输出内容

    -e 指定监听指定的事件,如果省略,表示所有事件都进行监听

             示例: -e create,delete,moved_to,close_write, attrib

常用组合

持续后台监控,并记录日志

inotifywait -mrq  /data/www -o /root/inotify.log  --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"

image.png

持续后台监控特定事件

inotifywait -mrq /data -o /root/inotify.log  --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib

2、inotifywatch:

收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

二、具体实现

192.168.12.27 inotify服务器

192.168.12.57  rsync服务器

监控inotify服务器数据变化自动同步到 rsync服务器上

192.168.12.57 :

1、安装软件包

yum install rsync  

2、服务器端修改rsync配置文件

vi /etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.12.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

3、生成服务器验证文件

echo "rsyncuser:123456" > /etc/rsync.pass

chmod 600 /etc/rsync.pass

4、创建文件用于存放备份文件

mkdir /backup

chmod 600 /backup/

5、启动rsyncd服务

rsync --daemon     可加入/etc/rc.d/rc.local实现开机启动

systemctl start rsyncd

192.168.12.27:

1、安装软件包,创建需要监控备份的文件夹

yum install inotify-tools

image.png

2、生成密码文件,如果没有会变成交互式命令,创建后rsync会使用该密码自动同步

echo "123456" > /etc/rsync.pass

chmod 600 /etc/rsync.pass

3、测试能否同步到rsync服务器

rsync -avz --password-file=/etc/rsync.pass /data/www/ [email protected]::backup

image.png

4、创建实时监控脚本

vi inotify_rsync.sh

#!/bin/bash
#
#********************************************************************
#Author:        swh
#QQ: 786529083
#Date: 2019-08-01
#FileName:inotify_rsync.sh
#blog: https://blog.51cto.com/14322729
#Description:The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
SRC='/data/www/'
DEST='[email protected]::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

image.png


猜你喜欢

转载自blog.51cto.com/14322729/2425782