分布式运用——rsync远程同步

news2024/11/23 13:27:00

一、rsync的背景和原理

rsync(Remote Sync,远程同步)是由Andrew Tridgell于1996年开发的一款开源软件。 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。

1.rsync的功能

 2.rsync的应用场景

文件备份:rsync可以快速而高效地完成文件备份,通过增量备份功能,节省存储空间和传输时间。
数据同步:rsync能够确保不同服务器或设备之间的文件保持同步,使得多节点间的数据一致性得以保障。
网络传输:rsync通过压缩和增量传输的特性,非常适合用于跨网络传输大文件或者大量小文件。

3.使用rsync的基本命令

 4.scp与rsync的区别

综上所述,scp适用于简单的文件复制和传输,而rsync则更适用于需要高效、增量同步和备份的场景。选择使用哪个工具取决于具体的需求和预期的功能。

二、配置rsync源服务器 

1.关闭防火墙

systemctl stop firewalld
setenforce 0
rpm -q rsync							#一般系统已默认安装rsync

 2.建立/etc/rsyncd.conf 配置文件

vim /etc/rsyncd.conf			                    	#添加以下配置项
uid = root
gid = root
use chroot = yes										#禁锢在源目录
address = 192.168.190.50								#监听地址
port = 873												#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log							#日志文件位置
pid file = /var/run/rsyncd.pid							#存放进程 ID 的文件位置
hosts allow = 192.168.190.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[wwwroot]												#共享模块名称
path = /var/www/html									#源目录的实际路径
comment = Document Root of www.fxk.com
read only = yes											#是否为只读
auth users = backuper									#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db						#存放账户信息的数据文件

#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:123456					#无须建立同名系统用户,backuper为用户名,123456为密码。

chmod 600 /etc/rsyncd_users.db

 3.保证所有用户对源目录/var/www/html 都有读取权限

chmod +r /var/www/html/
ls -ld /var/www/html/

 4.启动 rsync 服务程序

rsync --daemon				#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

netstat -anpt | grep rsync

 5.关闭 rsync 服务

kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid

三、发起端 

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

1.常用选项

2.将指定的资源下载到本地/opt 目录下进行备份。

格式一:
rsync -avz backuper@192.168.190.50::wwwroot /opt/					#密码123456

格式二:
rsync -avz rsync://backuper@192.168.190.50/wwwroot /opt/

 3.免交互格式配置

echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
rsync -az --delete --password-file=/etc/server.pass backuper@192.168.190.50::wwwroot /opt/

定时同步
crontab -e
30 0 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.190.50::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。

systemctl restart crond
systemctl enable crond

 四、发起端配置 rsync+inotify

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

1.修改rsync源服务器配置文件 

vim /etc/rsyncd.conf
......
read only = no											#关闭只读,上行同步需要可以写

kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon	
netstat -anpt | grep rsync

chmod 777 /var/www/html/

 2.调整 inotify 内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数:max_queue_events(监控事件队列,默认值为16384)、max_user_instances(最多监控实例数,默认值为128)、max_user_watches(每个实例最多监控文件数,默认值为8192)。当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches

vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 102400

sysctl -p

3.安装 inotify-tools 

用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

tar zxvf inotify-tools-3.14.tar.gz -C /opt/

cd /opt/inotify-tools-3.14
./configure
make && make install

#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /var/www/html

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

 4.在另外一个终端编写触发式同步脚本

注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.80.10::wwwroot/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
	#如果rsync未在执行,则立即启动
        $RSYNC_CMD
    fi
done


chmod +x /opt/inotify.sh
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local				#加入开机自动执行

 上述脚本用来检测本机/var/www/html 目录的变动情况,一旦有更新触发 rsync 同步操作,上传备份至服务器 192.168.190.50 的 wwwroot 共享目录下。
触发式上行同步的验证过程如下:

  1. 在本机运行 /opt/inotify.sh 脚本程序。
  2. 切换到本机的 /var/www/html 目录,执行增加、删除、修改文件等操作。
  3. 查看远端服务器中的 wwwroot 目录下的变化情况。
     

五.使用rsync来实现快速删除大量文件。 

假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好使了,因为要等待很长一段时间。在这种情况下我们可以使用rsync来巧妙处理。rsync实际用的是替换原理。

先建立一个空的文件夹
mkdir /root/noelle
用rsync删除目标目录
rsync --delete-before -a -H -v --progress --stats /root/noelle /usr/local/nginx/proxy_temp/
这样目标目录很快就被清空了
选项说明:

mkdir /root/noelle
#建立一个空的文件夹
cd /root/noelle/
touch {1..10000}
#模拟/date/test文件中有1万个文件数据
rsync --delete-before -avH --progress --stats /root/noelle
#使用rsync删除/root/noelle目录中的文件,用空文件夹同步了test文件夹
选项说明:
--delete-before 接收者在传输进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件
-v 详细输出模式
-H 保持硬连接的文件
--progress 在传输时显示传输过程
--stats 给出某些文件的传输状态
cd /root/noelle
ls
#进入查看数据为空

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

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

相关文章

笔试强训第33天

目录 剪花布条 客似云来 剪花布条 #include <iostream> #include <string>using namespace std;int main() {string s,t;while(cin>>s>>t){int ans 0;while(s.find(t) ! string::npos){s.erase(s.find(t), t.size());ans;}cout<<ans<<en…

Codeforces Round 877 (Div. 2) A-E

题目链接&#xff1a;Dashboard - Codeforces Round 877 (Div. 2) - Codeforces A - Blackboard List 解题思路&#xff1a;因为取的是绝对值&#xff0c;所以有负数肯定取负数&#xff0c;没负数就取最大值。 #include <bits/stdc.h> using namespace std; const int…

基于PyQt5的桌面图像调试仿真平台开发(7)伽马矫正

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

小程序的剪贴板 实现复制文本功能

小程序的剪贴板 实现复制文本功能 wx.setClipboardData wx.setClipboardData() 设置系统剪贴板的内容。调用成功后&#xff0c;会弹出 toast 提示"内容已复制"&#xff0c;持续 1.5s Promise 风格 调用&#xff1a;支持微信 Windows 版&#xff1a;支持微信 Mac 版&…

Mac电脑如何与 Windows 用户共享文件?

在 Mac 上设置文件共享 选取苹果菜单 >“系统偏好设置”&#xff0c;然后点按“共享”。 选择“文件共享”复选框&#xff0c;然后点按“选项”。 选择“使用 SMB 来共享文件和文件夹”复选框。 在“Windows 文件共享”列表中&#xff0c;选择要与 Windows 用户共享文件的…

python语法

1、单行注释&#xff1a;# &#xff0c;多行注释&#xff1a; 2、python采用代码缩进和冒号来区别代码之间的层次 3、每个变量在使用前必须赋值&#xff0c;才会创建内存空间。python是基于值的内存管理&#xff0c;相同值指向同一空间。具有内存自动管理功能。不需要声明类…

亚马逊云科技生成式AI产品入围2023SAIL奖TOP30榜单项目

以“智联世界&#xff0c;生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;将于7月6日至8日在上海举行。本次大会将聚焦通用人工智能发展&#xff0c;紧抓生成式人工智能引发的行业热潮&#xff0c;探索未来产业新业态&#xff0c;超前谋划赋能数字经…

安装使用最新Photoshop beta(OpenAI模型)及基本Photoshop beta使用技巧

安装使用最新Photoshop beta 1. 注册Adobe美国地区账号2.下载安装Adobe Creative Cloud工具3.下载Photoshop beta4. 基本Photoshop beta使用技巧 1. 注册Adobe美国地区账号 adobe美国官网&#xff1a;https://www.adobe.com/ 首先我们进入官网注册账号 下面我们输入注册邮箱…

【网络编程】自定义协议+Json序列化与反序列化

文章目录 一、序列化与反序列化概念二、自定义协议设计网络计算机2.1 服务端2.1.1 服务端业务处理流程2.1.2 TCP的发送与接收缓冲区2.1.3 保证读取完整报文2.1.4 自定义协议——序列化与反序列化2.1.4.1 请求2.4.1.2 响应 2.1.5 计算流程2.1.6 在有效载荷前添加长度报头2.1.7 发…

解决vmWare ESXI 7.3报错,客户机操作系统已禁用 CPU。请关闭或重置虚拟机(ESXI使用遇到问题解决记录文持续使用持续更新)

一&#xff1a;分析客户机操作系统已禁用 CPU" 这个错误通常是由以下原因之一引起的&#xff1a; 1. 虚拟机配置不正确&#xff1a;可能是您在虚拟机配置中选择了不受支持的 CPU 类型或功能。某些操作系统可能需要特定的 CPU 功能才能正常运行。如果您的虚拟机配置与操作…

下载【T0】指令微调数据集

T0 benchmark&#xff08;或者叫P3&#xff09;是一个大规模的人工标注instruction tuning数据集&#xff0c;在ICLR 2021 T0一文中提出&#xff0c;其收集了来自huggingface hub上的多任务数据&#xff0c;并为每一个task都装备了来自prompt source的人工撰写指令。 P3数据集…

9、DataX安装部署

1、 DataX简介 1.1 DataX概述 DataX 是阿里巴巴开源的一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 源码地址&#xff1a;https://github.com/alibaba/…

基于高校图书馆的用户画像、可视化、模型预测、推荐算法项目实现

需要本项目的可以私信博主获取源码及项目&#xff01;&#xff01;&#xff01; 本研究基于高校图书馆的借阅信息、馆藏图书信息、读者入馆信息、用户信息等多维度的数据表&#xff0c;首先将不同年份的数据拼接在一起&#xff0c;按照时间维度进行整合&#xff0c;并保证数据…

快慢指针专题

总体思想&#xff1a;详解为什么用一步两步快慢指针&#xff1f;三步四步可以吗 - 预言2018 - 博客园 (cnblogs.com) 1. 为什么快慢指针一定会相遇&#xff1a; 2. 为什么 quick 指针每次走两步&#xff0c;而不是3、4步骤&#xff0c;是因为 如上图所示&#xff0c;若走2步&a…

TDsql增量merge导入load_data

TDsql增量merge导入load_data 项目组最近用了腾讯的TencentDB分布式数据库作为传统关系型数据库来保存少量应用数据。因此需要开发相对应的ETL功能代码&#xff0c;根据新数据库特性&#xff0c;使用自带的工具load_data作为导入的工具 准备表 使用load_data导入的表&#xf…

Python运维自动化Paramiko模块

paramiko学习笔记 为什么要用到paramiko模块安装paramiko模块paramiko介绍SSHClient---连接服务器exec_command---执行命令SFTPClient---传输文件下载和上传文件其它方法 为什么要用到paramiko模块 工作中常用到Linux服务器需要更新开发的代码&#xff0c;之前一直是使用xshell…

Python_多任务:进程、线程、协程

目录 进程 实现多进程 进程池 实现进程池 线程 实现多线程 多线程的资源竞争问题 互斥锁解决资源竞争问题 死锁 协程 gevent 进程 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程&#xff0c;是操作系统进行资源分配和调度的一个独立单位&am…

“多”维演进:智能编码的深度进化

我们在追求怎样的编码未来&#xff1f; 无处不在的视频渗透、井喷式的流量增长、多元的场景技术需求、用户对视频体验的“不将就”……音视频行业的快速发展却伴随着“编码标准升级速度缓慢”、“硬件红利见底”、“编码复杂度带来的成本问题”等众多挑战。 视频编码还“卷”得…

SQL Server 2008 r2 修改sa密码 通过sql server 身份验证登陆

SQL Server的两种身份验证模式是Windows验证模式和SQL Server验证模式。 sql server 2008 r2 修改sa密码 通过sql server 身份验证登陆 【解决方法如下】 通过windows 身份验证登陆后,首先选中服务器(右键)->属性 ->安全性->服务器身份验证修改为"SQL SERVER和W…

浅谈电瓶车在线充电管理系统的设计与应用

安科瑞 华楠 摘要&#xff1a;基于ARM 硬件平台&#xff0c;研究了电瓶车充电技术&#xff0c;提出了一种智能型电瓶车在线安全充电系统&#xff0c;该系统可根据实际充电情况实现智能断电&#xff0c;同时提供给用户一种远程充电、断电的平台&#xff0c;目的是防止电瓶车过度…