关注分享主机优惠活动
国内外VPS云服务器

Linux inotify和rsync服务实现实时数据同步的原理分析

文件定时同步的实现:使用rsync和cron进行任务规划;

rsync -av--delete/data/10 . 0 . 0 . 12:/back -a:保留文件属性-v:显示进程-delete:如果目标文件中有,而源文件中没有,则在目标文件中删除。

实现实时文件同步:前提:

& emsp& emsp当文件改变时,它触发同步,但是触发同步需要依赖于文件状态改变的功能。

inotify & emsp& emspInotify是系统内核的监控服务,属于操作系统内核特有的机制,用于监控文件的信息变化。

检查内核是否支持inotify;

[root @ la P1 data]# ls -l/proc/sys/fs/inotify ls:无法访问“”:没有此类文件或目录/proc/sys/fs/inotify:total 0-rw-R-R--1 root root root 0 Oct 24 23:39 max _ queued _ events -rw-R---1 root root 0 Oct 24 23:39 max _ user _ instances -rw-R---1 root 0 Oct 23

max _ queued _ events:inotify事件队列最大长度。如果该值太小,将会发生事件队列溢出错误。默认值为16384。建议在生产环境中增加,例如:327679max_user_instances:每个用户创建的inotify实例的最大值。默认值:128max_user_watches:可以监控的文件总数(inotifywait单个进程),默认值:8192,建议放大大小:& emsp& emspproc中的参数可以通过sysctl工具更改。

inotify -工具包的主要工具:inotifywait:等待特定的文件系统事件(打开、关闭、删除等。)发生在被监控的文件或目录上,常用于实时同步目录监控(主要使用该工具)。inotifywatch:统计被监控文件系统的使用情况,统计文件系统事件的数量。

Inotifywait命令:inotify等待[选项]文件1[文件2][文件3] [...]选项:

-m,--monitor始终保持事件监控。-d,--daemon作为守护进程执行,类似于-m,与-o,-r,--recursive一起用于递归监控目录数据信息的变化。-q,--quiet输出少量事件信息--exclude & pattern & gt;指定要排除的文件或目录,实现--exclusionei

# 10 . 0 . 0 . 11[root @ la P1 data]# cat file 1[root @ la P1 data]# echo hello & gt;file 1[root @ la P1 data]# ll file 1-rw-R--R--1 root root 6 Oct 24 23:50 file 1[root @ la P1 data]# chmod 666 # 10 . 0 . 0 . 11[root @ la P1 data]# inofywait -mfile 1指定的事件类型设置监视。watches established . file 1 open file 1 close _ no write,close file 1 modify file 1 open file 1 modify file 1 close _ write,closefile1 attribinitifywait-e选项。

Create #文件或目录Create delete #文件或目录被删除,modify #文件或目录内容被写入attrib #文件或目录属性被更改,close_write #文件或目录被关闭,close_nowrite #文件或目录在打开写入模式后被关闭,close #文件或目录在打开只读模式后被关闭, Open #打开文件或目录,而不考虑读取或写入模式lsdir #浏览目录内容moved_to #文件或目录被移动到受监视的目录moved_from #文件或目录从受监视的目录移动#文件或目录触发事件访问#文件或目录内容被读取delete_self #或文件目录被删除,目录本身被删除。 Unmount # Unmount inotifywait的--timefmt时间格式。

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

%T #输出时间格式中定义的时间格式信息,并通过--timefmt选项语法格式指定时间信息。%w #当事件发生时,被监视文件或目录的名称信息等同于dirname%f #事件发生时在被监视目录中触发事件的文件或目录的名称信息。否则,它为空,这相当于basename%e #显示事件信息。默认情况下,不同的事件用逗号分隔%Xe #显示发生的事件的信息,不同的事件用X分隔,例如,monitoring/data/directory changes。

[root @ centos 8 data]# inotify wait -M --time fmt " % Y-% M-% d % H:% M:% S " --format = " % T % w---% f事件:%;e "/数据设置手表。手表建立. 2022-10-24 17:12:57/data/---事件:打开;isdir 2022-10-24 17:12:57/data/---event:ACCESS;isdir 2022-10-24 17:12:57/data/---event:CLOSE _ NOWRITE;关闭;isdir 2022-10-24 17:13:06/data/---file 3事件:create 2022-10-24 17:13:06/data/---file 3事件:op EN2022-10-24 17:13:06/data/----file 3事件:attrib 2022-10-24 17:13:06/data/-4关闭

Rsync工具

Rsync可以以三种方式工作:本地模式:在本地文件系统上同步。命令行语法格式如上”。本地& quot数据段的格式基于传统的ssh协议。本地主机使用远程shell和远程主机通信作为独立的服务,本地主机通过网络套接字连接到远程主机上的rsync守护进程。差异:

& emsp& emsp前两种方法的本质是通过本地或远程shell,而第三种方法是在远程主机上运行rsyncd服务,这样它就在一个端口上侦听并等待客户端的连接。

本地模式:

rsync[选项...] SRC...[DEST]举个例子:

[root @ lap 1 data]# rsync file 1 file 111[root @ lap 1 data]# ls file 1 file 111 file 2基于传统的ssh协议使用格式:

pull:rsync[选项...] [user @]主机:src...[目标]推送:rsync[选项...] src...[user @] host: dest例如:

rsync -av--delete/data/10 . 0 . 0 . 12:/back #不写用户名。默认情况下,当前主机的用户被用作独立的服务:

pull:rsync[选项...] [user @] host:: src...rsync[选项...]rsync://[user @]host[:port]/src...[dest] #协议,效果相当于上面的push: rsync [option...] src...[user @] host:: destrsync [option...] src...rsync://[user @]host[:port]/destr sync常见选项:

-v:显示rsync过程中的详细信息。可以用“-vvvv”获取更详细的信息。-a --存档:存档模式,即文件属性的递归传输和保存。-t --times:保留mtime属性。强烈建议随时添加“-t”,否则目标文件mtime会设置为系统时间,导致下次更新。如果发现mtime不同,则增量传输无效。--删除:SRC是同步DEST的主要方法。删的多,补的少。rsync软件包:

官方网站:http://rsync.samba.org/

软件包:rsync、rsync -守护程序(CentOS 8)

服务文件:/usr/lib/systemd/system/rsyncd . service

配置文件:/etc/rsyncd.conf

端口:873/tcp

rsync服务器的两种实现方式& emsp& emspRsync可以用作服务器或客户端程序。

方法一:通过rsync守护进程实现rsync服务#在备份服务器中启动rsync进程[root @ bakup _ server ~]# rsync --daemon # --daemon选项表示作为守护进程启动无法解析配置文件:/etc/ Rsyncd.conf #需要此配置文件才能成功启动[root @ bakup _ server ~]# touch/etc/rsyncd . conf #需要创建此配置文件才能正常启动[root @ bakup _ server ~]# rsync --daemon #启动rsyncdress:Port list EN 0 5 0.0 . 0.0:873 0 . 0 . 0 . 0:* #设置rsync服务器的共享信息[root @ bakup _ server ~]# cat/etc/rsyncd . conf #等号之间可以有空格[backup] #定义名称path =/ Bakup #真实路径,存储共享文件的路径(与rsync共享此目录,共享的名称为Bakup)只读=否#指定读/写 默认的[root @ bakup _ server ~]# rsync --daemon #更改配置文件,需要重启守护进程才能生效[root @ bakup _ server ~]# set facl -m u:nobody:rwx/bakup/#指定目录为nobody权限,默认情况下用户以nobody身份访问该目录。 使用客户端连接rsync备份服务器:# format rsync rsync://host或rsync host::客户端对服务器的看法:[root @ data _ server ~]# rsync rsync://10 . 0 . 0 . 12 #以协议形式访问备份#共享名[root @ data _ server ~]# rsync 10 . 0 . 0 . 12::# Access backup #作为服务实现客户端将文件复制到rsync共享的目录下。注意:无论你是谁,转移的时候都会被映射为无名小卒。这样就不用写用户名了[root @ data _ server ~]# rsync/root/anaconda-ks . CFG root @ 10 . 0 . 0 . 12::backup[root @ bakup _ server bakup]# ll total 8-rw--------1 nobody nobody 1526 Oct 24 17:48 anaconda-ks . CFG -rw-R--1 nobody 658 Oct 24 17:

将rsync作为独立服务运行,实现验证功能& emsp& emspRsync-daemon:安装这个包后会提供一个service服务,它会监听自己的独立端口。

[root @ bakup _ server ~]# yum install rsync -daemon installed:rsync -daemon -3 . 1 . 3-9 . el8 . no arch[root @ bakup _ server ~]# Systemctlenable rsyncd . servicecreatesymlink/etc/systemd/system/multi -user . target . wants/rsyncd . service→/usr/lib/systemd/system/rsyncd . service . Description:

& emsp& emsp默认情况下,Rsync在传输文件时不需要验证。

启用rsync认证功能的方法:

[root @ backup -centos 8 ~]# dn F-y installer sync -daemon #安装服务时自动创建rsync服务器的配置文件[root @ centos 8 ~]# VI/etc/rsyncd . conf uid = root #远程用户映射到本地计算机的用户。默认情况下,没有人指定哪个用户访问共享目录,并将其指定为生成文件的所有者。默认情况下,nobodygid = root #和nobody#port = 874 #可以指定非标准端口。默认873/TCP # USE ch root = Nomax Connections = 0 #无限制最大连接数忽略错误#如果有一些错误,跳过这些错误exclude = lost+found/ #跳过指定目录,不复制日志文件=/var/log/rsyncd . log # PID file =/var/run/rsyncd . PID # PID file lock file =/var/run/rsyncd . lock #锁文件反向查找= no #拒绝反向解析, 并且不解析ip到主机名#hosts allow = 10.0.0.0/24 #允许连接的主机[backup] #每个模块名称对应不同的路径目录,如果同名生效后的模块,共享名path = /data/backup/ #共享的真实路径comment = backup dir #描述信息read only = no #默认为yes,即只读auth users = rsyncuser #默认情况下, anonymous可以访问rsync服务器用于验证的帐号,只有这个帐号可以访问secrets file = /etc/rsync.pas #存储密码的文件格式:username: password,例如:password verification。

[root @ centos 8 ~]# yum install rsync -daemon[root @ centos 8 ~]# system CTL enable rsyncd --now[root @ centos 8 ~]# cat/etc/rsyncd . confu id = root GID = root max connections = 0 ignore errors clude = lost+found/log file =/var/log/rsyncd . logpid file =/var/run/rsyncd . PID lock file =/var/run/rsyncd . lock reverse lookup = no[back]path =/data/etc/rsync . pas[root @ centos 8 ~]# chmod 600/etc/rsync . pas #密码文件权限必须修改,否则客户端访问时会提示密码错误。客户端访问:[root @ centos 8 ~]# rsync/etc/fstabtom @ 10 . 0 . 0 . 12::backup password:#交互输入tom的密码或:[root @ centos 8 ~]# rsync/root/Anaconda -ks . CFG rsync://Tom @ 10 . 0 . 0 . 12/backup password:注意:默认情况下,当前系统的用户可以预先创建一个文件,并将密码放入该文件中。

#共享目录的非交互视图[root @ centos 8 ~]# echo " red hat " >:/etc/rsync . pas #客户端存储rsync的密码信息[root @ centos 8 ~]# chmod 600/etc/rsync . pas #密码文件权限修改(很有必要,否则会出错)测试:[root @ centos 8 ~]# rsync --Password -file =/etc/rsync

Inofy+rsync+shell脚本实现实时数据同步

工作原理:使用监控服务(inotify)监控同步数据服务器目录中信息的变化,发现目录中数据的变化,使用rsync服务推送到备份服务器。例子:inotify+rsync+shell脚本实现实时数据同步。

服务器:存储数据信息的服务器10.0.0.11备份服务器:存储备份信息的服务器10.0.0.12思路:使用inotidy监控事件是否发生变化,

[root @ centos 8 ~]# cat inotify _ rsync . sh #!/bin/bashSRC='/data/www/' #要同步的目录文件#注意最后/DEST='tom@10.0.0.12::backup' #同步到指定位置rpm -q rsync & amp & gt;/dev/dev/null | | yum -y install rsync # install rsync如果不存在,inotify wait-mrq--exclude = "。* \ .SWP " --TIME fmt ' % Y-% M-% d % H:% M:% S ' --format ' % T % w % f ' -e create,delete,moved_to,close_write,attrib ${SRC} |读取日期时间目录文件时。DOPATH = $ {dir} $ {file} #要同步的文件RSYNC -AZ --DELETE --password -file =/etc/RSYNC . pas $ src $ dest & & amp;echo "在${DATE}的${TIME},通过rsync备份了文件$FILEPATH " >& gt/var/log/changelist.logdone#通过DATE TIME DIR文件的四个变量记录变更日期和事件目录文件。就是这样。本文介绍了使用inotify和rsync服务实时同步Linux数据。关于Linux数据实时同步的更多信息,请搜索主机频道zhujipindao之前的文章。或者继续浏览下面的相关文章。希望大家支持主机频道zhujipindao。以后多来com!

未经允许不得转载:主机频道 » Linux inotify和rsync服务实现实时数据同步的原理分析

评论 抢沙发

评论前必须登录!