热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:inotify和rsync实现数据实时同步

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

数据的实时同步

?实现实时同步

?要利用监控服务(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 指定时间输出格式
?--format 指定的输出格式;即实际监控输出内容
?-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
?--exclude 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
?--excludei 和exclude相似,不区分大小写
?-o, --outfile 打印事件到文件中,相当于标准正确输出
?-s, --syslogOutput 发送错误到syslog相当于标准错误输出

--timefmt 时间格式,参考 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 格式定义

?%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包

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

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

[root@centos7data]#touch f1
[root@centos7data]#chown wang f2

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

[root@centos7~]#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会同步增量的文件,不会继续复制相同文件的内容)

[root@centos7data]#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)新建一个文件,将用户账号和密码存放到指定的文件中

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

 (3)服务器端准备目录

[root@centos7~]#mkdir /backup

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

[root@centos7data]#rsync --daemon

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

[root@centos7~]#watch -n1 ls -l /backup

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

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

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

[root@centos7data]#rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@192.168.34.100::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目录下的文件已经同步过来

技术图片

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


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

vim  inotify_rsync.sh

#!/bin/bash
SRC=‘/data/‘
DEST=‘rsyncuser@192.168.34.100::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)在客户端执行脚本,并跟踪指定的日志文件

[root@centos7~]#bash inotify_rsync.sh

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

[root@centos7~]#watch -n1 ls -l /backup

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

[root@centos7~]#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目录下新建文件  

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

客户端日志文件变化情况

技术图片

 服务端文件跟踪结果

技术图片

 

 

 

 

 

 

 

  

 

 

 

 


推荐阅读
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 本文详细介绍了如何在Linux系统(以CentOS为例)上彻底卸载Zimbra邮件系统,包括停止服务、删除文件和用户等步骤。 ... [详细]
  • Ansible:自动化运维工具详解
    Ansible 是一款新兴的自动化运维工具,基于 Python 开发,集成了多种运维工具(如 Puppet、CFEngine、Chef、Func 和 Fabric)的优点,实现了批量系统配置、程序部署和命令执行等功能。本文将详细介绍 Ansible 的架构、特性和优势。 ... [详细]
  • 本文通过思维导图的形式,深入解析了大型网站技术架构的核心原理与实际案例。首先,探讨了大型网站架构的演化过程,从单体应用到分布式系统的转变,以及各阶段的关键技术和挑战。接着,详细分析了常见的大型网站架构模式,包括负载均衡、缓存机制、数据库设计等,并结合具体案例进行说明。这些内容不仅有助于理解大型网站的技术实现,还能为实际项目提供宝贵的参考。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
author-avatar
z苏苏575
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有