实时数据同步inotify+rsync
阅读原文时间:2023年07月08日阅读:4

inotify

inotify是一个实时监控服务,他能实时监控服务器中的目录的变化,发现目录中变化后,在配合rsync服务推送到备份服务器上

inotify要求内核要在2.6.13或之上,通过notify,可以监控文件系统中如增删查改等各种事件

列出下面文件说明服务器支持notify

[root@node2 ma]#ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 31 11:00 max_queued_events
-rw-r--r-- 1 root root 0 Jul 31 11:00 max_user_instances
-rw-r--r-- 1 root root 0 Jul 31 11:00 max_user_watches

根据工作需要,可调整
#:max_queued_events:inotify事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384
#:max_user_watches:可以监视的文件数量(单进程),默认值:8192
#:max_user_instances:每个用户创建inotify实例最大值,默认值:128

inotify依赖inotify-tools(在epel源)

[root@node4 ~]#yum install inotify-tools -y

监控/data/文件

inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved\_to,close\_write,attrib /data/www

#: -m 始终保持事件监听
-r 递归监控数据目录变化
-q 输出少量事件信息

    --timefmt    定义时间格式

            %Y    年份信息  
            %m    月份信息  
            %d     每月第几天  
            %H    小时  
            %M    分钟

    --format    定义格式  
            %T    输出时间格式中定义的时间格式信息  
            %w    时间出现时,监控文件或目录的名称信息  
            %f    时间出现时,将显示监控目录下触发事件的文件或目录信息,否则为空

    -e      指定事件类型

            create 文件或目录创建  
         delete 文件或目录被删除  

 modify 文件或目录内容被写入
 attrib 文件或目录属性改变
moved_to 文件或目录被移动到监控的目录中
 moved_from 文件或目录从监控的目录中被移动
move 文件或目录不管移动到或是移出监控目录都触发事件
delete_self 文件或目录被删除,目录本身被删除
 unmount 取消挂载

rsync

先安装包

[root@node4 www]#yum install rsync -y

编辑rsync服务器的配置文件

[root@node2 ma]#vim /etc/rsyncd.confuid = root
uid = root
gid = root #: 定义rsync服务器以root用户运行
use chroot = no #:不允许切根
max connections = 0 #:最大连接数,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.8.0/24 #:允许那些主机连接

[backup] # : 为一下代码块起的名字
path = /backup/ #:将数据备份到本机哪个目录
comment = backup #:描述
read only = no #:可写
auth users = rsyncuser #:远程用户
secrets file = /etc/rsync.pass #:远程用户放置密码的文件

在rsync服务器端生成验证文件并修改权限

[root@node2 ma]#echo "rsyncuser:magedu" > /etc/rsync.pass #: 格式是 用户名:密码
[root@node2 ma]#chmod 600 /etc/rsync.pass

在rsync服务器端准备备份文件并重启服务

[root@node2 ma]#mkdir /backup
[root@node2 ma]#systemctl restart rsyncd

在客户端配置密码文件(同步的时候就不用输入密码了)并修改权限

[root@node4 ~]#echo "magedu" > /etc/rsync.pass
[root@node4 ~]#chmod 600 /etc/rsync.pass

然后测试

[root@node4 ~]#rsync -avz --password-file=/etc/rsync.pass /data/www rsyncuser@192.168.37.22::backup

#:模板

rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服务器IP::backup

现在可以同步了

然后我们开始使用脚本让它实时同步

在客户端创建脚本

[root@node4 www]#vim /data/inotify_rsync.sh
#!/bin/bash

#********************************************************************
#Author: Ma Xue Bin
#QQ: 316428921
#Date: 2019-07-31
#!/bin/bash
SRC='/data/www/'
DEST='rsyncuser@192.168.37.22::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

加执行权限,运行

[root@node4 ~]#chmod +x /data/inotify_rsync.sh
[root@node4 ~]#. /data/inotify_rsync.sh

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器