inotify和rsync实现数据实时同步

数据的实时同步

?实现实时同步

?要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
?发现目录中数据产生变化,就利用rsync服务推送到备份服务器上

?实现实时同步的方法

?inotify+rsync 方式实现数据同步
?sersync :金山公司周洋在 inotify 软件基础上进行开发的,功能更加强大

?inotify:

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

?实现inotify软件:

inotify-tools,sersync,lrsyncd

inotify和rsync实现实时同步

?inotify+rsync使用方式

?inotify 对同步数据目录信息的监控
?rsync 完成对数据的同步
?利用脚本进行结合

查看服务器内核是否支持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 

inotify内核参数
参数说明:参看man 7 inotify

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

inotify参考文档

?https://github.com/rvoicilas/inotify-tools/wiki
?安装:基于epel源

yum install inotify-tools

?Inotify-tools包主要文件:

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

inotifywait命令常见选项

?-m, --monitor 始终保持事件监听
?-d, --daemon 以守护进程方式执行,和-m相似,配合-o使用
?-r, --recursive 递归监控目录数据信息变化
?-q, --quiet 输出少量事件信息
?--timefmt <fmt> 指定时间输出格式
?--format <fmt> 指定的输出格式;即实际监控输出内容
?-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
?--exclude <pattern> 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
?--excludei <pattern> 和exclude相似,不区分大小写
?-o, --outfile <file>打印事件到文件中,相当于标准正确输出
?-s, --syslogOutput 发送错误到syslog相当于标准错误输出

--timefmt <fmt>时间格式,参考 man 3 strftime

?%Y 年份信息,包含世纪信息
?%y 年份信息,不包括世纪信息
?%m 显示月份,范围 01-12
?%d 每月的第几天,范围是 01-31
?%H 小时信息,使用 24小时制,范围 00-23
?%M 分钟,范围 00-59

?示例:

--timefmt "%Y-%m-%d %H:%M" 

--format <fmt> 格式定义

?%T 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
?%w 事件出现时,监控文件或目录的名称信息
?%f 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
?%e 显示发生的事件信息,不同的事件默认用逗号分隔
?%Xe显示发生的事件信息,不同的事件指定用X进行分隔

?示例:

--format "%T %w%f event: %;e"
--format ‘%T %w %f‘

-e 选项指定的事件类型

?create 文件或目录创建
?delete 文件或目录被删除
?modify 文件或目录内容被写入
?attrib 文件或目录属性改变
?close_write 文件或目录关闭,在写入模式打开之后关闭的
?close_nowrite 文件或目录关闭,在只读模式打开之后关闭的
?close 文件或目录关闭,不管读或是写模式
?open 文件或目录被打开
?moved_to 文件或目录被移动到监控的目录中
?moved_from 文件或目录从监控的目录中被移动
?move 文件或目录不管移动到或是移出监控目录都触发事件
?access 文件或目录内容被读取
?delete_self 文件或目录被删除,目录本身被删除
?unmount 取消挂载

示例: -e create,delete,moved_to,close_write

示例:
?监控一次性事件

inotifywait /data

?持续监控

inotifywait -mrq /data

?持续后台监控,并记录日志

inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"

?持续后台监控特定事件

inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib

 验证后台监控特定事件 

(1)安装inotify-tools包

[[email protected]~]#yum install inotify-tools  -y
[[email protected]~]#inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib  监控data目录下的文件

(2)新开一个窗口在data目录下进行操作 

[[email protected]]#touch f1
[[email protected]]#chown wang f2

(3)可以看到监控data目录下的文件在实时监控此时对data目录的操作记录

[[email protected]~]#inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib  监控data目录下的文件
2019-12-04 22:30 /data/f1 event: ATTRIB
2019-12-04 22:30 /data/f1 event: CLOSE_WRITE;CLOSE
2019-12-04 22:30 /data/f2 event: ATTRIB

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

(1)修改rsync配置文件内容(rsync会同步增量的文件,不会继续复制相同文件的内容)

[[email protected]]#vim /etc/rsyncd.conf
uid = root     #以root身份运行
gid = 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   #pid文件路径
lock file = /var/run/rsyncd.lock  #锁文件路径
reverse lookup = no   #不做解析反向解析
hosts allow = 192.168.34.0/24  希望192.168.34.0网段访问
[backup]
path = /backup/ 希望将backup文件夹进行同步
comment = backup  同步的文件夹名称一致
read only = no  可以写文件
auth users = rsyncuser  指定一个用户账号
secrets file = /etc/rsync.pass   存放口令位置

 (2)新建一个文件,将用户账号和密码存放到指定的文件中

[[email protected]]#echo "rsyncuser:centos" > /etc/rsync.pass
[[email protected]]#cat /etc/rsync.pass
rsyncuser:centos
[[email protected]]#chmod 600 /etc/rsync.pass  修改权限,避免其他人看见此文件的用户名密码

 (3)服务器端准备目录

[[email protected]~]#mkdir /backup

(4)服务器端启动rsync服务,可加入/etc/rc.d/rc.local实现开机启动,监听873端口

[[email protected]]#rsync --daemon

(5)在服务器端对backup目录进行监控,1秒监控一次目录

[[email protected]~]#watch -n1 ls -l /backup

(7)客户端配置密码文件

[[email protected]~]#echo "centos" > /etc/rsync.pass
[[email protected]~]#chmod 600 /etc/rsync.pass   为了安全,将文件权限修改为600

(8)客户端测试同步数据

[[email protected]]#rsync -avz --password-file=/etc/rsync.pass /data/ [email protected]::backup
sending incremental file list
./
f1
xx

sent 156 bytes  received 57 bytes  426.00 bytes/sec
total size is 0  speedup is 0.00

服务器端此时监控到backup目录下的文件已经同步过来

[[email protected]~]#ls /backup  此时服务器端的backup目录下已经将客户端data目录下的文件复制过来
f1  xx

在客户端创建inotify_rsync.sh脚本,实现同步效果

vim  inotify_rsync.sh

#!/bin/bash
SRC=‘/data/‘
DEST=‘[email protected]::backup‘
inotifywait -mrq --timefmt ‘%Y-%m-%d %H:%M‘ --format ‘%T %w %f‘ -e attrib,create,delete,moved_to,close_write ${SRC} |while read DATE TIME DIR FIL
E;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/l
og/changelist.log  指定跟踪日志文件done

(2)在客户端执行脚本,并跟踪指定的日志文件

[[email protected]~]#bash inotify_rsync.sh

(3)在服务端跟踪此时backup目录内容

[[email protected]~]#watch -n1 ls -l  /backup

(4)监控客户端此时新生成的日志文件

[[email protected]~]#tail -f /var/log/changelist.log
At 23:50 on 2019-12-04, file /data/f33 was backuped up via rsync
At 23:50 on 2019-12-04, file /data/f33 was backuped up via rsync
At 23:50 on 2019-12-04, file /data/f33 was backuped up via rsync
At 23:51 on 2019-12-04, file /data/f2 was backuped up via rsync
At 23:51 on 2019-12-04, file /data/f2 was backuped up via rsync
At 23:51 on 2019-12-04, file /data/f2 was backuped up via rsync
At 23:51 on 2019-12-04, file /data/f5 was backuped up via rsync
At 23:51 on 2019-12-04, file /data/f5 was backuped up via rsync

(5)验证效果,此时在客户端data目录下新建文件  

[[email protected]~]#cd /data
[[email protected]]#ls
f1  f2  f3
[[email protected]]#touch f33
[[email protected]]#toch f2
bash: toch: command not found...
[[email protected]]#touch f2
[[email protected]]#cp /etc/fstab f2
cp: overwrite ‘f2’? y
[[email protected]]#cp /etc/fstab f5

客户端日志文件变化情况

服务端文件跟踪结果

 

 

 

 

  

 

 

 

 

原文地址:https://www.cnblogs.com/struggle-1216/p/11986595.html

时间: 2024-10-10 17:18:54

inotify和rsync实现数据实时同步的相关文章

rsync + inotify 用来实现数据实时同步

一.简介 1.rsync 比其cp.tar备份的方法,rsync的优点是,安全性高.备份迅速.支持增量备份.只能做对实时性要求不高的数据备份,例如:备份文件服务到远端从服务器.在本地磁盘上做数据镜像等 增量备份:就是rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.但是对于大量文件达到千万量级别时,扫描所有文件是非常耗时的. 如果发生改变的只是其中的一小部分的话,这是非常低效的方式. rsync 不能实时的去监测,同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,两

Rsync+inotify完整备份及数据实时同步

Rsync+inotify数据实时同步 客户端IP:192.168.1.10         服务端IP:192.168.1.20 1.什么是Rsync? Rsync(remote synchronize)是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据镜像同步备份优秀工具,他适用于unix/Linux/Windows多系统操作平台, 2.Rsync的特性 1.支持拷贝特殊文件入链接.设备等 2.可以有排除执行文件或目录同步的功能相当于打包命令tar的排除功能 3.可以做到保持源

Rsync+inotify-tools数据实时同步

------------------------------以下部分在两个节点上执行 1.防火墙开放873端口(两个节点) # vim /etc/sysconfig/iptables -A INPUT -p tcp --dport 873 -j ACCEPT # /etc/init.d/iptables restart # /etc/init.d/iptables save 2.关闭selinux(两个节点) # sed -i "s/SELINUX=.*/SELINUX=disabled/g&q

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

rsync+inotify实现数据实时同步备份

在实际生产环境当中,我们总会遇见需要把一些重要数据进行备份,且随着应用系统规模的增大,对数据的安全性.可靠性.时效性要求还是比较高的, 因此我自己有在用rsync+inotify来实现数据实时同步备份,下面记录下操作步骤,以防日后自己忘记. 实验背景: 操作系统          IP         机器名        角色 CentOS 7.2       172.16.22.1     nginx01        数据源(服务器端) CentOS 7.2       172.16.22

rsync与inotify实现数据实时同步

Rsync与Inotify 单一的rsync只可以进行数据同步,单一的inotify只可以实时监控文件,两者结合使用刚好满足数据实时同步的需求,下面就用一个数据发布服务器和两个web服务器实例解析rsync+inotify实现实时同步. 数据发布服务器 192.168.1.5 (rsync+inotify) web服务器 192.168.1.6 192.168.1.7 (rsync) 首先在web服务器上部署rsync 192.168.1.6配置 [[email protected]~]# yu

利用rsync+inotify实现数据实时同步脚本文件

将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133.96.7.101 host3=133.96.7.102 src=/data/www/ dst1=web1 dst2=web2 dst3=web3 user1=web1 user2=web2 user3=web3 /usr/local/inotify/bin/inotifywait -mrq --ti

[转帖]sersync基于rsync+inotify实现数据实时同步

sersync基于rsync+inotify实现数据实时同步 https://www.jianshu.com/p/d532a34e5cc5 前言 提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输. 原文地址:https://www.cnblogs.com/nbxcnxvcnb/p/12393252.html

Linux下Rsync+Inotify-tools实现数据实时同步

说明: 一.先安装好rsync的服务端和客户端: http://douya.blog.51cto.com/6173221/1573968 二.安装,使用inotify-tools,实时同步 1.查看服务器内核是否支持inotify ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持inotify -rw-r--r-- 1 root root 0 Mar  7 02:17 max_queued_events -rw-r--r-- 1 root r