【Linux】企业实战项目rsync+inotify实现实时同步(inotify安装及介绍、rsync + inotify 实现实时同步、rsync + inotify实现开机自启 )

这篇具有很好参考价值的文章主要介绍了【Linux】企业实战项目rsync+inotify实现实时同步(inotify安装及介绍、rsync + inotify 实现实时同步、rsync + inotify实现开机自启 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、企业实战项目rsync+inotify实现实时同步

rsync与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了

何为 inotify

  • Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

  • Inotify 监控文件系统操作,比如读取、写入和创建,基于事件驱动,可以做到对事件的实时响应,高效,而且没有轮询造成的系统资源消耗

  • 在前面有讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

inotify能监控非常多的文件系统事件,通过监控这些事件来监控文件是否发生变更,然后通过rsync来更新发生变更的文件

inotify安装及介绍

安装

①检查当前系统内核是否支持 inotify

方法一:

若内核版本大于 2.6.13 则支持;

uname -r

方法二:

若输出 CONFIG_INOTIFY_USER=y,则支持;

grep INOTIFY_USER /boot/config-$(uname -r)
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

②安装

yum install epel-release -y
yum install inotify-tools -y
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

命令

inotify-tools 包含了两个命令:inotifywait 与 inotifywatch。

  1. inotifywait:在被监控的文件或目录上等待特定文件系统事件发生,执行后处于阻塞状态,适合在shell脚本中使用。

阻塞状态 (Blocked):阻塞状态是线程因为某种原因放弃CPU的使用权,暂时停止运行。
  1. inotifywatch:用于收集文件系统的统计数据,例如发生了多少次 inotify 事件,某文件被访问了多少次等等。

内核参数

/proc/sys/fs/inotify/ 目录下包含三个文件,分别设置 inotify 相关的三个内核参数。

  1. max_queued_events:inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。

  1. max_user_instances:每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。

  1. max_user_watches:每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。如果监控的文件数目巨大,需要根据情况适当增加此值。

默认设置:

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

事件

inotify 监控的文件系统事件:

  1. access:文件被访问。

  1. modify:文件被修改。

  1. attrib:文件元数据被修改。

  1. open:文件被打开。

  1. create:在被监控的目录中创建了文件或目录。

  1. delete:删除了被监控目录中的某个文件或目录。

  1. ......(还有更多事件)

注意:对文件的某个操作往往会触发多个事件,用户应用程序需要自己防止做出重复响应。

实践

不指定监控事件,分别打开两个 shell 窗口,使用 inotifywait 和 inotifywatch 监控某个目录:

mkdir /var/inotify-test
inotifywait -m /var/inotify-test
#监控这个文件有没有发生变化

inotifywatch -v /var/inotify-test
#显示目录的详细信息

在此目录下创建两个文件:

touch /var/inotify-test/file1
touch /var/inotify-test/file2

看看 inotify 监控发生了什么:

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

其中 inotifywait 的信息是在进程运行过程中输出的,而 inotifywatch 的信息是在进程结束时输出的。

 以上测试没有指定监听事件,所以监听的是所有的事件,可以通过 -e 选项来指定监听事件,如:

inotifywait -m -e create,modify,delete /var/inotify-test
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

rsync + inotify 实践

项目环境规划

客户端服务器(运行业务应用,rsync工具包需要安装,但不需要启动服务,需要使用inotify监控事件);

服务端服务器(备份服务器,rsync安装并启动后台进程服务,不需要运行inotify);

部署sync+inotify同步/runtime目录至目标服务器的/ysd/下;

目标服务器rsync配置,也可以使用之前的

【注意!配置所有文件时最好手敲一遍,不然会报莫名其妙的错误!!不要直接粘贴!!!亲测有效!!!!】

不使用之前的,现配:

#目标服务器rsync配置


vi /etc/rsyncd.conf

log file = /var/log/rsyncd.log # 日志文件位置,启动rsync后自动产生这
个文件,无需提前创建
pidfile = /var/run/rsyncd.pid # pid文件的存放位置
lock file = /var/run/rsync.lock # 支持max connections参数的锁文件
secrets file = /etc/rsync.pass # 用户认证配置文件,里面保存用户名称和密码,必须手动创建这个文件

[etc_from_client] # 自定义同步名称
path = /ysd/ # rsync服务端数据存放路径,客户端的数据将同步至此目录
comment = sync etc from client
uid = root # 设置rsync运行权限为root
gid = root # 设置rsync运行权限为root
port = 873 # 默认端口
ignore errors # 表示出现错误忽略错误
use chroot = no # 默认为true,修改为no,增加对目录文件软连接的备份
read only = no # 设置rsync服务端为读写权限
list = no # 不显示rsync服务端资源列表
max connections = 200 # 最大连接数
timeout = 600 # 设置超时时间
auth users = admin # 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 172.16.12.128 # 允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.1.1 # 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
//创建用户认证文件
[root@131 ~]# echo 'admin:123456' > /etc/rsync.pass
[root@131 ~]# cat /etc/rsync.pass
admin:123456
[root@131 ~]# chmod 600 /etc/rsync*

在源服务器(客户端)

[root@60 ~]# echo '123456' > /etc/rsync.pass
[root@60 ~]# chmod 600 /etc/rsync.pass

inotify.sh

#!/bin/bash

host=192.168.42.195 # 目标服务器的ip(备份服务器)
src=/runtime # 在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在)
des=etc_from_client # 自定义的模块名,需要与目标服务器上定义的同步名称一致
password=/etc/rsync.pass # 执行数据同步的密码文件
user=admin # 执行数据同步的用户名
inotifywait=/usr/bin/inotifywait
$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
| while read files;do
rsync -avzP --delete --timeout=100 --passwordfile=${password} $src $user@$host::$des
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done

//让其在后台运行,并开机自启
[root@60 ~]# chmod +x /etc/rc.d/rc.local
[root@60 ~]# ll /etc/rc.
rc.d/ rc.local
[root@60 ~]# ll /etc/rc.d/rc.local
-rwxr-xr-x. 1 root root 474 3月 24 2020 /etc/rc.d/rc.local
[root@60 ~]# vim /etc/rc.d/rc.local
# that this script will be executed during boot.
nohup /root/inotify.sh &
touch /var/lock/subsys/local
########################
用你的脚本绝对路径替换/root/inotify.sh
########################
[root@NAT1 ~]# chmod 755 /root/sh/inotify_rsync.sh
************************
一定要给脚本也加上执行权限
************************

[root@localhost ~]# ps -ef|grep inotify
root 1077 1 0 20:37 ? 00:00:00 /bin/sh
/scripts/inotify.sh
root 1085 1077 0 20:37 ? 00:00:00
/usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T
%w%f%e -e modify,delete,create,attrib /runtime
root 1086 1077 0 20:37 ? 00:00:00 /bin/sh
/scripts/inotify.sh
root 6283 3995 0 20:37 pts/0 00:00:00 grep --
color=auto inotify

inotify的相关参数说明:
-m 监视器 永远监听事件。没有此选项,inotifywait 将在一个后退出事件已接收。
-r 递归监视目录递归。
-q 安静 少打印(仅打印事件)。

这里我使用之前的配置

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

部署rsync+inotify同步/root/full目录至目标服务器的/backup/下;

#!/bin/bash

host=192.168.198.140
src=/root/full
dest=backup
password=/etc/rsync.password
user=rsync_backup
inotifywait=/usr/bin/inotifywait

$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e 'modify,delete,create,attrib' $src |while read files;do rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$dest;echo "${files} was rsynced!" >> /tmp/rsync.log 2>&1;done
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

【注意】下图所示高亮部分必须相同;

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

举例:

①首先在客户端上运行上面运行的shell脚本,使它进入监控状态:

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

②重开一个客户端创建一个文件(为什么要重开一个客户端?因为客户端在进入到监听状态时就不能在进行操作了)

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

③执行脚本的客户端变成了蓝色,说明运行成功了,监听到了;我们点开查看一下;如图所示显示了有一个新文件1.txt

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

④我们到实时同步目录/backup下查看;有一个full目录,列出目录看到下面有一个1.txt文件

我们当时对客户端下/root/full目录进行了实时同步,同步到了服务端192.168.198.140上的/backup 目录下

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

⑤查案客户端下的日志

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

⑥实现开机自启

1)给客户端/etc/rc.d/rc.local文件执行权限x

[root@60 ~]# chmod +x /etc/rc.d/rc.local

2)在客户端/etc/rc.d/rc.local文件添加脚本信息

[root@60 ~]# vim /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

nohup /root/sh/inotify_rsync.sh &
touch /var/lock/subsys/local

########################

用你的脚本绝对路径替换 /root/sh/inotify_rsync.sh

########################

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

3)给客户端上的脚本也加上执行权限x

[root@NAT1 ~]# chmod 755 /root/sh/inotify_rsync.sh

4)查看是否为可执行文件

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

5)重启客户端

6)如果你之前在服务端基于rsync-daemon认证认证了rsync就使用下面的命令开启守护模式;

(如果没有认证可以参考我的博客:【Linux】Rsync基于rsync-daemon认证的使用(rsync服务端与客户端发配置、排错思路、使用示例、优缺点及使用场景)_滨河四季的博客-CSDN博客)

[root@NAT-139 ~]# rsync --deamon

7)查看rsync是否开启守护模式,如下图所示则已经开启;

[root@NAT-139 ~]# ps -ef |grep rsync
inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

8)关闭服务端上的防火墙;避免客户端连接不上;

[root@NAT-139 ~]# iptables -F
[root@NAT-139 ~]# systemctl stop firewalld
[root@NAT-139 ~]# setenforce 0

9)在客户端实时同步目录下创建新文件;

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

10)查看服务端背负目录,可以看到它是有了一个文件1.txt文章来源地址https://www.toymoban.com/news/detail-762868.html

inotify,Linux常用工具及服务,linux,服务器,运维,Powered by 金山文档

到了这里,关于【Linux】企业实战项目rsync+inotify实现实时同步(inotify安装及介绍、rsync + inotify 实现实时同步、rsync + inotify实现开机自启 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 企业级开发项目实战——基于RabbitMQ实现数据库、elasticsearch的数据同步

    1、商品上架时:search-service新增商品到elasticsearch 2、商品下架时:search-service删除elasticsearch中的商品 数据同步是希望,当我们商品修改了数据库中的商品信息,索引库中的信息也会跟着改。在微服务中数据库和索引库是在两个不同的服务中。如果,商品的服务,向es的服务中

    2024年02月12日
    浏览(70)
  • rsync+inotify-tools文件传输

    目录 rsync rsync概述 rsync优缺点 rsync参数 rsync命令 rsync同步源 linux 安装rsync 安装rsync服务端 安装rsync客户端 windows 安装rsync rsync实践 inotify-tools  inotify-tools概述   innotify-tools 命令、参数、事件  rsync客户端安装inotify-tools  innotify-tools实践 rsync+inotify-tools实践 加入开机自动执行

    2024年03月16日
    浏览(44)
  • linux文件数据同步--实现文件共享与备份(nfs+rsync+httpd+dns)

    目录 实验目地: 实验需求: 各项服务位置以及作用: 整体实验过程: 详细配置: Rsync服务: Web服务:  NFS服务 DNS服务 在整体实验中,使客户机在网页可以看到由服务器A上传的文件,并且A服务器有一台备份服务器。 四台虚拟服务器与一台客户机,并关闭防火墙 服务器

    2024年02月03日
    浏览(49)
  • Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)

    fs.inotify.max_user_watches 参数是用于控制 Linux 内核中 inotify 子系统的观察者数量限制。inotify 是一种文件系统监控机制,它可以用于检测文件或目录的变化,并在事件发生时通知相关的应用程序。 具体而言, fs.inotify.max_user_watches 参数限制了每个用户所能创建的 inotify 实例的数量

    2024年02月06日
    浏览(42)
  • 【Linux】Rsync远程同步及备份工具(Rsync简介、Rsync安装、rsync认证方式)

    rsync(Remote synchronization)是Liunx/Unix下的一个 远程数据同步工具 。 它可通过LAN/WAN(局域网/广域网) 快速同步多台主机间的文件和目录 ,并适当利用rsync算法(差分编码)以减少数据的传输。 rsync算法并不是每一次都整份传输,而是 只传输两个文件的不同部分 ,因此其传输

    2024年02月13日
    浏览(39)
  • Linux服务器同步Windows目录同步-rsync

    最近需要,Linux的服务器同步Windows的一个目录。查了下,大概有三种方法:网盘同步;rsync同步;挂载目录。 网盘同步,可以选择搭建一个Nextcloud 。但是问题在于,我需要的是,客户端和服务端的同步,而不是客户端和客户端的同步。服务端没有界面,安装客户端的网盘软件

    2024年02月11日
    浏览(62)
  • Linux 文件实时备份 rsync+lsyncd

    lsyncd官网 目的是每次只把新修改的同步,而不是全量备份。 Rsync(同步):将一个服务器的一个文件夹的内容提交到另外一个服务器的文件夹 lsyncd(差异检测并调用rsync):把差异的找出来,然后运行脚本 采用的是推送模式,即需要备份文件的服务器(客户端)向备份服务

    2024年02月09日
    浏览(46)
  • Linux下的scp 、rsync两种命令同步文件

    scp 还非常不占资源,不会提高多少系统负荷,在这一点上, rsync 就远远不及它了。虽然 rsync比scp 会快一点,但当小文件众多的情况下, rsync 会导致硬盘I/O非常高,而scp基本不影响系统正常使用。 语法 示例 在Linux系统中, rsync 是一种功能强大且广泛使用的文件同步工具。它

    2024年02月14日
    浏览(40)
  • Linux服务器与群晖rsync同步,linux服务器通过rsync的方式备份数据到群晖

    准备需要备份linux服务器的配置,安装rsync即可 1.登录群晖服务器,点击套件中心  2.点击红色框框,跳转到套件界面 3.点击Active Backup for Business 4.点击文件服务器-添加服务器-选择rsync服务器-下一步 5.填写远程服务器信息 6.在群晖系统上创建备份任务 打开群晖的Active Backup fo

    2024年02月10日
    浏览(60)
  • !!!!建议收藏 Rsync项目实践:数据备份 (文件同步到服务器)

    基本备份要求 准备三台服务器,两台web服务器、一台rsync备份服务器 主机名分别为web01、web02、backup [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLf7EhNj-1666099690586)(…/…/图片/image-20221018164708556.png)] 客户端需求 1.客户端每天凌晨01点在服务器本地

    2023年04月08日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包