rsync如何实时同步

一、准备rsyncd服务环境

backup服务器(rsync服务端)

1、恢复了快照,重新安装rsync服务端

2、快速的部署rsyncd服务端

#!/bin/bash
yum install rsync -y

cat > /etc/rsyncd.conf << 'EOF'
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
EOF

useradd -u 1000 -M -s /sbin/nologin www
mkdir -p /{backup,data}
chown -R www:www /{backup,data}
echo "rsync_backup:yuchao666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
systemctl start rsyncd

3.执行脚本部署服务端的rsync
bash instal_rsync.sh

dev服务器部署(rsync客户端)

二、准备部署inotify-tools软件(nfs-31机器)

1、内核检查

[nfs-31 root ~] # uname -r
3.10.0-1160.71.1.el7.x86_64



本质上是linux支持inotify机制
在性能还可以优化,支持更高的文件并发数
#检测多少个文件 ,文件内容大量的发生变化,inotify机制能同时检测多少文件 
这个参数的优化,就是调整linux的几个文件
[nfs-31 root ~] # ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jan  6 15:32 max_queued_events
-rw-r--r-- 1 root root 0 Jan  6 15:32 max_user_instances
-rw-r--r-- 1 root root 0 Jan  6 15:32 max_user_watches

系统文件解释
max_user_watches:    设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)
默认只能监控8192个文件

max_user_instances:    设置每个用户可以运行的inotifywait或inotifywatch命令的进程数
默认每个用户可以开启inotify服务128个进程

max_queued_events:    设置inotify实例事件(event)队列可容纳的事件数量
默认监控事件队列长度为16384

2、安装innotifty-tools工具

需要配置好epel源,才可以安装
[nfs-31 root ~] # ls /etc/yum.repos.d/
Centos-7.repo  epel-7.repo  repo_bak
[nfs-31 root ~] # 
[nfs-31 root ~] # yum install inotify-tools -y
[nfs-31 root ~] # rpm -qa|grep inotify-tools
inotify-tools-3.14-9.el7.x86_64

检查生成的软件命令
[nfs-31 root ~] # rpm -ql inotify-tools |head -2
/usr/bin/inotifywait
/usr/bin/inotifywatch

3、inotifywait详解和使用

3.1 inotifywait作用

inotifywait:在被监控的目录等待特定文件系统事件(open、close、delete等事件),执行后处于阻塞状态,适合在Shell脚本中使用,是实现监控的关键

Inotifywatch:收集被监控的文件系统使用的统计数据(文件系统事件发生的次数统计)

3.2 inotifywait实践

所有事件,任意的Linux命令,只要对该目录的数据

对文件发生了修改动作,都会被检测到

[nfs-31 root ~] # ls /nfs-data/
test1  test2  test3

开两个终端,一个终端执行命令,另一个终端对/nfs-data目录下文件进行修改或者创建新的文件
[nfs-31 root ~] # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" /nfs-data
10:14:33----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR
10:14:33----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
10:14:35----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR
10:14:35----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
......
10:14:37----/nfs-data/------test3 捕获到的事件是:OPEN
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:CREATE
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:OPEN
10:14:37----/nfs-data/------.test3.swpx 捕获到的事件是:CREATE
10:14:37----/nfs-data/------.test3.swpx 捕获到的事件是:OPEN
10:14:37----/nfs-data/------.test3.swpx 捕获到的事件是:CLOSE_WRITE,CLOSE
10:14:37----/nfs-data/------.test3.swpx 捕获到的事件是:DELETE
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:CLOSE_WRITE,CLOSE
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:DELETE
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:CREATE
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:OPEN
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:MODIFY
10:14:37----/nfs-data/------.test3.swp 捕获到的事件是:ATTRIB
10:14:37----/nfs-data/------test3 捕获到的事件是:CLOSE_NOWRITE,CLOSE
10:14:37----/nfs-data/------test3 捕获到的事件是:OPEN
10:14:37----/nfs-data/------test3 捕获到的事件是:CLOSE_NOWRITE,CLOSE
10:14:37----/nfs-data/------ 捕获到的事件是:OPEN,ISDIR
10:14:37----/nfs-data/------ 捕获到的事件是:CLOSE_NOWRITE,CLOSE,ISDIR
10:14:39----/nfs-data/------.test3.swp 捕获到的事件是:MODIFY
10:14:41----/nfs-data/------4913 捕获到的事件是:CREATE
10:14:41----/nfs-data/------4913 捕获到的事件是:OPEN
10:14:41----/nfs-data/------4913 捕获到的事件是:ATTRIB
10:14:41----/nfs-data/------4913 捕获到的事件是:CLOSE_WRITE,CLOSE
10:14:41----/nfs-data/------4913 捕获到的事件是:DELETE
10:14:41----/nfs-data/------test3 捕获到的事件是:MOVED_FROM
10:14:41----/nfs-data/------test3~ 捕获到的事件是:MOVED_TO
10:14:41----/nfs-data/------test3 捕获到的事件是:CREATE
10:14:41----/nfs-data/------test3 捕获到的事件是:OPEN
10:14:41----/nfs-data/------test3 捕获到的事件是:MODIFY
10:14:41----/nfs-data/------test3 捕获到的事件是:CLOSE_WRITE,CLOSE
10:14:41----/nfs-data/------test3 捕获到的事件是:ATTRIB
10:14:41----/nfs-data/------.test3.swp 捕获到的事件是:MODIFY
10:14:41----/nfs-data/------test3~ 捕获到的事件是:DELETE
10:14:41----/nfs-data/------.test3.swp 捕获到的事件是:CLOSE_WRITE,CLOSE
10:14:41----/nfs-data/------.test3.swp 捕获到的事件是:DELETE

需要指定检测事件的名字

Events              含义
access              文件或目录被读取
modify               文件或目录内容被修改
attrib                 文件或目录属性被改变
close                 文件或目录封闭,无论读/写模式
open                  文件或目录被打开

moved_to          文件或目录被移动至另外一个目录
move                 文件或目录被移动到另一个目录或从另一个目录移动至当前目录
create                文件或目录被创建在当前目录
delete                文件或目录被删除
umount              文件系统被卸载

create、delete事件

检测,创建和删除两个时间,只有执行了对应的Linux命令,才会生成日志

[nfs-31 root ~] # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  delete,create /nfs-data
10:29:35----/nfs-data/------test222 捕获到的事件是:CREATE
10:30:47----/nfs-data/------1.png 捕获到的事件是:CREATE
10:31:04----/nfs-data/------test2 捕获到的事件是:DELETE
10:31:10----/nfs-data/------test1 捕获到的事件是:DELETE

move事件

[nfs-31 root ~] # inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" -e  move   /nfs-data
10:38:26----/nfs-data/------test222 捕获到的事件是:MOVED_FROM
10:40:39----/nfs-data/------test1.txt 捕获到的事件是:MOVED_TO

三、inotify结合rsync实时同步

1、编写一个shell脚本实现

[nfs-31 root ~] # cat rsy_inotify.sh 
#!/bin/bash

# 源目录和目标目录
nfsdata_dir="/nfs-data"
backup_dir="backup"
hostname="rsync_backup@rsync-41"

# inotifywait 监控源目录的变化
inotifywait -mrq --timefmt '%T' --format "%T----%w------%f 捕获到的事件是:%e" "$nfsdata_dir" | while read file
do
    echo "文件变化检测到: $file"
    sleep 3  # 延迟3秒钟
    # 使用 rsync 同步变化的文件或目录
    rsync -avzP --delete "$nfsdata_dir" "$hostname"::"$backup_dir"
done



执行脚本之后就会自动检测/nfs-data目录下数据有更改或者添加都会进行同步
[nfs-31 root ~] # bash rsy_inotify.sh 
文件变化检测到: 13:38:51----/nfs-data/------1.txt 捕获到的事件是:CREATE
sending incremental file list
nfs-data/
nfs-data/1.png
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=7/9)
nfs-data/1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=6/9)
nfs-data/2.png
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=5/9)
nfs-data/2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=4/9)
nfs-data/3.png
              0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=3/9)
nfs-data/3.txt
              0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=2/9)
nfs-data/4.png
              0 100%    0.00kB/s    0:00:00 (xfr#7, to-chk=1/9)
nfs-data/5.png
              0 100%    0.00kB/s    0:00:00 (xfr#8, to-chk=0/9)

sent 533 bytes  received 180 bytes  475.33 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------1.txt 捕获到的事件是:OPEN
sending incremental file list

sent 242 bytes  received 25 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------1.txt 捕获到的事件是:ATTRIB
sending incremental file list

sent 242 bytes  received 25 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------1.txt 捕获到的事件是:CLOSE_WRITE,CLOSE
sending incremental file list

sent 242 bytes  received 25 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------2.txt 捕获到的事件是:CREATE
sending incremental file list

sent 242 bytes  received 25 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------2.txt 捕获到的事件是:OPEN
sending incremental file list

sent 242 bytes  received 25 bytes  534.00 bytes/sec
total size is 0  speedup is 0.00
文件变化检测到: 13:38:51----/nfs-data/------2.txt 捕获到的事件是:ATTRIB
sending incremental file list

nfs-31机器上对应目录

rsync-41机器上面同步的目标目录

四、lsyncd工具(扩展)

https://github.com/lsyncd/lsyncd

Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。

1、下载安装

[nfs-31 root ~] # yum -y install lsyncd

2、修改配置文件(只检测一个目录)

先备份一下配置源文件
[nfs-31 root ~] # cp /etc/lsyncd.conf /etc/lsyncd.conf.bak

[nfs-31 root ~] # vim /etc/lsyncd.conf
settings {
    logfile      ="/var/log/lsyncd/lsyncd.log",
    statusFile   ="/var/log/lsyncd/lsyncd.status",
    inotifyMode  = "CloseWrite",
    maxProcesses = 8,
    }

sync {
    default.rsync,
    source    = "/nfs-data",
    target    = "rsync_backup@rsync-41::backup",
    delete= true,
    exclude = {".*"},
    delay=1,
    rsync     = {
        binary    = "/usr/bin/rsync",
        archive   = true,
        compress  = true,
        verbose   = true,
        password_file="/etc/rsync.passwd",
        _extra={"--bwlimit=200"}
        }
    }

3、启动服务

[nfs-31 root ~] # systemctl restart lsyncd
[nfs-31 root ~] # systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
   Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2025-01-07 14:12:37 CST; 1s ago
 Main PID: 4015 (lsyncd)
   CGroup: /system.slice/lsyncd.service
           ├─4015 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf
           └─4017 /usr/bin/rsync --exclude-from=- --delete --ignore-errors -gvzsolptD --bwlimit=200 ...

Jan 07 14:12:37 nfs-31 lsyncd[4004]: 14:12:37 Error: Temporary or permanent failure on startup o...set.
Jan 07 14:12:37 nfs-31 lsyncd[4004]: 14:12:17 Normal: --- Startup ---
Jan 07 14:12:37 nfs-31 lsyncd[4004]: 14:12:17 Normal: recursive startup rsync: /nfs-data/ -> rsy...ding
Jan 07 14:12:37 nfs-31 lsyncd[4004]: .*
Jan 07 14:12:37 nfs-31 lsyncd[4004]: 14:12:37 Normal: --- TERM signal, fading ---
Jan 07 14:12:37 nfs-31 lsyncd[4004]: 14:12:37 Normal: waiting for 1 more child processes.
Jan 07 14:12:37 nfs-31 systemd[1]: Stopped Live Syncing (Mirror) Daemon.
Jan 07 14:12:37 nfs-31 systemd[1]: Unit lsyncd.service entered failed state.
Jan 07 14:12:37 nfs-31 systemd[1]: lsyncd.service failed.
Jan 07 14:12:37 nfs-31 systemd[1]: Started Live Syncing (Mirror) Daemon.
Hint: Some lines were ellipsized, use -l to show in full.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python的Matplotlib库应用(超详细教程)

目录 一、环境搭建 1.1 配置matplotlib库 1.2 配置seaborn库 1.3 配置Skimage库 二、二维图像 2.1 曲线&#xff08;直线&#xff09;可视化 2.2 曲线&#xff08;虚线&#xff09;可视化 2.3 直方图 2.4 阶梯图 三、三维图像 3.1 3D曲面图 3.2 3D散点图 3.3 3D散…

vue之element-ui文件上传(二)

一、点击上传&#xff0c;使用默认的action上传&#xff0c;添加校验&#xff0c;上传成功后&#xff0c;去除校验&#xff1a; <el-form-item label"文件md5" prop"fileMd5"><el-uploadv-if"!form.fileMd5"v-model"form.fileMd5&…

java项目之旅游网站的设计与实现(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的旅游网站的设计与实现。 项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于SpringBoot的…

IOS开发如何从入门进阶到高级

针对iOS开发的学习&#xff0c;不同阶段应采取不同的学习方式&#xff0c;以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段&#xff0c;下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作&#xff0c;汇集了大量开…

ubuntu编译ijkplayer,支持rmvb以及mkv

1. 准备环境 sudo apt-get update apt install gcc yasm cmake python p7zip-full vim pkg-config autoconf automake build-essential dos2unix mercurial cmake-curse-gui -y apt-get -y --force-yes install libass-dev libtheora-dev libtool libva-dev libvdpau-dev libv…

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

Linux初识——基本指令

我们在linux下输入各种指令&#xff0c;其实就相当于在windows中的相关操作&#xff0c;比如双击&#xff0c;新建文件夹等。 以下是相关基本指令基本用法 一.ls&#xff08;显示当前目录下的所有文件和目录&#xff09; 那如何显示当前目录&#xff08;我们所在的位置&…

小程序开发-页面事件之上拉触底实战案例

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术&#xff0c;实现更智能的交互功能。如通过语音指令或手势控制来操作大屏&#xff0c;医护人员无需手动输入&#xff0c;可更便捷地获取和处理信息。同时&#xff0c;系统能根据用户的操作习惯和数据分析&#xff0c;自动推荐相关的医疗…

IT面试求职系列主题-Jenkins

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;先说说Jenkins的必会知识吧。 1) 什么是Jenkins Jenkins 是一个用 Java 编写的开源持续集成工具。它跟踪版本控制系统&#xff0c;并在发生更改时启动和监视构建系统。 2&#xff09;Maven、Ant和Jenkins有什么区别…

力扣刷题:数组OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.消失的数字&#xff08;1&#xff09;题目描…

2024 高级爬虫笔记(六)scrapy框架基础知识

目录 一、Scrapy框架基础知识1.1、什么是scrapy&#xff1f;1.2、scrapy的工作流程1.3、scrapy中每个模块的作用&#xff1a;1.4、scrapy的入门使用1.4.1 安装scrapy1.4.2、scrapy项目实现流程1.4.3、创建scrapy项目1.4.4、创建爬虫1.4.5、完善spider1.4.6、配置settings文件1.…

每日一题-两个链表的第一个公共结点

文章目录 两个链表的第一个公共结点问题描述示例说明示例 1示例 2 方法及实现方法描述代码实现 复杂度分析示例运行过程示例 1示例 2 总结备注 两个链表的第一个公共结点 问题描述 给定两个无环的单向链表&#xff0c;找到它们的第一个公共节点。如果没有公共节点&#xff0c…

Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索

作者&#xff1a;来自 Elastic Tommaso Teofili 了解如何使用智能提前终止策略让 HNSW 加快 KNN 搜索速度。 在高维空间中高效地找到最近邻的挑战是向量搜索中最重要的挑战之一&#xff0c;特别是当数据集规模增长时。正如我们之前的博客文章中所讨论的&#xff0c;当数据集规模…

两种方式实现Kepware与PLC之间的心跳检测

两种方式实现Kepware与PLC之间的心跳检测 实现Kepware与PLC之间的心跳检测1.OPCUA 外挂程序2.Kepware Advanced Tag 实现Kepware与PLC之间的心跳检测 1.OPCUA 外挂程序 这是通过上位程序来触发心跳的一种机制&#xff0c;在C#中&#xff0c;可以利用OPC UAOPCAutodll的方式…

python-leetcode-文本左右对齐

68. 文本左右对齐 - 力扣&#xff08;LeetCode&#xff09; class Solution:def fullJustify(self, words: List[str], maxWidth: int) -> List[str]:result []current_line []current_length 0for word in words:# 如果当前行加上这个单词后超过 maxWidth&#xff0c;则…

全新免押租赁系统打造便捷安全的租赁体验

内容概要 全新免押租赁系统的推出&#xff0c;标志着租赁行业的一次重大变革。这个系统的最大特点就是“免押金”&#xff0c;大大减轻了用户在租赁过程中的经济负担。从此&#xff0c;不再需要为一部手机或其他商品支付高昂的押金&#xff0c;用户只需通过简单的信用评估&…

WordPress静态缓存插件WP Super Cache与 WP Fastest Cache

引言 WordPress是一款开源的内容管理系统&#xff08;CMS&#xff09;&#xff0c;最初作为博客平台开发&#xff0c;现已发展成为一个功能强大的建站工具&#xff0c;支持创建各种类型的网站&#xff0c;包括企业网站、在线商店、个人博客等。它具有用户友好的界面、丰富的插…

1.CSS的复合选择器

1.1 什么是复合选择器 在CSS中&#xff0c;可以根据选择器的类型把选择器分为基础选择器和复合选择器&#xff0c;复合选择器是建立在基础选择器之上&#xff0c;对基础选择器进行组合形成的。 复合选择器可以更精准、更高效的选择目标元素&#xff08;标签&#xff09; 复…