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
手机扫一扫
移动阅读更方便
你可能感兴趣的文章