数据的实时同步

数据的实时同步

要实现数据的实时同步需要利用监控服务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
rsync192.168.73.110
client192.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 

转载于:https://blog.51cto.com/11886307/2397142

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值