首页 > 其他分享 >rsync+inotify实现文件实时同步

rsync+inotify实现文件实时同步

时间:2024-11-12 10:59:18浏览次数:1  
标签:rsync 同步 inotify -- 备份 实时 etc

一、rsync简介
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
Rsync 使用一个特殊的算法来识别文件的差异,并仅传输发生变化的部分,以实现高效的文件同步和备份。它还支持多种模式和选项,使其非常适应各种不同的应用场景。
① rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。
② rsync软件支持跨平台,适用于unix/ linux/windows等多种操作系统平台
③ rsync是一个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制
④ 以其delta-transfer算法闻名。
⑤ rsync监听端口:873
⑥ rsync运行模式:C/S
二、rsync同步方式和备份的方式
同步方式
1、完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。
2、差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)。
3、增量备份:备份上次备份以后有变化的数据(他才不管是那种类型的备份,有变化的数据就备份,他会清除存档属性)
备份的方式
1、发起端:负责rsync 同步操作的客户机叫做发起端,通知服务器我要备份你的数据
2、备份源:负责响应来自客户机rsync 同步操作的服务器叫做备份源,需要备份的服务器
3、服务端:运行rsyncd服务,一般来说,需要备份的服务器
4、客户端:存放备份数据
三、rsync的ssh认证协议
rsync命令来同步系统文件之前要先登录remote主机认证,认证过程中用到的协议有2种:
● ssh协议
● rsync协议
rsync server端不用启动rsync的daemon进程,只要获取remote host的用户名和密码就可以直接rsync同步文件
rsync server端因为不用启动daemon进程,所以也不用配置文件/etc/rsyncd.conf
四、rsync命令的常用选项
//rsync常用选项:

  • -a, --archive //归档模式,保留文件的权限、属性等信息,等同于组合选项”-rlptgoD“
  • -l, --links //对于符号链接文件仍然复制为符号链接文件
  • -v, --verbose //啰嗦模式 显示同步过程的详细信息
  • -q, --quiet //静默模式
  • -r, --recursive //递归
  • -p, --perms //保持原有的权限属性
  • -z, --compress //在传输时压缩,节省带宽,加快传输速度
  • --delete //在源服务器上做的删除操作也会在目标服务器上同步
    五、rsync+inotify
    Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
    环境
    源服务器:
  • IP地址:192.168.142.48;
  • 应用:rsync,inotify-tools,脚本;
  • 操作系统:Redhat7
  • 同步目录: /opt/inotify_data

目标服务器:

  • IP地址:192.168.142.30;
  • 应用:rsync;
  • 操作系统:Redhat7
  • 同步目录: /opt/inotify_data
    优化系统配置
[root@localhost ~]# vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@localhost ~]# sysctl -p
在目标服务器上进行以下操作:
systemctl stop firewalld
setenforce 0
getenforce 
systemctl disable firewalld
yum -y install rsync

配置文件

vim /etc/rsyncd.conf

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
uid = root
gid = root
use chroot = yes #开启,禁锢在源目录,表示允许在访问我备份的目录或文件的时候,使用的角色是root,同时你访问本地目录时拥有的也是root权限

[etc_from_client]
    path = /opt/inotify_data/
    comment = sync etc from client
    dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z    #同步时不再压缩的文件类型,因为同步时,-avz已经进行压缩
    port = 873
    ignore errors
    use chroot = no
    read only = no
    list = no
    max connections = 200
    timeout = 600
    auth users = kaikai #授权用户,使用wwwroot模块的用户是哪个用户,多个账户以空格隔开
    hosts allow = 192.168.142.48/24
    secrets file=/etc/rsync.password #存放账号信息的数据文件,一行一个
vim /etc/rsync.password
kaikai:123456

chmod 600 /etc/rsync.password

systemctl start rsyncd
systemctl enable rsyncd
在源服务器上做以下操作
systemctl stop firewalld
setenforce 0
getenforce 
systemctl disable firewalld
yum -y install rsync inotify-tools

vim /etc/rsync.password
123456

chmod 600 /etc/rsync.password 

测试

rsync -avH --port 873 --delete /opt/inotify_data/ [email protected]::etc_from_client --password-file=/etc/rsync.password

写同步脚本

//写同步脚本,这是最最重要的一步,请慎之又慎。让脚本自动去检测我们制定的目录下
//文件发生的变化,然后再执行rsync的命令把它同步到我们的服务器端去
//创建一个脚本,并修改权限为755
[root@xaii-client ~]# mkdir /scripts
[root@xaii-client ~]# touch /scripts/inotify.sh
[root@xaii-client ~]# chmod 755 /scripts/inotify.sh 
[root@xaii-client ~]# ll /scripts/inotify.sh 
-rwxr-xr-x 1 root root 0 2月  19 15:54 /scripts/inotify.sh
cat /scripts/inotify.sh

#!/bin/bash

# 定义变量
host=10.19.29.1                    # 目标服务器的 IP 地址(备份服务器)
src=/data-ssd1/fastdfs             # 源服务器上要监控的备份目录(需要确保该目录存在)
des=/data-ssd2/fastdfs             # 目标服务器上同步的目录路径,需要与目标服务器上的目录一致
password=/etc/rsync.password       # 数据同步的密码文件
user=kaikai                        # 用于执行数据同步的用户名
inotifywait=/usr/bin/inotifywait   # 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::$des
  echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
done

启动

nohup bash /scripts/inotify.sh &

参考
https://blog.csdn.net/lyshark_csdn/article/details/128486098
https://blog.csdn.net/weixin_43695104/article/details/87717124

标签:rsync,同步,inotify,--,备份,实时,etc
From: https://www.cnblogs.com/boradviews/p/18541392

相关文章

  • Qt边推流边录制/实时性好延迟低/16路1080P推流加录制只占1%CPU/优化到极致
    一、前言这个一边推流一边录制的功能,有很多用户提到过,之前因为时间的原因,一直没有搞,年初的时候索性抽空搞了下,也着实费了些功夫。推流用的是ffmpeg这个开源的牛逼的第三方库,搞音视频开发的人应该没人不认识这个库,养活了很多程序员以及厂家,甚至不乏一些大厂,如果能把ffmpeg搞精通,在......
  • 使用 .NET Core 7 和 SignalR 构建实时聊天应用程序
    动动你可爱的小手,请关注下本人公众号,继续为您提供更多原创技术文章。谢谢给为的支持SignalR 是一个ASP.NET库,它支持实时Web功能,允许服务器立即将更新推送到客户端,从而提高应用程序的效率和响应能力。它通过简化通信和支持各种传输协议,对于聊天应用程序、实时仪表板和协......
  • Pyhthon实时行情接口WebSocket接入
    Python做量化,如果是日内策略,需要更实时的行情数据,不然策略滑点太大,容易跑偏结果。之前用行情网站提供的level1行情接口,实测平均更新延迟达到了6秒,超过10只股票并发请求频率过快很容易封IP。后面又尝试了买代理IP来请求,成本太高而且不稳定。在Github上看到一个可转债的Golang高频......
  • 安娜的档案(Anna’s Archive)官网最新镜像网站入口(实时更新)
    安娜的档案(Anna’sArchive)是一个广受欢迎的在线资源平台,汇集了Z-Library、LibraryGenesis和Sci-Hub等资源,拥有超过2000万册书籍和9000万篇论文。该网站提供多种下载选项,包括快速、慢速、libgen、IPFS和Tor浏览器下载,以满足不同用户的网络和需求。用户可以无需注册,直接免费获取资......
  • Python的GUI应用,用于实时监控屏幕区域的图片变化
         如何使用Python监控屏幕变化并截图 1、导入所需模块首先,我们需要导入一些Python模块,包括PIL(PythonImagingLibrary)、numpy、os和time。这些模块将帮助我们截取屏幕图像,并进行文件和时间相关的操作。fromPILimportImageGrab#导入ImageGrab模块,用......
  • 量化交易系统开发-实时行情自动化交易-Okex衍生数据
    19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。接下来聊聊基于Okex交易所API获取衍生数据。衍生数据(DerivedData)是从基础市场数据中计算......
  • opencv实时弯道检测
    项目源码获取方式见文章末尾!600多个深度学习项目资料,快来加入社群一起学习吧。《------往期经典推荐------》项目名称1.【基于CNN-RNN的影像报告生成】2.【卫星图像道路检测DeepLabV3Plus模型】3.【GAN模型实现二次元头像生成】4.【CNN模型实现mnist手写数字识别】......
  • 餐厅人流实时监测系统
    餐厅人流实时监测系统通过利用现场监控摄像头,餐厅人流实时监测系统实现对餐厅区域内的人员进入数量、离开数量的统计展示。通过AI算法对摄像头捕捉的画面进行实时分析,从而精确地统计出入餐厅的人数。这一功能不仅为餐厅管理人员提供了实时的客流数据,更为特殊时段的客流疏导、分流......
  • 从无音响Windows 端到 有音响macOS 端实时音频传输播放
    以下是从Windows端到macOS端传输音频的优化方案,基于上述链接中的思路进行调整:Windows端操作安装必要软件安装Python(确保版本兼容且已正确配置环境变量)。安装PyAudio库,可通过 pipinstallpyaudio 命令在命令提示符(CMD)中执行安装。获取音频源并传输以下是优化后......
  • 这些实时互动 AI 场景正在涌现生长,也预示着多模态 AI 的未来|RTE2024 声网CEO赵斌演讲
    10月25日,在RTE2024第十届实时互联网大会主论坛上,声网创始人兼CEO赵斌发表了《实时互动十年:从WebRTC到生成式AI时代的RTE》主旨演讲。 赵斌认为,生成式AI正在驱动IT行业发生大变革,这一趋势主要体现在四个层面:终端、软件、云以及人机界面。在这样的时代背景下,生成式......