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实践

加入开机自动执行


数据均由rsync客户端推向服务端进行传输

rsync传输命令最好手敲 否则可能会出现模块用户密码无法识别的情况

官网:rsync
Linux版下载:rsync download
Windows版下载:cwRsync - Rsync for Windows | itefix.net

rsync

rsync概述

 rsync(remote sync)远程同步,rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。 rsync监听端口:873,rsync运行模式:C/S。

官网:https://rsync.samba.org/
官方文档:https://www.samba.org/ftp/rsync/rsync.html
GitHub地址:https://github.com/WayneD/rsync

rsync优缺点

一、优点
可以镜像保存整个目录树和文件系统;
可以做到保持原来文件的权限、时间、软硬链接等等;
无须特殊权限即可安装;
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
可以使用rcp、ssh等方式来传输文件,rsync本身不对数据加密;
支持匿名传输,可以实现方便安全的进行数据备份和镜像;
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
可以通过socket(进程方式)传输文件和数据。
2)缺点
同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率;
rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

缺点可以通过和inotify-tools配合解决

rsync参数

rsyncd.conf 参数参数说明
uid=rootrsync 使用的用户。
gid=rootrsync 使用的用户组(用户所在的组)
use chroot=no

如果为 true,daemon 会在客户端传输文件前“chroot to the path”。这是一种安

全配置,因为我们大多数都在内网,所以不配也没关系

max connections=200设置最大连接数,默认 0,意思无限制,负值为关闭这个模块
timeout=400默认为 0,表示 no timeout,建议 300-600(5-10 分钟)
pid file

rsync daemon 启动后将其进程 pid 写入此文件。如果这个文件存在,rsync 不会

覆盖该文件,而是会终止

lock file指定 lock 文件用来支持“max connections”参数,使得总连接数不会超过限制
log file不设或者设置错误,rsync 会使用 rsyslog 输出相关日志信息
ignore errors忽略 I/O 错误
read only=false指定客户端是否可以上传文件,默认对所有模块为 true
list=false是否允许客户端可以查看可用模块列表,默认为可以
hosts allow

指定可以联系的客户端主机名或和 ip 地址或地址段,默认情况没有此参数,即都

可以连接

hosts deny

指定不可以联系的客户端主机名或 ip 地址或地址段,默认情况没有此参数,即都

可以连接

auth users

指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。

默认为所有用户无密码访问

secrets file指定用户名和密码存放的文件,格式;用户名;密码,密码不超过 8 位
[backup]

这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的

名称,便于以后维护

path

这个模块中,daemon 使用的文件系统或目录,目录的权限要注意和配置文件中的

权限一致,否则会遇到读写的问题

配置/etc/rsyncd_users.db,跟auth users对应

rsync命令

rsync --help
rsync [选项]  原始位置   目标位置
常用选项说明
-r递归模式,包含目录及子目录中的所有文件
-l对于符号链接文件仍然复制为符号链接文件
-v显示同步过程的详细信息
-z在传输文件时进行压缩goD
-p保留文件的权限标记
-a归档模式,递归并保留对象属性,等同于-rlpt
-t保留文件的时间标记
-g保留文件的属组标记(仅超级用户使用)
-o保留文件的属主标记(仅超级用户使用)
-H保留硬链接文件
-A保留ACL属性信息
-D保留设备文件及其他特殊文件
--delete删除目标位置有而原始位置没有的文件
--checksum根据对象的校验和来决定是否跳过文件

rsync同步源

       在远程同步任务中,负责发起rsync司步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源(备份源)。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
例:
        rsync服务端同步别人,下行同步,将别人的信息下载到本地;
        别人同步rsync服务端,上行同步,将信息上传至rsync服务器。

同步方式:
        全量备份:
        原有的数据全部传送,把原来的文件和新的文件一起统一传送,全量复制,效率低

        增量备份:
        在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输,增量复制,效率高

配置源的两种表示方法
格式一:
用户名@主机地址::共享模块名
rsync -avz backuper@192.168.10.10::wwwroot /root

格式二:
rsync://用户名@主机地址/共享模块名
rsync -avz rsync://backuper@192.168.10.10/wwwroot /root

linux 安装rsync

安装rsync服务端

#安装rsync和xinetd超级守护进程
yum install -y xinetd rsync
#配置rsync配置文件
vim /etc/rsyncd.conf
##########linux rsyncd.conf  配置文件参数后面不能有备注否则可能有问题##############
#Global Settings 全局配置
uid = nobody                         #运行rsync的用户
gid = nobody                         #运行rsync的用户组
use chroot = no                      #是否让进程离开工作目录
max connections = 5                  #最大并发连接数,0为不限制
timeout = 600                        #超时时间
pid file = /var/run/rsyncd.pid       #指定rsync的pid存放路径
lockfile = /var/run/rsyncd.lock      #指定rsync的锁文件存放路径
log file = /var/log/rsyncd.log       #指定rsync的日志存放路径
#模块配置
[web1]
path = /var/www                      #认证的模块名,在client端需要指定 服务端存放客户端文件的目录 windows客户端存放d盘下backup_d文件夹下path = /cygdrive/d/backup_d
ignore errors = yes                  #忽略一些无关的I/O错误
read only = no                       #客户端是否能拉(PULL)
write only = no                      #客户端是否能推(PUSH)
hosts allow = 172.16.150.150         #白名单,可以访问此模块的主机
hosts deny = *                       #黑名单,*表示任何主机
list = yes                           #客户端请求是否可以列出模块列表
uid = root                           #以root的身份去获取文件
gid = root
auth users = web                     #认证此模块的用户名
secrets file = /etc/web.passwd       #指定存放“用户名:密码”格式的文件
max connections = 200                # 最大连接数
timeout = 600                        # 设置超时时间
###############################################################
##########windows rsyncd.conf  配置文件参数后面不能有备注否则可能有问题##############
uid = root
gid = 0
use chroot = no
strict modes = no
max connections = 5
timeout = 600
pid file = rsyncd.pid
lockfile = rsyncd.lock
log file = rsyncd.log
prot = 873[test]path = /cygdrive/d/backup_dignore errors = yesread only = nohosts deny = *hosts allow = 192.168.90.243list = yesmax connections = 200timeout = 600auth users = asdsecrets file = etc/rsyncd.secrets
############################################################################创建同步目录
mkdir -p /var/www/
#配置rsync认证文件/etc/web.passwd
echo "web:web" > /etc/web.passwd
#修改/etc/web.passwd的权限为600
chmod 600 /etc/web.passwd
#配置服务能够启动
chkconfig rsync on
systemctl start xinetd start
#检查873端口是否监听成功
ss -antl | grep 873
#检查rsync的运行状态
chkconfig --list
systemctl status rsync

安装rsync客户端

#安装
yum install -y xinetd rsync
#设置rsync客户端的密码文件,客户端只需要设置rsync同步的密码即可,不用设置用户名(默认已经安装了rsync)
echo web > /etc/web.passwd
#修改/etc/rsyncd.passwd的权限为600
chmod 600 /etc/web.passwd

windows 安装rsync

正常执行rsync安装包下一步下一步下一步即可,服务端需要设置一个账号和密码,客户端则不用,配置信息和linux一样

window实践 创建bat脚本 执行脚本进行传输数据

@echo off
cmd /k "cd /d E:\cwRsync\bin&&rsync.exe -vzrtopg --progress --delete xz@服务端ip::www /cygdrive/E/databackup/www --port=端口号 --password-file=/cygdrive/E/cwRsync/passwd
"
pause

rsync实践

# 在192.168.0.99节点上测试手动同步
# 从远端【拉取】数据
rsync -avz root@192.168.0.99:/opt/nfsdata/* /opt/nfsdata/
#从服务端拉取数据
rsync -avz --progress --delete  root@192.168.90.13::web /shell# 在192.168.0.99节点上测试手动同步
# 从【推送】数据
rsync -avz /opt/nfsdata/* root@192.168.0.99:/opt/nfsdata/### 在192.168.0.99节点上测试手动同步,通过【拉取】数据,配置文件配置的模块,这里走的是rsync协议,上面走的是ssh协议,只要做了免密就直接推送或拉取数据了。这里就会用到配置文件里配置的users用户了,也是secrets file文件里配置的其中一个用户。
#【方式一】
rsync -avz backuper@192.168.0.99::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://backuper@192.168.0.99/nfsdata /opt/nfsdata/# 在192.168.0.99节点上执行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用户的密码,且文件权限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.99::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.99/nfsdata #有密码形式推送数据到服务端
rsync -avz --progress --delete /shell 用户@IP地址::模块 --password-file 客户端存放密码文件
rsync -avz --progress --delete /shell @192.168.90.13::test --password-file /etc/web.passwd#无密码形式推送数据到服务端
rsync -avz --progress --delete /shell  uid@服务IPD地址::模块
rsync -avz --progress --delete /shell  root@192.168.90.13::web

inotify-tools 

inotify-tools概述 

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

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

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

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

 innotify-tools 命令、参数、事件

命令
inotify-tools 包含了两个命令:inotifywait 与 inotifywatch。
        inotifywait:在被监控的文件或目录上等待特定文件系统事件发生,执行后处于阻塞状态,适合在shell脚本中使用。
阻塞状态 (Blocked):阻塞状态是线程因为某种原因放弃CPU的使用权,暂时停止运行。
        inotifywatch:用于收集文件系统的统计数据,例如发生了多少次 inotify 事件,某文件被访问了多少次等等。

内核参数
        /proc/sys/fs/inotify/ 目录下包含三个文件,分别设置 inotify 相关的三个内核参数。
        max_queued_events:inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。/proc/sys/fs/inotify/max_queued_events默认值16384
        max_user_instances:每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。/proc/sys/fs/inotify/mak_user_instances默认值128
        max_user_watches:每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。如果监控的文件数目巨大,需要根据情况适当增加此值。/proc/sys/fs/inotify/max_user_watches默认值8192 

事件
inotify 监控的文件系统事件:
access:文件被访问。
modify:文件被修改。
attrib:文件元数据被修改。
open:文件被打开。

move    移动
create:在被监控的目录中创建了文件或目录。
delete:删除了被监控目录中的某个文件或目录。

-m    持续进行监控
-r    递归监控所有子对象
-q    简化输出信息
-e    指定要监控哪些事件类型

inotifywait:用于持续监控,实时输出结果
可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:用于短期监控,任务完成后再输出结果
可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
例:
inotifywait -mrq -e modify,create,attrib,move,delete 文件或目录


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

 rsync客户端安装inotify-tools

#检查当前系统内核是否支持inotify 内核版本大于2.6.13则支持
uname -r
#安装 在一块不知道为什么 inotify-tools 没有安装上 所以分开进行了安装
yum install -y epel-release
yum install -y inotify-tools
#配置内核参数
#inotify 事件队列可容纳的事件数量,超出的事件被丢弃,但会触发队列溢出Q_OVERFLOW事件。
#/etc/sysctl.conf(内核参数配置文件),需要配置下面配置
vim /etc/sysctl.conf
###################sysctl.conf######################### 默认值16384max_queued_events=16384
#每个用户可运行的 inotifywait 或 inotifywatch 命令的进程数。默认值128mak_user_instances=128
#每个 inotifywait 或 inotifywatch 命令可以监控的文件数量。
#如果监控的文件数目巨大,需要根据情况适当增加此值。配置的监控数量应该大于监控目标的总文件数默认值8192max_user_watches=8192 
########################################################

 innotify-tools实践

不指定监控事件,分别打开两个 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其中 inotifywait 的信息是在进程运行过程中输出的,而 inotifywatch 的信息是在进程结束时输出的。
以上测试没有指定监听事件,所以监听的是所有的事件,可以通过 -e 选项来指定监听事件,如:
inotifywait -m -e create,modify,delete /var/inotify-test

rsync+inotify-tools实践

vim /opt/inotify_rsynx.sh
#!/bin/bash
#定义两个变量:监控文件,执行备份
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete 需要监控的目录或文件"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/密码文件 刚才监控的目录或文件 用户名@主机地址::共享模块名"
#
#rsync -az --delete /home/backup/project/bak_project rsync_backup@172.16.0.92::backup_e &>/dev/null#while read获取监控结果
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
#当读取目录,事件,文件
do #如果rsync没有运行,执行rsync进行备份操作if [ $(pgrep rsync | wc -l) -eq 0 ] ; then$RSYNC_CMDfi
done

加入开机自动执行

chmod +x /etc/rc.d/rc.local
echo '/opt/inotify_rsync.sh' >> /etc/rc.d/rc.local

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

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

相关文章

鸿蒙-自定义组件的生命周期

目录 自定义组件的生命周期 1.aboutToAppear 2.aboutToDisappear 3.onPageShow 4.onPageHide 5.onBackPress 日志输出 1.显示页面 2.页面点击返回按钮 3.页面跳转 4.页面返回 自定义组件的生命周期 先来一段列子 import router from ohos.router Entry Component…

虚拟机VMware上 centos7 的网络配置

第一步:权限的切换 由普通用户切换到超级用户 用户名为:root 密码为:自己安装 linux 时第一次设置的密码 su -root超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。当看到你的命令提示符为“$”时,证明切…

华为配置敏捷分布式SFN漫游实验

配置敏捷分布式SFN漫游示例 组网图形 图1 配置敏捷分布式SFN漫游示例组网图 组网需求数据规划配置思路配置注意事项操作步骤配置文件 组网需求 某医院通过部署敏捷分布式网络给医护人员提供WLAN接入服务,以满足医护人员办公的最基本需求。管理员希望终端在覆盖区域内…

pytorch之诗词生成6--eval

先上代码: import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…

k8s admin 用户生成token

k8s 版本 1.28 创建一个admin的命名空间 admin-namespce.yaml kind: Namespace apiVersion: v1 metadata: name: admin labels: name: admin 部署进k8s kubectl apply -f admin-namespce.yaml 查看k8s namespace 的列表 kubectl get namespace查看当前生效的…

WRF模型教程(ububtu系统)-WPS(WRF Pre-Processing System)概述

一、WPS简介 WRF 预处理系统 (WRF Pre-Processing System,WPS) ,集成了基于Fortran和C编写的程序,这些程序主要用于处理输入到real.exe的数据。WPS主要有三个程序和一些辅助程序。 二、各程序介绍 主要的程序为geogrid.exe、ungrib.exe、met…

paddle ocr识别文字

paddle使用 # pip install paddlepaddle2.5.2 -i https://mirror.baidu.com/pypi/simple # pip install paddleocr2.7.0.3 -i https://mirror.baidu.com/pypi/simplefrom paddleocr import PaddleOCR from PIL import Image import numpy as npimage Image.open(./2.png) ocr…

Spring Boot Actuator介绍

大家在yaml中经常见到的这个配置 management: endpoints: web: exposure: #该配置线上需要去掉,会有未授权访问漏洞 include: "*" 他就是Actuator! 一、什么是 Actuator Spring Boot Actuator 模块提供了生产级别…

el-table按钮获取当前行元素

el-table按钮获取当前行元素 vue2 <el-table-column label"操作" width"240px"><template slot-scope"scope"><el-button size"mini" click"toItem(scope.row)">用户详情</el-button><el-butto…

【Unity】详细介绍

Unity讲解 Unity是一个广泛使用的游戏开发平台&#xff0c;由Unity Technologies开发。它提供开发者一个强大的集成环境来创建2D和3D游戏及交互式内容。Unity自身包含一个图形引擎、物理引擎、声音处理系统、动作捕捉系统、网络系统等多个模块&#xff0c;使得开发者能够实现丰…

C++高级面试题:什么是 C++ 中的多态指针(Polymorphic Pointers)?

什么是 C 中的多态指针&#xff08;Polymorphic Pointers&#xff09;&#xff1f; 在 C 中&#xff0c;多态指针&#xff08;Polymorphic Pointers&#xff09;通常指向基类&#xff08;Base Class&#xff09;的指针&#xff0c;但它可以指向派生类&#xff08;Derived Clas…

Linux------JAVA项目发布

启动jar TODO: 直接指定jar包外的yml 用户导出配置文件 jar xf wisdom-classroom.jar BOOT-INF/classes/application.yml jar xf wisdom-classroom.jar BOOT-INF/classes/application-druid.yml用于导入配置文件 jar uf wisdom-classroom.jar BOOT-INF/classes/application.y…

微信小程序--分享如何与ibeacon蓝牙信标建立联系

ibeacon蓝牙设备 iBeacon是苹果公司2013年9月发布的移动设备用OS&#xff08;iOS7&#xff09;上配备的新功能。其工作方式是&#xff0c;配备有 低功耗蓝牙&#xff08;BLE&#xff09;通信功能的设备使用BLE技术向周围发送自己特有的ID&#xff0c;接收到该ID的应用软件会根…

Laravel Class ‘Facade\Ignition\IgnitionServiceProvider‘ not found 解决

Laravel Class Facade\Ignition\IgnitionServiceProvider not found 问题解决 问题 在使用laravel 更新本地依赖环境时&#xff0c;出现报错&#xff0c;如下&#xff1a; 解决 这时候需要更新本地的composer&#xff0c;然后在更新本地依赖环境。 命令如下&#xff1a; co…

19113133262(微信同号)【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链&#xff1a; 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

How to manage Python environment based on virtualenv in Ubuntu 22.04

How to manage Python environment based on virtualenv in Ubuntu 安装使用创建环境激活环境安装软件包退出环境移除环境 安装 pip3 install virtualenv使用 创建环境 lwkqwfys:~$ mkdir ~/project/harbin lwkqwfys:~$ cd ~/project/harbin lwkqwfys:~/project/harbin$ vir…

css背景从上到下颜色渐变、css背景从左到右颜色渐变、 css框线展示外阴影、css框线展示内阴影

1. css背景从上到下颜色渐变 body {background: linear-gradient(to bottom, #ff0000, #ffff00); /* 这里的#ff0000表示红色&#xff0c;#ffff00表示黄色 */ }2. css背景从左到右颜色渐变 要实现CSS背景从左到右的颜色渐变&#xff0c;可以使用linear-gradient函数。以下是一…

微信小程序将高德地图转为腾讯地图的自行车路线规划

微信小程序后台首页开发设置 相关文档 腾讯后台 微信小程序接入JDK JDK腾讯地图文档 腾讯路线规划文档 核心代码 <map id"myMap" ref"myMap" style"width: 100%; height: calc(100vh - 80px)":latitude"latitude" :scale&qu…

系统架构设计师笔记第36期:中间层架构设计

在现代软件开发领域,随着业务复杂度和用户需求的增长,传统的两层架构逐渐暴露出其局限性,如难以处理高并发场景、业务逻辑分散且不易维护等问题。因此,引入中间层(也称为服务层或业务逻辑层)架构成为了提升系统性能、保证数据安全以及促进应用服务高效、灵活和可扩展的重…

java笔记+理论复习大全

java复习3 1 记事本程序2 八中数据类型函数结构面向对象对象类构造方法继承接口多态重写方法: 异常多线程集合框架文件操作其他待续、更新中 工程名 包名等都命名 9个题 1 记事本程序 保存为.java文件 查看 Hello.java 运行cmd javac Hello.java java Hello体现 java程序特点…