数据的实时同步-Masuri

Windows Windows 2个月前 (08-15) 4次浏览 未收录 0个评论 扫描二维码

数据的实时同步

要实现数据的实时同步需要利用监控服务inotify,监控同步数据服务器目录中信息的变化,当发现目录中的数据产生变化,就利用rsync服务推送到备份服务器上。 inotify:异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的 轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文 件系统中添加、删除、修改、移动等各种事件实现inotify软件:inotify-tools,sersync,lrsync

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

查看/proc/sys/fs/inotify目录下是否有以下文件,若是有则支持

[root@localhost ~]# ll /proc/sys/fs/inotify/
total 0   #查看
-rw-r--r-- 1 root root 0 May 19 08:47 max_queued_events
-rw-r--r-- 1 root root 0 May 19 08:47 max_user_instances
-rw-r--r-- 1 root root 0 May 19 08:47 max_user_watches

参数作用

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

参数修改

临时有效

[root@localhost ~]# echo "81920" > /proc/sys/fs/inotify/max_user_watches

永久生效

[root@localhost ~]# vim /etc/sysctl.conf 
fs.inotify.max_user_watches = 81920
[root@localhost ~]# sysctl -p
fs.inotify.max_user_watches = 81920

inotify-tools

inotify-tools是基于epel源的,需要开启epel源

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

inotify-tools的主要文件

[root@localhost ~]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch

inotifywait:在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,常用于实时同步的目录监控 inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

inotify命令用法

语法:

inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]
options 说明
-m 始终保持事件监听
-d 以守护方式执行
-r 递归监控目录数据信息变化
-q 输出少量事件信息
–exclude 指定排除文件或目录,是哪个扩展的正则表达式
–excludei 和–exclude相同,不区分大小写
-o FILE 输出事件到文件中,标准正确输出
-s 发送错误到syslog中
–timefmt OPT 指定时间输出的格式
–format OPT 指定的输出格式;即实际监控输出内容
-e 指定监听的时间,如省略表示监听所有

inotifywait使用方法 1.监控目录,不带任何参数默认工作在前台

[root@localhost ~]# inotifywait /data
Setting up watches.
Watches established.
/data/ OPEN,ISDIR           #不带任何参数,被访问一次就退出

2.持续递归监控目录

[root@localhost ~]# inotifywait -mrq /data
/data/ OPEN,ISDIR             #访问目录
/data/ CLOSE_NOWRITE,CLOSE,ISDIR 
/data/ CREATE aaa             #创建文件
/data/ OPEN aaa
/data/ ATTRIB aaa
/data/ CLOSE_WRITE,CLOSE aaa

3.以守护进程执行

[root@localhost ~]# inotifywait -o /root/inotify.log -rq /data
[root@localhost ~]# tail /root/inotify.log 
/data/ CREATE bbb               #创建文件

4.定义格式输出

定义格式输出需要定义时间格式和输出格式两个选项–timefmt OPT 时间格式 参数 说明
%Y 年份信息,包含世纪信息
%y 年份信息,不包括世纪信息
%m 显示月份,范围 01-12
%d 每月的第几天,范围是 01-31
%H 小时信息,使用 24小时制,范围 00-23
%M 分钟,范围 00-59
--timefmt "%Y-%m-%d %H:%M"
–format OPT 输出格式 FMT 格式定义
%T 输出时间格式中定义的时间格式信息,通过–timefmt option语法格式指定时间信息
%w 事件出现时,监控文件或目录的名称信息
%f 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
%e 显示发生的事件信息,不同的事件默认用逗号分隔
%Xe 显示发生的事件信息,不同的事件指定用X进行分隔
--format "%T %w%f event: %;e"  
--format '%T  %w  %f'

指定输出的格式

[root@localhost ~]# inotifywait -o /root/inotify.log -drq --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %;e" /data
[root@localhost ~]# cat /root/inotify.log 
2019-05-19 09:43 /data/abc event: CREATE
2019-05-19 09:43 /data/abc event: OPEN
2019-05-19 09:43 /data/abc event: ATTRIB
2019-05-19 09:43 /data/abc event: CLOSE_WRITE;CLOSE
2019-05-19 09:43 /data/ event: OPEN;ISDIR
2019-05-19 09:43 /data/ event: CLOSE_NOWRITE;CLOSE;ISDIR
2019-05-19 09:44 /data/ event: OPEN;ISDIR
2019-05-19 09:44 /data/ event: CLOSE_NOWRITE;CLOSE;ISDIR
2019-05-19 09:44 /data/aaa event: DELETE

5.监听特定的事件

使用-e选项可以指定监听的特定事件 事件类型 说明
create 文件或目录创建
delete 文件或目录被删除
modify 文件或目录内容被写入
attrib 文件或目录属性改变
close_write 文件或目录关闭,在写入模式打开之后关闭的
close_nowrite 文件或目录关闭,在只读模式打开之后关闭的
close 文件或目录关闭,不管读或是写模式
open 文件或目录被打开
moved_to 文件或目录被移动到监控的目录中
moved_from 文件或目录从监控的目录中被移动
move 文件或目录不管移动到或是移出监控目录都触发事件
access 文件或目录内容被读取
delete_self 文件或目录被删除,目录本身被删除
unmount 取消挂载

监控新建,删除,改属性,改名字

[root@localhost ~]# inotifywait -mrq --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %;e" /data -e CREATE,MOVED_TO,DELETE,ATTRIB
2019-05-19 09:52 /data/abc event: DELETE
2019-05-19 09:52 /data/bbb event: DELETE
2019-05-19 09:52 /data/123 event: CREATE
2019-05-19 09:52 /data/123 event: ATTRIB

inotify和rsync实现实时同步

要实现inotify和rsync实时同步,需要将用来同步的服务器设置为rsync服务器准备主机2台,客户端,rsync服务器,客户端监控本机/data目录下的数据变化,服务器端用来同步/data数据 主机 IP
rsync 192.168.73.110
client 192.168.73.111

rsync服务器配置

1.安装rsync

[root@rsync ~]# yum install rsync -y

2.创建一个用来同步数据的目录

[root@rsync ~]# mkdir /data/backup

3.修改rsync配置文件

[root@rsync ~]# vim /etc/rsyncd.conf 
uid = root                          
gid = root                          
use chroot = no                     
max connections = 0                 
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
reverse lookup = no
host allow = 192.168.73.111
[backup]
path = /data/backup/
comment = backup
readonly = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

4.生成验证用的账户密码,修改为安全权限

[root@rsync ~]# echo "rsyncuser:111111" > /etc/rsync.pass
[root@rsync ~]# chmod 600 /etc/rsync.pass

5.启动服务(rsyncd端口号873)

[root@rsync ~]# systemctl start rsyncd

client端配置 测试rsync一次性任务

1.安装rsync

[root@client ~]# yum install rsync -y

2.配置密码文件,修改为安全权限

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

3.执行rsync命令

#把本机的/data目录下的数据利用rsync远程同步到73.110的backup指定的文件夹中去
[root@client ~]# rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@192.168.73.110::backup
sending incremental file list
./
nfs1/
nfs1/123
nfs1/aaa
nfs1/wang
nfs2/
nfs2/nfs2.txt
wanghome/
wanghome/.bash_history
wanghome/.bash_logout
wanghome/.bash_profile
wanghome/.bashrc
wanghome/.viminfo
wanghome/test

sent 1,587 bytes  received 225 bytes  3,624.00 bytes/sec
total size is 1,215  speedup is 0.67

同步成功

让inotify配合sync实时同步

1.在客户端创建脚本

[root@client ~]# vim rsync.sh 
#!/bin/bash
SRC='/data/'
DEST='rsyncuser@192.168.73.110::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

2.运行脚本

[root@client ~]# bash rsync.sh 
喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址