【企业级分布式系统】Linux-Rsync远程同步

news2024/11/8 14:56:49

文章目录

  • rsync
    • 基本功能与特点
    • 工作原理
    • 应用场景
    • 配置与使用
    • 注意
  • rsync部署安装示例
    • 配置rsync源服务器
    • 发起端配置
    • 发起端配置rsync+inotify
    • 使用rsync快速删除大量文件

rsync

Remote Sync,远程同步。是一个开源的快速备份工具

基本功能与特点

  1. 跨主机同步:rsync可以在不同主机之间镜像同步整个目录树,非常适合异地备份、镜像服务器等应用。
  2. 增量备份:它支持增量备份,即只传输修改过的文件,大大提高了同步效率。
  3. 保持文件属性:rsync可以保持文件的权限、时间戳、软硬链接等元数据,确保同步后的文件与原始文件完全一致。
  4. 优化算法:采用优化的同步算法,并在传输前执行压缩,进一步提高了同步速度和效率。
  5. 安全传输:rsync可以通过SSH等安全协议进行远程同步,保障数据传输的安全性。

工作原理

rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步。这个算法只传送两个文件的不同部分(通过差分编码实现),而不是每次都整份传送,因此速度相当快。
具体的工作流程:

  1. 发起端(客户机)构造FileList,FileList包含了需要与同步源(服务器)同步的所有文件信息对(name->id)。
  2. 发起端将FileList发送到同步源。
  3. 同步源上运行的rsync进程处理FileList,构建NewFileList。其中根据MD5值的比较来删除同步源上已经存在的文件的信息对,只保留同步源上不存在或变化的文件。
  4. 发起端得到NewFileList后,将NewFileList中的文件重新传输到同步源。

应用场景

  1. 文件和目录备份:rsync可以对文件和目录进行快速、高效的备份。
  2. 文件镜像和复制:在分布式环境中,多个节点需要保持一致性。rsync可以实现节点间的文件同步和复制,使得分布式文件系统保持一致性并及时反映文件更改。
  3. 远程文件同步:rsync可以将本地和远程文件的变更快速地同步,通过网络进行文件传输,并自动检测并传输差异部分,从而减少网络带宽和传输时间。
  4. 自动化脚本运行:rsync可以结合脚本进行自动化的文件同步和备份。
  5. 带宽限制文件同步:rsync支持带宽限制同步,用户可以对上传和下载带宽进行限制控制。

配置与使用

  1. 服务端配置:需要配置rsyncd.conf文件,指定同步的目录、访问控制等。然后启动rsync守护进程,等待客户端连接。
  2. 客户端配置:客户端使用rsync命令发起同步操作,指定原始位置和目标位置。可以使用多种选项来控制同步的行为,如递归模式、压缩传输、保留文件属性等。

注意

  1. 权限问题:确保发起端对同步源上的文件具有读取权限,同时确保同步目标位置具有写入权限。
  2. 网络问题:在网络条件不好的情况下,可能需要调整rsync的传输参数以提高同步效率。
  3. 安全性:使用SSH等安全协议进行同步时,需要确保网络连接的安全性,防止敏感信息泄露。

rsync部署安装示例

首先关闭防火墙

systemctl stop firewalld
setenforce 0

配置rsync源服务器

  1. 检查rsync是否已安装
    rpm -q rsync  # 检查系统中是否已安装rsync
    
  2. 创建并配置/etc/rsyncd.conf文件
    vim /etc/rsyncd.conf  # 编辑rsync配置文件
    
    添加以下内容:
    uid = root            # 运行rsync的用户ID
    gid = root            # 运行rsync的组ID
    use chroot = yes      # 使用chroot,将进程限制在源目录中
    address = 192.168.80.10  # 监听的IP地址
    port = 873            # 监听的端口号
    log file = /var/log/rsyncd.log  # 日志文件的位置
    pid file = /var/run/rsyncd.pid  # 存放进程ID的文件位置
    hosts allow = 192.168.80.0/24  # 允许访问的客户机地址范围
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z  # 不压缩的文件类型
    
    [wwwroot]            # 共享模块名称
    path = /var/www/html  # 源目录的实际路径
    comment = Document Root of www.xy101.com  # 共享模块的描述
    read only = yes       # 设置为只读
    auth users = backuper  # 授权账户
    secrets file = /etc/rsyncd_users.db  # 存放账户信息的数据文件
    #如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
    
  3. 创建账户信息数据文件
    vim /etc/rsyncd_users.db  # 编辑账户信息文件
    
    添加内容:
    backuper:abc123  # 用户名和密码
    
    chmod 600 /etc/rsyncd_users.db  # 设置文件权限,仅所有者可读写
    
  4. 确保源目录有读取权限
    chmod +r /var/www/html/  # 为源目录添加读取权限
    ls -ld /var/www/html/  # 列出源目录的详细信息
    
  5. 启动rsync服务
    rsync --daemon  # 以守护进程方式启动rsync服务
    netstat -anpt | grep rsync  # 检查rsync服务是否在监听端口
    
  6. 关闭rsync服务
    kill $(cat /var/run/rsyncd.pid)  # 杀死rsync进程
    rm -rf /var/run/rsyncd.pid  # 删除pid文件
    

发起端配置

  1. 基本格式和常用选项
    rsync [选项] 原始位置 目标位置  # rsync的基本使用格式
    
    常用选项:
  • -r:递归模式,包含目录及子目录中的所有文件。
  • -l:对于符号链接文件仍然复制为符号链接文件。
  • -v:显示同步过程的详细(verbose)信息。
  • -z:在传输文件时进行压缩(compress)。
  • -p:保留文件的权限标记。
  • -t:保留文件的时间标记。
  • -g:保留文件的属组标记(仅超级用户使用)。
  • -o:保留文件的属主标记(仅超级用户使用)。
  • -D:保留设备文件及其他特殊文件。
  • -H:保留硬连接文件。
  • -a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
  • -A:保留 ACL 属性信息。
  • --delete:删除目标位置有而原始位置没有的文件。
  • --checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
  1. 下载资源到本地备份
    rsync -avz backuper@192.168.80.10::wwwroot /opt/  # 使用rsync从远程服务器同步文件到本地目录
    
    rsync -avz rsync://backuper@192.168.80.10/wwwroot /opt/  # 使用rsync协议从远程服务器同步文件到本地目录
    
  2. 免交互格式配置
    echo "abc123" > /etc/server.pass  # 创建包含密码的文件
    chmod 600 /etc/server.pass  # 设置文件权限,仅所有者可读写
    crontab -e  # 编辑定时任务
    30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.80.10::wwwroot /opt/  # 每晚22:30执行rsync同步任务
    systemctl restart crond  # 重启定时任务服务
    systemctl enable crond  # 设置定时任务服务开机自启
    
  3. 使用ssh认证方式
    rsync 有两种常用的认证方式,一种为 rsync-daemon 方式,另外一种则是 ssh
    在一些场合,使用 rsync-daemon 方式会比较缺乏灵活性,ssh 方式则成为首选。
    rsync -avz -e 'ssh -p 22' /var/www/html/index.html root@192.168.80.10:/opt/  # 使用ssh协议进行rsync同步
    
    -e 'ssh -p 22':rsync 使用 ssh 指定端口,端口如果是 22 默认端口则不用指定该参数。

发起端配置rsync+inotify

使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

  1. 修改rsync源服务器配置文件
    vim /etc/rsyncd.conf  # 编辑rsync配置文件
    
    修改read only = no,重启rsync服务。关闭只读,上行同步需要可以写
  2. 调整inotify内核参数
    vim /etc/sysctl.conf  # 编辑内核参数配置文件
    fs.inotify.max_queued_events = 16384  # 最大监控事件队列
    fs.inotify.max_user_instances = 1024  # 最多监控实例数
    fs.inotify.max_user_watches = 1048576  # 每个实例最多监控文件数
    sysctl -p  # 应用内核参数更改
    
  3. 安装inotify-tools
    tar zxvf inotify-tools-3.14.tar.gz -C /opt/  # 解压inotify-tools源码包
    cd /opt/inotify-tools-3.14  # 进入源码目录
    ./configure  # 配置编译选项
    make && make install  # 编译并安装inotify-tools
    
  4. 编写触发式同步脚本
    vim /opt/inotify.sh  # 编辑触发式同步脚本
    
    添加内容:
    #!/bin/bash
    INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"  # inotifywait命令,监控文件变化
    RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.80.10::wwwroot/"  # rsync同步命令
    $INOTIFY_CMD | while read DIRECTORY FILE EVENT  # 循环读取监控结果
    do
        if [ $(pgrep rsync | wc -l) -le 0 ] ; then  # 如果rsync未在执行,则立即启动
            $RSYNC_CMD  # 执行rsync同步命令
        fi
    done
    
    chmod +x /opt/inotify.sh  # 设置脚本可执行权限
    chmod 777 /var/www/html/  # 设置源目录可读写执行权限
    chmod +x /etc/rc.d/rc.local  # 设置系统启动脚本可执行权限
    echo 'nohup /opt/inotify.sh &' >> /etc/rc.d/rc.local  # 将脚本添加到系统启动项
    

使用rsync快速删除大量文件

mkdir /home/blank  # 创建一个空目录
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp/  # 使用rsync快速清空目标目录

选项说明:

  • --delete-before: 接收者在传输进行删除操作
  • -a: 归档模式,表示以递归方式传输文件,并保持所有文件属性
  • -H: 保持硬连接的文件
  • -v: 详细输出模式
  • --progress: 在传输时显示传输过程
  • --stats: 给出某些文件的传输状态

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

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

相关文章

ES + SkyWalking + Spring Boot:日志分析与服务监控(三)

目录 一、搭建SkyWalking 1.1 版本选择 1.2 下载安装 1.3 配置启动 1.4 SkyWalking UI介绍 二、Springboot项目使用 2.1 Agent下载 2.2 Agent配置skywalking oap地址 2.3 IDEA配置Agent地址 2.4 生成的ES索引介绍 三、在kibana上查看日志 四、问题和解决 3.1 日志…

如何快速搭建一个spring boot项目

一、准备工作 1.1 安装JDK:确保计算机上已安装Java Development Kit (JDK) 8或更高版本、并配置了环境变量 1.2 安装Maven:下载并安装Maven构建工具,这是Spring Boot官方推荐的构建工具。 1.3 安装代码编辑器:这里推荐使用Inte…

spring-第十三章 AOP

spring 文章目录 spring前言1.AOP介绍2.AOP七大术语3.切点表达式4.使用spring的AOP4.1概述4.2准备工作4.3基于注解方式使用AOP4.3.1准备目标类和目标方法4.3.2编写配置类4.3.3编写通知类4.3.4编写测试类4.3.5通知类型4.3.6切面的先后顺序4.3.7PointCut注解通用切点 4.4基于XML方…

jmeter常用配置元件介绍总结之安装插件

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之安装插件 1.下载插件2.安装插件管理包3.不用插件管理包,直接官网插件下载安装 1.下载插件 jm…

MySQL 多数据库备份与恢复,包括查询,函数,SP

一、备份语句: mysqldump 可以用来导出单个数据库、多个数据库,甚至所有数据库的数据。以下是导出多个数据库到指定文件位置的语法和具体案例。 基本语法 mysqldump -u [username] -p[password] --databases [db1] [db2] ... > [file_path] -u: …

contenteditable实现需要一个像文本域一样的可编辑框

我这里是因为左上和右下有一个固定的模板,所有用textarea有点不方便,查了下还有一个方法可以解决就是在需要编辑的元素上加上 :contenteditable"true" 完整代码如下,因为这个弹窗是两用的,所以用messageType做了一下判…

linux 安装anaconda3

1.下载 使用repo镜像网址下载对应安装包 右击获取下载地址,使用终端下载 wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh2.安装 使用以下命令可直接指定位置 bash Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /home/anaconda3也…

如何选择适合的AWS EC2实例类型

在云计算的世界中,Amazon Web Services(AWS)提供了丰富的服务,其中Elastic Compute Cloud(EC2)是最受欢迎的服务之一。选择合适的EC2实例类型对于确保应用程序的性能和成本效益至关重要。我们九河云通过本文…

(蓝桥杯C/C++)——基础算法(下)

目录 一、时空复杂度 1.时间复杂度 2.空间复杂度 3.分析技巧 4.代码示例 二、递归 1.递归的介绍 2.递归如何实现 3.递归和循环的比较 4.代码示例 三、差分 1.差分的原理和特点 2.差分的实现 3.例题讲解 四、枚举 1.枚举算法介绍 2.解空间的类型 3. 循环枚举解…

7.5 inch电力线载波通信技术

7.5寸电子桌牌 产品型号 PE75R_D_W 尺寸 176.2*137.15*80mm 屏幕尺寸 7.5 inch 显示区域(mm) 163.2(H) * 97.92(V) 分辨率 800*480 显示技术 电子墨水屏双面显示 显示颜色 黑/白/红 外观颜色 银色 工作温度 0-40℃ 视角 180 支持内容格式 文本/图片/二维码…

Linux下的ADC

ADC ADC简介 ADC是 Analog Digital Converter 的缩写,翻译过来为模数转换器,ADC可以将模拟值转换成数字值。模拟值是什么呢?比如我们日常生活中的温度,速度,湿度等等都是模拟值。所以如果我们想测量这些模拟值的值是多少&#x…

星空天文 2.0.1| 完全免费的观星软件,无注册登录,天文爱好者必备。

星空天文是一款完全免费且功能强大的观星软件,适用于安卓平台。无需注册登录即可使用,界面设计精美且操作简单。软件支持AR实景模式,可以将实景与星空结合,增强观星体验。用户可以设定任意日期和时间来观察不同时段的天空&#xf…

书生大模型实战营第四期-入门岛-1. Linux前置基础

入门岛-Linux前置基础 书生大模型实战营-第四期-Linux前置基础: 任务:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/linux/task.md 文档:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/linux 任务描述完成所需时…

JavaEE初阶--servlet篇(三)HttpServlet/response/request对应方法使用

文章目录 1.总括说明2.httpservlet父类2.1方法介绍2.2dopost方法的演示2.3doput方法的演示 3.HttpServletRequest类3.1方法说明3.2方法使用演示3.3getparameter方法使用3.4使用form表单的方式3.5jackson获取参数 4.HttpResponse类4.1设置状态码4.2自动进行刷新4.3重定向跳转4.3…

前后端分离,Jackson,Long精度丢失

案例:后端接口放回一个Long数据 GetMapping("/testForLong")public Map<String, Object> testForLong() {Map<String, Object> map new HashMap<>();map.put("aaa", 1234567890123456789L);return map;}实际前端接收的数据 前后端数据…

记某单位众测项目漏洞挖掘中的一些手法

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 一个想当文人的黑客 &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【edusrc漏洞挖掘】 【VulnHub靶场复现】【面试分析】 &#x1f389;欢迎…

用 Python 写了一个天天酷跑(附源码)

Hello&#xff0c;大家好&#xff0c;给大家说一下&#xff0c;我要开始装逼了 这期写个天天酷跑玩一下叭&#xff01; 制作一个完整的“天天酷跑”游戏涉及很多方面&#xff0c;包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言&#xff0c;…

芯片设计公司ERP系统如何实现一体化管理

在当今高科技迅猛发展的时代&#xff0c;芯片设计行业作为信息技术的核心&#xff0c;正面临着日益激烈的市场竞争和复杂多变的市场需求。为了提升企业的运营效率和市场竞争力&#xff0c;芯片设计公司纷纷引入ERP(企业资源计划)系统&#xff0c;以实现一体化管理。接下来我们跟…

50岁+人群月活超1亿,短剧迎来新对手,小程序游戏“收割”中老年

抢夺中老年流量&#xff1a;微短剧向左&#xff0c;小游戏向右 作者&#xff5c;AgeClub 干货抢先看 1.《黑神话&#xff1a;悟空》走红&#xff0c;吸引大量玩家入坑单机市场。与硬核单机游戏不同&#xff0c;在渗透率更高的小游戏领域&#xff0c;聚集了更多“网瘾”中老年…

手机如何打开chm文件

chm文件一般是帮助文档&#xff0c;手机一般不能直接打开&#xff0c;我们可以通过下载阅读器来打开 以荣耀手机为例 首先下载掌阅iReaderAPP 下载完成后打开掌阅 点击书架&#xff0c;右上角本机导入 搜索你下载的chm文件的名字 勾选&#xff0c;加入书架(应该保留目录) 在书…