rsync+inotify实时同步数据

news2024/11/24 7:19:43

一、相关简介

1、rsync(remote synchronize)
rsync是 Liunx/Unix 下的一个远程数据同步工具,它可通过 LAN/WAN 快速同步多台主机间的文件和目录。
  Linux 之间同步文件一般有两种方式,分别是 rsync 与 scp ,scp 相当于复制,粘贴,文件不存在则新建,若存在则覆盖,而 rsync 则是比较两边文件是否相同,不相同才进行更新。所以 rsync 和 scp 在文件夹存在的情况下差异很大,因为 scp 是复制和覆盖,从执行性能来说 rsync 更胜一筹。而且 rsync 能将文件夹、文件的权限等信息也保存下来。
  但是 rsync 也有一定的缺点,在同步数据时,需要扫描所有文件后进行比对,如果文件数量相当大时,扫描文件就非常耗费时间和性能。其次,rsync 不能够实时监测、同步数据,这就可能导致一些时间段数据不一致。解决这个问题的方法就是实时同步,所以需要使用 rsync+inotify 组合。

2、inotify
  inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从2.6.13版本起,加入了对 inotify 的支持。通过 inotify 可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,inotify-tools 便可以监控文件系统下文件的各种变化情况了。

二、前期准备
1、关闭selinux、防火墙(或防火墙开端口)
[root@localhost ~]# setenforce 0
[root@localhost ~]# vi /etc/sysconfig/selinux
在这里插入图片描述

2、检查内核是否支持inotify
[root@localhost ~]# ll /proc/sys/fs/inotify
若出现以下三个文件表示系统默认支持inotify
在这里插入图片描述

3、整体架构示意图
在这里插入图片描述

三、同步节点部署(rsync)
注:一般系统都是会预安装rsync服务,如果没安装,可直接使用yum install -y rsync
1、编写配置文件
[root@localhost ~]# vi /etc/rsyncd.conf
添加以下内容:

uid = nobody
gid = nobody
use chroot = yes
max connections = 10
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup]  #共享模块名称,可自定义
path = /usr/local/  #将数据同步到指定目录下
comment = this is rsync for nginx  #共享模块备注,根据需求自定义
ignore errrors
read only=no
write only=no
hosts allow=192.168.7.98 #源服务器节点IP
hosts deny=*
list=false
uid=root
gid=root
auth users=ffs #服务器之间相互认证的用户名,可自定义,但是需与源服务器保持一致
secrets file=/etc/rsync.password #服务器之间用于认证的密码文件

[root@localhost ~]# vi /etc/rsync.password

ffs:123456

在这里插入图片描述

[root@localhost ~]# chmod 600 /etc/rsync.password
注:密码文件的权限必须设置为600,否则会认证失败
2、启动服务
[root@localhost ~]# rsync --daemon --config=/etc/rsyncd.conf
注:
(1)可添加系统自启动文件
[root@localhost ~]# echo “/usr/bin/rsync --daemon” >> /etc/rc.local
[root@localhost ~]# chmod 755 /etc/rc.local
(2)若开启了防火墙,则需开放对应端口
[root@localhost ~]# firewall-cmd --add-port=873/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
3、查看rsync服务是否有启动
在这里插入图片描述

四、源服务器节点部署(rsync+inotify)
1、配置rsync配置文件
[root@localhost ~]# vi /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
max connections = 10
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup]  #共享模块名称,可自定义
path = /usr/local/ #路径只写到需要同步的文件夹上一级,脚本会自动将整个目录同步过去
comment = this is rsync for nginx #共享模块备注,根据需求自定义
ignore errrors
read only=no
write only=no
hosts allow=192.168.7.97 #同步节点IP
hosts deny=*
list=false
uid=root
gid=root
auth users=ffs #用户名与源服务器一样
secrets file=/etc/rsync.password #密码与源服务器一样,此文件只需要写密码,不需要用户名

[root@localhost ~]# vi /etc/rsync.password

123456

在这里插入图片描述

[root@localhost ~]# chmod 600 /etc/rsync.password
2、启动服务
[root@localhost ~]# rsync --daemon --config=/etc/rsyncd.conf
注:
(1)可添加系统自启动文件
[root@localhost ~]# echo “/usr/bin/rsync --daemon” >> /etc/rc.local
[root@localhost ~]# chmod 755 /etc/rc.local
(2)若开启了防火墙,则需开放对应端口
[root@localhost ~]# firewall-cmd --add-port=873/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
3、安装inotify
[root@localhost ~]# yum install -y inotify-tools
注:inotify依赖于epel源,若没有该yum源,则需进行yum -y install epel-relese操作
五、在源服务器上创建用于rsync同步的shell脚本
[root@localhost work]# cat inotify.sh

#!/bin/bash
host1=192.168.7.97  #同步节点IP
src=/usr/local/ffmpeg_flie/  #源服务器需要同步到同步节点的数据目录
dst1=backup  #rsync配置文件中定义的共享模块名称
user1=ffs  #rsync配置文件中定义的用户名
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read files
do        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.password $src $user1@$host1::$dst1 > /dev/null 2>&1
       echo "${files} was rsynced." >> /tmp/rsync.log 2>&1
done

[root@localhost work]# chmod 755 inotify.sh
在后台运行该脚本
[root@localhost work]# nohup inotify.sh &
注:有需要可将其加入系统自启动文件中
[root@localhost work]# echo “/root/work/inotify.sh &” >> /etc/rc.local

以上步骤完成后,则可测试实时备份是否成功,在192.168.7.98的/usr/local/ffmpeg_flie/目录下创建test.txt文件,随后在192.168.7.87的/usr/local/ffmpeg_flie/目录下查看是否有同步过来(删除文件同理)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1044853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小红书水下笔记是什么意思,内容收录原理是什么

纵观小红书平台,笔记的收录率与曝光率直接影响着品牌的传播结果。而最近,平台对于水下笔记的严查和打击,日益凸显。如何在利用水下笔记传播时,尽可能的提高收录率?今天来分享下小红书水下笔记是什么意思,内容收录原理…

亚马逊评论为什么重要?亚马逊Review操作技巧有哪些?

我们为什么要做review 1. 提高页面权重 一般页面有三个部分构成标题,关键词,描述review 可以很好地充当一个描述的角色,为页面提升权重我们会发现有些评论全部是视频,但是却可以推他的关键词到他的首页,因为视频带来的…

Linux 常见问题

1. 使用 sudo 命令时,提示 is not in the sudoers file. 是由于对应用户没有添加到 sudoers 文件中,可以在该文件中指定用户权限。运行以下命令即可打开该文件: visudo 添加上对应用户的权限 Ctrl x 退出保存即可。 2. Debian 新建的普通用…

阿里云SSL证书申请

目录 1、登录阿里云2、搜索ssl证书3、进入创建证书页面4、创建证书(如果没有名额需要购买)5、申请ssl证书绑定的域名6、等待审核7、下载ssl证书 1、登录阿里云 网址:https://account.aliyun.com/login/login.htm 2、搜索ssl证书 3、进入创…

【算法基础】栈和队列及常见变种与使用,双栈、动态栈、栈的迭代器,双端队列、优先队列、并发队列、延迟队列的使用

目录 一、栈(Stack) 二、 队列(Queue) 三、栈和队列的常见变种与使用 3.1 栈的常见的变种与使用 3.1.1 最小栈(Min Stack) 3.1.2 双栈(Two Stacks) 3.1.3 固定大小栈&#xf…

前端知识总结

在前端开发中,y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1,并将自增后的值赋给变量y。 具体来说,x是一种后缀自增运算符,表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…

云原生之高级Go工程师养成记(一):绪论及Go环境安装

文章目录 一、绪论1.1 本专栏适合学习的群体1.2 为什么选择 Go1.3 Go 语言的优势1.4 杂谈 二、Go 开发环境搭建2.1 在 Windows 下安装 Go2.2 在 Linux 下安装 Go2.3 安装 GoLand2.4 搭建 GoLand 环境2.5 第一个 Go 程序 “Hello World”2.6 补充:VSCode 配置 Go 环境…

dynamic-datasource + parallelStream数据源切换失效

记录一次使用动态数据源java8的ParallelStream并行流导致的数据源切换失效问题,先看一下异常记录: 代码如下: Service DS(DataSourceConst.ORDER) public class OrderService {Resourceprivate VendorService vendorService;public void get…

生态兼容性进一步提升!白鲸开源 WhaleStudio 与火山引擎ByteHouse完成产品互认

数据作为新型生产要素,已快速融入生产、分配、流通、消费和社会服务管理等各环节,深刻改变着生产方式、生活方式和治理方式。越来越多企业也在尝试充分利用数据要素,开辟全新发展路径,进一步实现业务价值提升。 在数字化转型的大…

《C++ Core Guidelines解析》深入理解C++

前言 在计算机编程领域,C一直以其高效、灵活和强大而闻名。然而,C作为一种复杂的编程语言,如果没有正确的理解和使用,很容易导致软件质量的下降和性能问题的出现。幸运的是,一本名为《CCore Guidelines解析》的书籍为…

【RocketMQ】(九)主从同步实现原理

RocketMQ支持集群部署来保证高可用。它基于主从模式,将节点分为Master、Slave两个角色,集群中可以有多个Master节点,一个Master节点可以有多个Slave节点。Master节点负责接收生产者发送的写入请求,将消息写入CommitLog文件&#x…

【数据结构】顺序栈及其基本操作

顺序栈 栈的数组实现(创建) 栈的初始化栈的增加(压栈)栈的删除(弹栈)栈的查询栈的判空和判满 1. 顺序栈 栈是一种数据结构,其主要特点是后进先出,相当于我们在瓶子里面放东西&am…

golang工程——protobuf使用及原理

相关文档 源码:https://github.com/grpc/grpc-go 官方文档:https://www.grpc.io/docs/what-is-grpc/introduction/ protobuf编译器源码:https://github.com/protocolbuffers/protobuf proto3文档:https://protobuf.dev/programmin…

【信创】麒麟v10(arm)-mysql8-mongo-redis-oceanbase

Win10/Win11 借助qume模拟器安装arm64麒麟v10 前言 近两年的国产化进程一直在推进,基于arm架构的国产系统也在积极发展,这里记录一下基于麒麟v10arm版安装常见数据库的方案。 麒麟软件介绍: 银河麒麟高级服务器操作系统V10 - 国产操作系统、银河麒麟、中…

Tomcat(HTTP服务器)下载以及认识

Tomcat是java程序员写网页后端所用到的一个经典工具 一. 搜索Tomcat找到官网,在Download下找到Tomcat8(虽然已经有了更新的版本,但经典版的更稳定) 二. 找到Core,点击zip便能下载Tomcat的压缩包(完全绿色&…

使用API Monitor工具巧妙探测C++程序中监听某端口的模块

目录 1、问题说明 2、API Monitor工具介绍 2.1、API Monitor主要用途 2.2、如何使用API Monitor工具 3、使用API Monitor监测程序对bind函数的调用,定位启用2620端口的模块 3.1、为啥要监控socket API函数bind 3.2、编写演示代码进行说明 3.3、使用API Moni…

COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”

COTS 使用“不再做修理或改进”的模式出售的商务产品 COTS即Commercial Off-The-Shelf 翻译为“商用现成品或技术”或者“商用货架产品”,指可以采购到的具有开放式标准定义的接口的软件或硬件产品,可以节省成本和时间。 中文名 商用现成品或技术 外文…

垂直行业大模型“封神”背后,AI数据服务走入“深水区”

图源:Unsplash 文 | 智能相对论 作者 | 沈浪 由ChatGPT掀起的这股大模型浪潮,从通用领域席卷垂直领域。现阶段,越来越多的行业都在开发专用垂直细分赛道的大模型产品,以加速AI应用的场景化落地进程。 譬如,在电商领…

MASA MAUI iOS 文件下载与断点续传

文章目录 背景介绍方案及代码1、新建MAUI项目2、建立NSUrlSession会话连接3、使用NSUrlSessionDownloadTask 创建下载任务4、DidWriteData 监听下载5、DidFinishDownloading 完成下载6、CancelDownload (取消/暂停)下载7、ResumeDownload 恢复下载8、杀死进程-恢复下载 效果图总…

界面组件DevExpress WPF v23.2新功能预览 - 更轻量级的主题

本文主要描述了DevExpress WPF即将在几个月之后发布的v23.2中包含的新功能,持续关注我们获取更多最新资讯哦~ P.S:DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强…