inotify+rsync 方式实现数据同步

inotify:

异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件

1、查看服务器内核是否支持inotify

Linux下支持inotify的内核最小为2.6.13

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

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances

-rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches

2、inotify内核参数

参数说明:参看man 7 inotify

max_queued_events:inotify事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384

max_user_watches:可以监视的文件数量(单进程),默认值:8192

max_user_instances:每个用户创建inotify实例最大值,默认值:128

3、inotify-tools包主要文件:

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

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

4、centos6上开启rsyncd服务需要安装xinetd(非独立服务依赖)再激活rsyncd服务(chkonfig rsync on)

案例:inotify和rsync实现实时同步

1、配置 rsync 服务器端的配置文件

vim /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.43.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

2、服务器端生成验证文件

echo "rsyncuser:magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

3、服务器端准备目录

mkdir /backup

4、服务器端启动rsync服务

systemctl start rsyncd 

5、客户端配置密码文件

yum install inotify-tools
echo "magedu" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

6、客户端测试同步数据(一次备份)

rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@/192.168.43.102::backup

7、客户端创建inotify_rsync.sh脚本

#!/bin/bash
SRC='/data/'
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

你可能感兴趣的:(inotify+rsync 方式实现数据同步)