首页 > 其他分享 >数据的实时同步

数据的实时同步

时间:2024-07-19 14:18:19浏览次数:14  
标签:文件 rsync 同步 inotify -- root 实时 数据 目录

一、实时同步技术介绍

在生产环境,有时会需要两台主机的特定目录实现实时同步。比如,将NFS共享目录的数据文件,自动实时同步到备份服务器特定目录。

实现实时同步的方法:

  • inotify + rsync 方式实现数据同步
  • sersync :在 inotify 软件基础上进行开发的,功能更加强大

inotify+rsync使用方式:

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

工作原理:

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

二、inotify实时监控

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

实现inotify软件:

  • inotify-tools
  • sersync
  • lrsyncd

1.内核支持

Linux支持inotify的内核最小版本为 2.6.13,参看 man 7 inotify 。

点击查看代码
//列出下面的文件,说明服务器内核支持inotify
[root@node7 ~]# ls -l /proc/sys/fs/inotify
总用量 0
-rw-r--r--. 1 root root 0 7月  14 16:23 max_queued_events
-rw-r--r--. 1 root root 0 7月  14 16:23 max_user_instances
-rw-r--r--. 1 root root 0 6月  27 16:26 max_user_watches
[root@node7 ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@node7 ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@node7 ~]# cat /proc/sys/fs/inotify/max_user_watches
8192

inotify 内核参数说明:

  • max_queued_events:inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错误,默认值:16384, 生产环境建议调大,比如:327679

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

  • max_user_watches:可以监视的文件的总数量(inotifywait 单进程),默认值:8192,建议调大

示例:

点击查看代码
[root@node7 ~]# vim /etc/sysctl.conf 
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000    

[root@node7 ~]# sysctl -p

2.inotify-tools工具

inotify-tools参考文档:github.com/rvoicilas/i…

安装inotify-tools:基于epel源

点击查看代码
[root@node7 ~]# yum install epel-release.noarch -y  
[root@node7 ~]# yum install inotify-tools -y

inotify-tools包主要工具:

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

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

inotifywait命令
命令格式:

点击查看代码
inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]

常用选项:

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

inotifywait的--timefmt时间格式:

点击查看代码
%Y   //年份信息,包含世纪信息
%y   //年份信息,不包括世纪信息
%m   //显示月份,范围 01-12
%d   //每月的第几天,范围是 01-31
%H   //小时信息,使用 24小时制,范围 00-23 
%M   //分钟,范围 00-59 
%S   //秒,范例 0-60

示例:
--timefmt "%Y-%m-%d %H:%M:%S"

inotifywait的--format格式定义:

点击查看代码
%T   //输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
%w   //事件出现时,监控文件或目录的名称信息,相当于dirname
%f   //事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空,相当于basename
%e   //显示发生的事件信息,不同的事件默认用逗号分隔
%Xe  //显示发生的事件信息,不同的事件指定用X进行分隔  x表示分隔符

示例:
--format "%T %w%f event: %;e"
--format '%T %w %f'

inotifywait -e 选项指定的事件类型:

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

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

三、rsync

rsync 常用于做为 linux系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时数据同步。

rsync有三种工作方式:

  • 本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。

  • 本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。

  • 本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。

前两者的本质是通过本地或远程shell,而第3种方式则是让远程主机上运行rsyncd服务,使其监听在一个端口上,等待客户端的连接。

rsync命令

  • 本地使用
点击查看代码
rsync [OPTION...] SRC... [DEST]

示例:
rsync  -av /etc   [email protected]:/opt   
//复制目录和目录下文件   -a约等于cp命令中的a  v显示过程
rsync  -av /etc/   [email protected]:/opt
//只复制目录下文件

  • 远程使用基于ssh协议
点击查看代码
Pull: 
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: 
rsync [OPTION...] SRC... [USER@]HOST:DEST

  • 远程使用基于后台daemon双冒号或者双//
点击查看代码
Pull: 
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

常见选项:

选项 作用
-v 显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息
-P 显示文件传输的进度信息。(实际上"-P"="--partial --progress",其中的"--progress"才是显示进度信息的)
-n --dry-run 仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的
-a --archive 归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"
-r --recursive 递归到目录中去
-t --times 保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效
-o --owner 保持owner属性(属主)
-g --group 保持group属性(属组)
-p --perms 保持perms属性(权限,不包括特殊权限)
-D 是"--device --specials"选项的组合,即也拷贝设备文件和特殊文件
-l --links 如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象
-z 传输时进行压缩提高效率
-R --relative 使用相对路径。意味着将命令行中指定的全路径而非路径最尾部的文件名发送给服务端,包括它们的属性
--size-only 默认算法是检查文件大小和mtime不同的文件,使用此选项将只检查文件大小
-u --update 仅在源mtime比目标已存在文件的mtime新时才拷贝。注意,该选项是接收端判断的,不会影响删除行为
-d --dirs 以不递归的方式拷贝目录本身。默认递归时,如果源为"dir1/file1",则不会拷贝dir1目录,使用该选项将拷贝dir1但不拷贝file1
--max-size 限制rsync传输的最大文件大小。可以使用单位后缀,还可以是一个小数值(例如:"--max-size=1.5m")
--min-size 限制rsync传输的最小文件大小。这可以用于禁止传输小文件或那些垃圾文件
--exclude 指定排除规则来排除不需要传输的文件
--delete 以SRC为主,对DEST进行同步。多则删之,少则补之。注意"--delete"是在接收端执行的,所以它是在exclude/include规则生效之后才执行的
-b --backup 对目标上已存在的文件做一个备份,备份的文件名后默认使用"~"做后缀
--backup-dir 指定备份文件的保存路径。不指定时默认和待备份文件保存在同一目录下
-e 指定所要使用的远程shell程序,默认为ssh
--port 连接daemon时使用的端口号,默认为873端口
--password-file daemon模式时的密码文件,可以从中读取密码实现非交互式。注意,这不是远程shell认证的密码,而是rsync模块认证的密码
-W --whole-filersync 将不再使用增量传输,而是全量传输。在网络带宽高于磁盘带宽时,该选项比增量传输更高效
--existing 要求只更新目标端已存在的文件,目标端还不存在的文件不传输。注意,使用相对路径时如果上层目录不存在也不会传输
--ignore-existing 要求只更新目标端不存在的文件。和"--existing"结合使用有特殊功能
--remove-source-files 要求删除源端已经成功传输的文件

标签:文件,rsync,同步,inotify,--,root,实时,数据,目录
From: https://www.cnblogs.com/leikj/p/18311389

相关文章

  • 【稳定检索】2024年数据处理与人工智能国际会议(ICDPAI 2024)
    2024年数据处理与人工智能国际会议2024InternationalConferenceonDataProcessingandArtificialIntelligence【1】会议简介        2024年数据处理与人工智能国际会议是数据处理和人工智能领域的一次重要盛会。会议旨在通过全球范围内专家学者的深入交流,探......
  • AI人工智能深度学习算法:智能深度学习代理的环境感知与数据采集机制
    AI人工智能深度学习算法:智能深度学习代理的环境感知与数据采集机制作者:禅与计算机程序设计艺术/ZenandtheArtofComputerProgramming1.背景介绍1.1问题的由来随着人工智能技术的迅速发展,深度学习算法因其强大的模式识别和预测能力而被广泛应用。特别是在智能代......
  • 数据驱动运维:如何通过可观测性实现AIOps的突破
    前言:数字化转型的浪潮中,企业正面临着前所未有的挑战和机遇。随着技术的进步,系统变得越来越复杂,传统的运维方法已经难以满足现代企业的需求。在这种背景下,可观测性(Observability)和人工智能运维(AIOps)应运而生,成为企业提升运维效率、降低成本、提高服务质量的关键技术。一、可......
  • cryptography签名数据方法
    简介在非对称加密(公/私钥)体系中,一般有两种应用场景:公钥加密--->私钥解密私钥签名--->公钥验证签名数字签名在网络通信中是一种防伪和防抵赖技术。RSA私钥签名及验证加密算法:RSA哈希算法:SHA256fromcryptography.hazmat.primitivesimporthashes,serializatio......
  • 打破僵局:深度解析数据库死锁的策略与实践(专家篇)
    在多任务操作系统和数据库管理系统中,死锁是一个常见问题,它发生在两个或多个进程/线程因争夺资源而相互等待,导致系统资源无法继续执行。有效地检测和预防死锁对于确保系统稳定性和提高系统性能至关重要。本次探讨不同的死锁检测与预防策略,以及如何在实际应用中实现这些策略......
  • 数据集规模、复杂性与结果变化性在微调与指令调整中的交互作用
     在自然语言处理(NLP)的诸多任务中,标注数据的稀缺往往限制了模型性能的进一步提升。随着大型语言模型(LLMs)的兴起,研究者们现在面临一个关键问题:在有限的标注数据条件下,是应该依赖于通用的大型模型,还是应该通过微调来定制更为专业的小型模型?大型模型虽然具备广泛的适用性,能够在多......
  • Jmter(十六)jmter连接数据库
    Jmter连接数据库下载对应的驱动包mysql-connector-java-5.1.13-bin.jar点击测试计划,点击浏览,添加即可(不需要解压,目录最好是lib的ext)在线程组中,右键添加-->配置元件--->“JDBCConnectionConfiguration”,具体配置如下图1)VaribleName:这个是变量的名字,也就是说不能重复,2)J......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线打开 word文件自定义模板中
    国产linux系统(银河麒麟,统信uos)使用PageOffice国产版在线打开pdf文件PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)芯片架构。本示例关键代码的编写位置Vue+Springboot注意本文中展示的代码均为关键代码,复......
  • 彩票数据自动抓取程序技术要点分析
    本人开发过一款彩票历史数据分析程序,参见文章《彩票历史记录分析工具》。如果彩票数据的提取依靠人工,搜集完整的数据数据非常耗时耗力;本人开发了一款网页分析程序,可以自动提取彩票数据。本文就分析程序实现的过程。程序界面:程序可以自动提取彩票的日期、中奖数据。简单讲......
  • [MAUI 项目实战] 笔记App(二):数据库设计
    @目录Sqlite配置创建实体笔记实体类笔记分组实体笔记片段实体笔记片段负载实体笔记片段仓库实体笔记模板(场景)实体笔记片段模板实体笔记片段模板负载实体配置EF创建映射迁移和种子数据项目地址Sqlite配置应用程序里使用Sqlite作为数据库,使用EntityFramworkCore作为ORM,使用CodeFir......