揭秘强大的文件同步利器Rsycn

目录

引言

一、Rsycn基础介绍

(一)基本概念

(二)特性

(三)同步方式

(四)服务备份角色

(五)命令工具

(六)配置格式

(六)同步类型

三、实现远程同步

(一)实现下行同步

1.服务端配置

1.1 修改服务端配置文件

1. 2 添加访问信息

2.客户端同步

2.1 使用命令进行同步

2.2 免密同步

2.3 同步删除

(二)实现上行同步

(三)实现实时同步

1.确认服务端配置文件

2.调整客户端内核参数

3.安装 inotify-tools工具

4.实时监控

5.实时同步

总结


引言

在日常的数据管理和备份工作中,一款优秀的文件同步工具显得尤为重要。今天,我们将聚焦于Linux世界中备受推崇的一款实用工具——Rsycn。这款工具以其高效、灵活、可靠的特性,在数据迁移、备份、镜像创建等领域发挥着至关重要的作用。本文将深入剖析Rsycn的基本原理,并结合实际案例探讨其在不同场景下的应用。


一、Rsycn基础介绍

(一)基本概念

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。

它采用增量同步技术,仅传输文件的差异部分,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用,极大地提高了数据传输效率。其支持本地到本地、本地到远程、远程到本地等多种同步方式,并且可以跨越多种文件系统进行操作。

(二)特性

它的特性如下:

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。 无须特殊权限即可安装。

快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜像

(三)同步方式

完整备份:每次备份都是从备份源将所有的文件或目录备份到目的地。 

差量备份:备份上次完全备份以后有变化的数据(针对的上次的完全备份,备份过程中不清除存档属性

增量备份:备份上次备份以后有变化的数据(不论哪种类型的备份,有变化的数据就备份,会清除存档属性)

(四)服务备份角色

在 rsync 工具中,涉及到的几个角色概念解释如下:

备份源(Backup Source): 这是指实际包含需要备份数据的机器或系统。当进行远程同步时,备份源通常是提供数据的服务器,即你想要从那里复制或同步数据的位置。在 rsync 进程中,它可以是本地的一个目录,也可以是远程服务器上的目录。

发起端(Initiator / Sender): 发起端是启动 rsync 同步操作的那台计算机或进程。通常,它是执行 rsync 命令的一方,并向服务端发送同步请求以及相关数据。发起端可能需要指定源路径(要同步的文件和目录),以及目标路径(同步到何处)。

服务端(Server): 在 rsync 中,服务端可以指运行 rsync daemon(服务程序)的机器,这个守护进程监听特定端口等待客户端连接并发起同步请求。服务端提供了待同步的数据资源,并接收发起端发来的差异数据,完成同步操作。服务端通常配置了固定的同步模块(module)和相应的访问权限。

客户端(Client): 客户端则是与服务端进行交互以执行同步任务的机器或进程。在 rsync 中,发起同步操作的一方同时也是客户端。它既可以连接至 rsync daemon 进行同步,也可以通过 SSH 协议直接与另一台机器上的 rsync 客户端进行点对点的同步。客户端会根据指令从备份源获取数据,并将其传输至目标位置。

总结起来,在一次 rsync 数据同步过程中:

  • 备份源提供数据;
  • 发起端(同时也是客户端)启动同步操作;
  • 服务端响应同步请求并提供同步服务;
  • 数据从备份源经过发起端(客户端)和/或服务端的协调处理,最终到达目标位置

(五)命令工具

基本格式:rsync [选项] 原始位置 目标位置

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

以本机同步为例

(六)配置格式

主要是远程同步的配置格式

主要区别在于是否通过 rsync 的守护进程 (daemon) 来进行通信:

格式一:
用户名@主机地址::共享模块名
#这个格式是用于连接到运行 rsync 守护进程(rsync daemon)的远程服务器,
#并指定一个共享模块(module)进行同步。

格式二:

rsync://用户名@主机地址/共享模块名

#这个格式也是用来连接到运行 rsync 守护进程的远程服务器,
#但是采用了 URI(统一资源标识符)的形式。虽然看上去和格式一稍有不同,但其实它们的功能是一样的

两种格式的主要应用场景是当你需要从一个设置了rsync守护进程的远程服务器进行高效、大规模的
数据同步时。守护进程模式下的rsync可以提高并发性能和灵活性,允许管理员设置更复杂的访问控制策略

(六)同步类型

在使用rsync进行文件同步时,上行同步(Upstream Sync)和下行同步(Downstream Sync)是指数据流向的不同方向:

1.上行同步

上行同步(Upstream Sync)是指从本地机器(发起端)向远程服务器(同步源)上传数据的过程。例如,你可能想要将本地计算机上的某个目录或文件同步到云服务器或其他远程主机上。

2.下行同步

下行同步(Downstream Sync)是指从远程服务器下载数据到本地机器的过程。这种情况下,你会从远程服务器获取数据同步到本地存储。

三、实现远程同步

环境准备

服务端192.168.83.40
客户端192.168.83.30

默认情况下,rsync服务是已经安装的,如果是最小化安装的系统,可能需要手动去安装rsync服务

官方网站为:rsync

(一)实现下行同步

1.服务端配置

1.1 修改服务端配置文件

在配置文件(/etc/rsyncd)中添加以下信息

uid = root 和 gid = root
#设置rsync守护进程以root用户和root组的身份运行,确保其有足够的权限访问和同步文件。

use chroot = yes
#当此选项启用时,rsync在处理客户端请求时,会在path指定的目录内创建一个虚拟的根目
#录,限制客户端对服务器其余部分的访问。

port 873
#设置rsync服务监听的端口号,默认rsync守护进程监听的就是873端口。

log file = /var/log/rsyncd.log
#指定rsync守护进程的日志文件路径,所有服务相关的活动将记录在此文件中。

pid file = /var/run/rsyncd.pid
#保存rsync守护进程PID(进程标识符)的文件路径,用于监控和管理rsync守护进程。

hosts allow = 192.168.83.0/24
#允许来自192.168.83.0/24这个IP段的客户端连接rsync服务。

dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#不对这些后缀名的文件进行压缩传输,因为这些文件已经是压缩格式,再压缩意义不大,
#反而可能增加CPU负担。

[test]  #定义了一个名为test的模块,客户端在连接时需要指定这个模块名称。

path = /data/test/     #为test模块指定实际的同步目录路径。

comment = Document Root of www.rsynctest.com
#对模块的注释,描述模块的作用。

read only = yes
#设定模块为只读模式,客户端只能从该模块下载数据,不能上传或修改数据。

auth users = testuser 
#定义了允许访问此模块的认证用户列表,此处只有centos用户有权限。

secrets file = /etc/rsyncd_users.db
#指定包含用户凭据的文件,客户端在连接时需要提供对应的用户名和密码。
#此文件应为每行一个条目,格式为username:password。
1. 2 添加访问信息

[root@rsync-server ~]#mkdir  /data/test
#创建共享目录

[root@rsync-server ~]#vim  /etc/rsyncd_users.db
[root@rsync-server ~]#cat  /etc/rsyncd_users.db
testuser:123456
#添加客户端访问时使用的用户与密码,用户名与配置文件中的auth users值相等

[root@rsync-server ~]#chmod 600 /etc/rsyncd_users.db
#给该文件属主只读权限,保证用户信息安全

[root@rsync-server ~]#chmod +r /data/test
#给同步目录添加所有的读取权限,保证所有用户都能读取该目录

[root@rsync-server ~]#ll -d /etc/rsyncd_users.db;ll  -d /data/test
-rw-------. 1 root root 16 Apr  8 15:25 /etc/rsyncd_users.db
drwxr-xr-x. 2 root root 6 Apr  8 15:25 /data/test

[root@rsync-server ~]#rsync --daemon
#以守护进程开启rsync服务

[root@rsync-server ~]#echo "welcome to rsync" >/data/test/rsync.txt
[root@rsync-server ~]#cat /data/test/rsync.txt
welcome to rsync
#创建同步文件

2.客户端同步

2.1 使用命令进行同步

格式一:

rsync -avz 用户名@服务端IP::模块名 本机同步目录

格式二:

rsync -avz rsync://用户名@服务端IP/模块名 本机同步目录

用户名与密码为服务端/etc/rsyncd_users.db文件中添加的信息

2.2 免密同步

2.3 同步删除

可以将同步命令写入crontab计划任务当中,定时进行数据同步

(二)实现上行同步

(三)实现实时同步

rsync 实现实时同步并非其默认功能,但可以通过结合inotify工具来间接实现近乎实时的文件同步。rsync 是基于文件差异对比进行同步的,它的优点在于仅传输文件的不同部分,非常适合增量备份和同步场景

1.确认服务端配置文件

以上行同步为例

确认同步目录有读写权限

2.调整客户端内核参数

fs.inotify.max_queued_events
#这个参数表示inotify队列中可以存储的最大事件数量。
#当超过这个值时,旧的未读取的事件将会被丢弃。
#如果你想监控大量文件变动并确保不会丢失事件,可以适当增大这个值。

fs.inotify.max_user_instances
#这个参数指定了单个用户可以创建的inotify实例的最大数量。
#每个inotify实例对应着对一个文件系统目录树的监控。
#如果你需要同时监控多个目录,可能需要增加这个值。

fs.inotify.max_user_watches
#这个参数限制了单个用户可以监控的最大文件数量(或目录数量,因为监控目录实际
#上是对目录及其所有子目录和文件的监控)。
#当你需要监控的文件或目录很多时,就需要增大这个值。

3.安装 inotify-tools工具

[root@rsync-client opt]#yum install gcc gcc-c++ make -y   
#安装编译环境

[root@rsync-client opt]#ls
inotify-tools-3.14.tar.gz
#准备源码包,可以从官网下载
 
[root@rsync-client opt]#tar  xf inotify-tools-3.14.tar.gz
[root@rsync-client opt]#ls
inotify-tools-3.14  inotify-tools-3.14.tar.gz
#解压源码包

[root@rsync-client opt]#cd  inotify-tools-3.14/
[root@rsync-client inotify-tools-3.14]#./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
.......................
[root@rsync-client inotify-tools-3.14]#make -j 4 && make install
#编译安装

安装完毕后会生成inotifywait与inotifywatch两个工具

inotifywait
#是一个用于监控文件或目录变化的命令行工具,当指定的文件或目录发生指定类型的事件时
#(如打开、关闭、修改、移动、删除等),它会阻塞并报告这些事件。这对于自动化脚本和实
#时监控文件系统活动非常有用,例如在文件修改后触发 rsync 进行同步。

inotifywatch
#是一个用于统计给定文件或目录在一段时间内的事件发生的次数的工具。
#它不会实时报告每一次事件,而是汇总一段时间内的事件统计数据。

4.实时监控

-e   #用来指定要监控哪些事件
-m   #表示持续监控
-r   #表示递归整个目录
-q   #简化输出信息

modify,create,move,delete 表示监控四种类型的事件:

modify  #文件内容被修改。
create  #在监视目录下创建了新文件或目录。
move    #文件或目录被移动(重命名)。
delete  #文件或目录被删除。

5.实时同步

可以通过脚本的方式来监控,从而触发同步命令,达到实时同步的效果

#!/bin/bash
inot_cmd="inotifywait -mrq -e modify,create,attrib,move,delete /bak/"
#将执行inotifywait实时监控的命令定义成变量inot_cmd

sync_cmd="rsync -azH --delete --password-file=/etc/rsync_pass.txt 
/bak/ testuser@192.168.83.40::test"
#将执行rsync远程同步的命令定义成变量sync_cmd
#需要注意的是,在同步目录后面加/,如/bak/表示同步该目录下的文件,不加/,则直接同步该目录

$inot_cmd | while read DIRECTORY EVENT FILE
#执行 inotifywait 命令并将其输出通过管道传递给 while 循环。循环读取每一行输出,
#按空格拆分成 DIRECTORY(发生事件的目录)、EVENT(事件类型)和 FILE(受影响的文件
#或目录)三个变量
do
    if [ $(pgrep rsync | wc -l) -le 0 ]
	then        
	$sync_cmd
    fi
#检查当前系统中是否有正在运行的 rsync 进程。如果有,则跳过本次循环;
#如果没有正在运行的 rsync 进程,则执行sync_cmd变量中定义的同步命令。
done

在客户端建立文件进行测试

设置脚本开机自启动

上述设置完毕后,每次开机都会加载rc.local文件,并以绝对路径(/data/romove_sync.sh)执行脚本文件,开启实时监控同步

总结

rsync 是一款广泛应用于Linux和其他类Unix系统中的强大文件同步工具,它的核心特点和优势包括:

增量同步:rsync通过比较源文件和目标文件的差异,仅传输有变动的部分,极大地提高了数据同步速度和带宽利用率。

双向同步:不仅可以将数据从源端推送到目标端,也可从目标端拉取数据,支持本地与本地、本地与远程等多种同步场景。

文件属性保持:rsync在同步过程中能保留文件的元数据,包括权限、所有权、时间戳、软硬链接等。

安全传输:可通过SSH等安全协议进行加密传输,确保敏感数据的安全性。

删除选项:提供 -delete 参数可以删除目标目录中源目录不再存在的文件,实现两边目录结构一致。

断点续传:在同步过程中如果因故中断,下次同步可以从上次中断的地方继续,避免重复传输。

高效与低负载:rsync使用高效的算法计算文件差异,且能够在同步时启用压缩功能以节省带宽。

多种工作模式:rsync支持通过本地文件系统拷贝、通过SSH连接远程主机、连接到rsync daemon等多种工作模式。

总之,rsync是一个功能全面、灵活且高效的文件同步工具,适用于日常备份、网站镜像、数据迁移等各种场合。

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

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

相关文章

[C++][C++11][六] -- [线程库]

目录 1.thread类的简单介绍2.线程对象的构造方法1.无参构造2.带参构造3.移动构造4.注意 3.thread提供的成员函数4.获取线程id5.线程函数的参数问题1.指针2.借助std::ref函数3.借助lambda表达式 6.join和detach1.join()2.detach() 7.[mutex](http://在C11中,Mutex总共…

OAuth2.0客户端和服务端Java实现

oauth2 引言 读了《设计模式之美》和《凤凰架构》架构安全篇之后,决定写一个OAuth2.0的认证流程的Demo,也算是一个阶段性的总结,具体原理实现见《凤凰架构》(架构安全设计篇)。 涉及到的源码可以从https://github.com/WeiXiao-Hyy/oauth2获…

智慧农场物联网系统:重塑农业的未来

随着科技的进步,物联网技术正在逐渐改变我们的生活。在农业领域,物联网系统也正在发挥着越来越重要的作用,为智慧农场的发展提供了新的可能。本文将深入探讨智慧农场物联网系统的优势、应用场景、技术实现以及未来发展趋势。 一、智慧农场物…

Java Web这一路走来

大部分Java应用都是Web或网络应用,MVC框架在Java框架中有着举足轻重的地位,一开始的Web应用并不现在这样子的,一步一步走来,每一步都经历了无数的血和泪的教训,以史为镜可以知兴替。 1. 草莽时代 早期的Java服务端技…

只有线上出了bug,老板们才知道测试的价值?

有同学说,测试没价值,我们测试团队刚被拆散了。 也有同学说,公司不重视测试,我觉得我们就是测试得太好了。哪天线上出个bug,老板们就知道测试的价值了。 还有人给测试同学规划职业发展路径,就是不做测试&…

蓝桥杯算法题:练功

【问题描述】 小明每天都要练功,练功中的重要一项是梅花桩。 小明练功的梅花桩排列成 n 行 m 列,相邻两行的距离为 1,相邻两列的距离也为 1。 小明站在第 1 行第 1 列上,他要走到第 n 行第 m 列上。小明已经练了一段时间&#xff…

【IC前端虚拟项目】spyglass lint环境组织与lint清理

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 和上个虚拟项目的lint清理环节一样,关于spyglass的lint清理功能与流程还是大家通过各种资料去学习下就好啦。和之前不同的事,这次的虚拟项目里我把流程封装为Makefile,…

中老年人购买需求不断上升,下一个电商新风口又会在哪里?

大家好,我是电商花花。 电商互联网时代,不再是年轻人的刚需。 中老年消费市场与日俱增,据统计,我国中老年人口已近10亿,占比巨大,且呈上升趋势。 50、60后的中老年人入网率已然在加快提升,相…

提示工程中的10个设计模式

我们可以将提示词定义为向大型语言模型(Large Language Model,LLM)提供的一个查询或一组指令,这些指令随后使模型能够维持一定程度的自定义或增强,以改进其功能并影响其输出。我们可以通过提供细节、规则和指导来引出更有针对性的输出&#x…

HDLbits 刷题 --Reduction

Given a 100-bit input vector [99:0], reverse its bit ordering. 译&#xff1a; 给定一个100位的输入向量 [99:0]&#xff0c;反转其位的顺序。 module top_module( input [99:0] in,output [99:0] out );integer i;always(*) beginfor(i0;i<100;i)out[99-i]in[i];end…

如何使用ChatGPT制作一个休闲小游戏集合的网站?

1. 先看制作的网站效果 先预览一个使用ChatGPT制作的休闲小游戏集合网站&#xff1a;CasualMiniGame.com 2. 使用描述词生成网站首页 使用ChatGPT生成一个在线的休闲小游戏网站是一项有趣的任务。ChatGPT可以生成代码&#xff0c;展示您输入的描述词对应的网站效果。以下是Ch…

Metasploit Pro 4.22.3-2024040301 (Linux, Windows) - 专业渗透测试框架

Metasploit Pro 4.22.3-2024040301 (Linux, Windows) - 专业渗透测试框架 Rapid7 Penetration testing, Release Apr 03, 2024 请访问原文链接&#xff1a;Metasploit Pro 4.22.3-2024040301 (Linux, Windows) - 专业渗透测试框架&#xff0c;查看最新版。原创作品&#xff0…

希亦、添可、追觅洗地机深入对比,哪个更胜一筹?选择不再迷茫

洗地机不仅能快速打扫地面&#xff0c;省时又省力&#xff0c;还能把室内弄得干干净净的&#xff0c;用起来感觉特舒服。但是面对目前市面上几百个型号的洗地机&#xff0c;在观望洗地机的家庭&#xff0c;大多数都是不确定哪款洗地机适合自己&#xff0c;今天笔者就带来了三款…

【NLP练习】中文文本分类-Pytorch实现

中文文本分类-Pytorch实现 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、准备工作 1. 任务说明 本次使用Pytorch实现中文文本分类。主要代码与文本分类代码基本一致&#xff0c;不同的是本次任务使用…

【学习心得】Python中的queue模块使用

一、Queue模块的知识点思维导图 二、Queue模块常用函数介绍 queue模块是内置的&#xff0c;不需要安装直接导入就可以了。 &#xff08;1&#xff09;创建一个Queue对象 import queue# 创建一个队列实例 q queue.Queue(maxsize20) # 可选参数&#xff0c;默认为无限大&am…

libVLC 提取视频帧使用QWidget渲染

在前面的文章中&#xff0c;我们使用libvlc_media_player_set_hwnd设置了视频的显示的窗口。 libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); 如果我们想要提取每一帧数据&#xff0c;将数据渲染到QWidget上&#xff0c;该如何操作呢&a…

西圣、漫步者、万魔开放式耳机怎么样?无广真实测评对比推荐

开放式耳机因其独特的音质体验和佩戴舒适度&#xff0c;受到了越来越多消费者的青睐。西圣、漫步者、万魔作为国内知名的耳机品牌&#xff0c;各自都推出了自家的开放式耳机产品&#xff0c;那么&#xff0c;这三款耳机究竟如何呢&#xff1f;身为开放式耳机党的我&#xff0c;…

小白如何挖到自己的第一个漏洞

目录 挖洞公式 个人介绍 我的技术与生活——小站首页 | Hexohttps://xiaoyunxi.wiki/ 漏洞介绍 漏洞详情 如何进行信息收集(最快捷) 方法1(Google Hacking) 0x01 常见Google语法 0x02 不是经常用的关键字 0x03 特殊符号使用 0x04 布尔操作 0x05注意事项 0x06 使用…

【C++ STL算法】sort 排序

文章目录 【 1. 基本原理 】【 2. sort 的应用 】实例 - sort 函数实现 升序排序和降序排序 函数名用法sort (first, last)基于 快速排序&#xff0c;对容器或普通数组中 [ first, last ) 范围内的元素进行排序&#xff0c;默认进行升序排序&#xff08;从小到大&#xff09;。…

在linux上面安装nexus私有maven库

问题 需要在EC2机器上面安装私有maven库。 步骤 更新OS sudo yum update -yJDK11 # 安装JDK11 sudo yum install java-11-amazon-corretto # 查询jdk11位置 sudo alternatives --config java内容如下&#xff1a; There are 2 programs which provide java.Selection …