实时数据同步inotify+rsync

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

 

posted @ 2019-07-31 12:57  Linus小跟班  阅读(212)  评论(0编辑  收藏  举报