rsync+inotify实时同步数据

一、相关简介

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>&1echo "${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.rhkb.cn/news/142725.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端性能优化汇总

1.减少HTTP请求次数和请求的大小 (三大类) 文件的合并和压缩:(1)(6) 延迟加载:(3)(4) 用新的文件格式代替传统文件格式:&a…

基于LQR算法的一阶倒立摆控制

1. 一阶倒立摆建模 2. 数学模型 倒立摆的受力分析网上有很多,这里就不再叙述。直接放线性化后的方程: F (Mm)x″-mLφ″ (ImL)φ″ mLx″ mgLφ(F为外力,x为物块位移,M,m为物块和摆杆的质量,…

抽象轻松java

嗨嗨嗨! 没想到吧,出现了抽象轻松第4种语言系列(我也没想到) 简单的java程序,看完就懂的简单逻辑——购物车系统 购物车,首先要有商品吧,现实中的商品有什么属性? 名字&#xff0…

CSS详细基础(一)选择器基础

本帖开始,我们来介绍CSS——即,层叠样式表~ 层叠样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。简单的说,层叠就是对一个元…

PostgreSQL 查询某个属性相同内容出现的次数

查询某个数据库表属性 name 相同内容出现出现的次数,并按次数从大到小排序 SELECT name, COUNT(*) AS count FROM your_table GROUP BY name ORDER BY count DESC;示例 select project_id, COUNT(*) AS count from app_ads_positions group by project_id order b…

认证-authentication 和授权-authorization

就好比你可以刷卡进去xxx大厦(认证是本公司职员),但无法刷卡进入金融部门,或 实验部门(因为没有授权)

vite跨域proxy设置与开发、生产环境的接口配置,接口在生产环境下,还能使用proxy代理地址吗

文章目录 vite的proxy开发环境设置如果后端没有提供可以替换的/mis等可替换的后缀的处理办法接口如何区分.env.development开发和.env.production生产环境接口在生产环境下,还能使用proxy代理地址吗? vite的proxy开发环境设置 环境: vite 4…

玩转Mysql系列 - 第22篇:mysql索引原理详解

这是Mysql系列第22篇。 背景 使用mysql最多的就是查询,我们迫切的希望mysql能查询的更快一些,我们经常用到的查询有: 按照id查询唯一一条记录 按照某些个字段查询对应的记录 查找某个范围的所有记录(between and) …

忽视日志吃大亏,手把手教你玩转 SpringBoot 日志

一、日志重要吗 程序中的日志重要吗? 在回答这个问题前,笔者先说个事例: ❝ 笔者印象尤深的就是去年某个同事,收到了客户反馈的紧急bug。尽管申请到了日志文件,但因为很多关键步骤没有打印日志,导致排查进…

win10 使用cmake + mingw编译LAPACK

参考官网的内容: 适用于视窗的 LAPACK (utk.edu) 第一步下载好源码包: 配置好mingw的路径添加到环境变量中 gcc --version 出现这些就行了. 还有就是吧mingw中的mingw-make.exe重命名为make.exe 下载安装cmake 然后打开 1是源码路径,路径中一定要有CMakeLists.txt如果没…

Java多线程篇(6)——AQS之ReentrantLock

文章目录 1、管程2、AQS3、ReentrantLock3.1、lock/unlock3.1.1、lock3.1.2、unlock 3.2、一些思考 1、管程 什么是管程? 管理协调多个线程对共享资源的访问,是一种高级的同步机制。 有哪些管程模型? hansen:唤醒其他线程的代码…

渗透测试中的前端调试(一)

前言 前端调试是安全测试的重要组成部分。它能够帮助我们掌握网页的运行原理,包括js脚本的逻辑、加解密的方法、网络请求的参数等。利用这些信息,我们就可以更准确地发现网站的漏洞,制定出有效的攻击策略。前端知识对于安全来说,…

Pytorch单机多卡分布式训练

Pytorch单机多卡分布式训练 数据并行: DP和DDP 这两个都是pytorch下实现多GPU训练的库,DP是pytorch以前实现的库,现在官方更推荐使用DDP,即使是单机训练也比DP快。 DataParallel(DP) 只支持单进程多线程…

3、嵌入式系统的启动过程(BoodLoader)

1、系统启动过程 通电 - > 执行BootLoader - > 加载内核 - > 挂在根文件系统 - > 执行应用程序 Windows的启动过程: 通电 - > 执行BIOS - > 加载WinNT内核 - > 挂在文件系统 - > 执行应用程序 二、嵌入式系统的结构 BootLoader 1、BootL…

ElasticSearch - 基于 DSL 、JavaRestClient 实现数据聚合

目录 一、数据聚合 1.1、基本概念 1.1.1、聚合分类 1.1.2、特点 1.2、DSL 实现 Bucket 聚合 1.2.1、Bucket 聚合基础语法 1.2.2、Bucket 聚合结果排序 1.2.3、Bucket 聚合限定范围 1.3、DSL 实现 Metrics 聚合 1.4、基于 JavaRestClient 实现聚合 1.4.1、组装请求 1…

Tomcat多实例、负载均衡、动静分离

Tomcat多实例部署 安装jdk [rootlocalhost ~]#systemctl stop firewalld.service [rootlocalhost ~]#setenforce 0 [rootlocalhost ~]#cd /opt [rootlocalhost opt]#ls apache-tomcat-8.5.16.tar.gz jdk-8u91-linux-x64.tar.gz rh [rootlocalhost opt]#tar xf jdk-8u91-linu…

春招秋招,大学生求职容易遇到哪些问题?

每到毕业季就有大批大学生从校园出来,他们怀抱梦想,希望能做出一番成绩。但现实总归是残酷的,有些人找不到工作,有一些人频繁跳槽,也有一些人最终找到的工作与自己的专业没有一点关系,迷茫好几年才找到方向…

钡铼BL302与PLC:提升酿酒业效率与品质的利器

啤酒是人类非常古老的酒精饮料,是水和茶之后世界上消耗量排名第三的饮料。 啤酒在生产过程中主要有制造麦芽、粉碎原料、糖化、发酵、贮酒後熟、过滤、灌装包装等工序流程。需要用到风选机、筛分机、糖化锅、发酵设备、过滤机、灌装机、包装机等食品机械设备。这些食…

安全远程访问工具

什么是安全远程访问 安全远程访问是指一种 IT 安全策略,允许对企业网络、任务关键型系统或任何机密数据进行授权、受控访问。它使 IT 团队能够根据员工和第三方的角色和工作职责为其提供不同级别的访问权限,安全的远程访问方法可保护系统和应用程序&…

前缀和实例5(连续数组)

题目: 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0…