【devops】rsync介绍和使用

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

rsync介绍

# 什么是rsync同步工具,把一台机器上的文件传输到另一台。rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操作系统平台。这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及曾量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝
​
# rsync官方地址 [TP](https://rsync.samba.org/)
# rsync监听端口:873
# rsync运行模式:c/s
​
# rsync特性
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
## 远程,scp
scp 源文件 目标
​
# 推文件
scp /tmp/yum.log root@10.0.0.41:/root
# 推目录
scp -r /etc root@10.0.0.41:/root
​
# 拉文件
scp root@10.0.0.41:/root /tmp/yum.log
# 拉目录
scp -r root@10.0.0.41:/root /etc
​
ssh:22
ftp:21
rsync:873
​
C/S 架构:
Client/Server               # 客户端/服务器
​
B/S 
Browser/Server                # 浏览器/服务器
​
端口的范围:1-65535

小提示:利用rsync还可以实现删除文件和目录的功能,这又相当于rm命令,一个rsync相当于scp、cp、rm,但是还优于他们的每一个命令。

rsync备份类型

- 全量备份(支持):将产生的所有需要备份的文件或目录全部进行备份
- 增量备份(支持):基于上一次备份做的数据备份
- 差异备份(不支持差异备份):基于全量备份做的数据备份,也就是上一次如果也是差异,则可以直接将上一次备份删除

Rsync的传输模式

本地传输模式(类似命令cp)

# 语法
Local:  rsync [OPTION...] SRC... [DEST]
## 拷贝文件
[root@backup ~]# rsync /root/3 /usr/local/src/
## 拷贝目录
[root@backup ~]# rsync -a /etc /usr/local/src/

远程传输模式(类似命令scp)

  • 这种模式是借助SSH的通道进行传输(ssh端口)

## Access via remote shell:Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]# 拉:rsync [选项...] 用户名@主机IP:路径 本地文件或目录[root@backup ~]# rsync -avz root@172.16.1.7:/etc/hostname /usr/local/games/Push: rsync [OPTION...] SRC... [USER@]HOST:DEST# 推:rsync [选项...] 本地文件或目录 用户名@主机IP:路径[root@backup ~]# rsync -avz /backup/2020-05-06_web01_etc.tar.gz root@10.0.0.7:/tmp/
  • 权限不足报错

rsync: mkstemp "/root/.host_ip.sh.nrcrr0" failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

守护进程模式(服务)

## 语法:(不管是推还是拉都是在客户端的操作)
## Access via rsync daemon:(通过rsync守护进程访问)
# 拉:rsync [-avz] zls_bak@10.0.0.41::[模块] 源文件 目标
方法一:	Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]	
例如:(将备份服务器对应(zls)模块中的文件拉取到本地/tmp中)
rsync -avz zls_bak@10.0.0.41::zls /tmp --password-file=/etc/rsync.pass
方法二:    rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST](忘记它)# 推:rsync [-avz] 源文件 zls_bak@10.0.0.41::[模块] 目标	
方法一:	Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
例如:(将本地文件推送到备份服务器(zls_bak)虚拟用户,指定模块(zls)的对应路径中)
rsync -avz /etc/shadow zls_bak@10.0.0.41::zls --password-file=/etc/rsync.pass
方法二:	rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST(忘记它)注意:推和拉的区别,就是源文件的位置在哪里,拉:源文件在后面。## rsync 重要选项(通常使用-avz即可满足大部分需求)
-a           #归档模式传输, 等于-tropgDl
-v           #详细模式输出, 打印速率, 文件数量等
-z           #传输时进行压缩以提高效率
--delete     #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件,这里指服务端保存在客户端的密码文件路径------------------- -a 包含 ------------------
-r           #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t           #保持文件时间信息
-o           #保持文件属主信息
-p           #保持文件权限
-g           #保持文件属组信息
-l           #保留软连接
-D           #保持设备文件信息
-----------------------------------------------L           #保留软连接指向的目标文件
-e           #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN   #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100       #限速传输
--partial           #断点续传
--delete            #让目标目录和源目录数据保持一致
--password-file=xxx #使用密码文件

--delte实现无差异同步

# 1. 在服务端配置文件中多增加一个模块(写在/etc/rsyncd.conf文件结尾)[tcy]comment = xixipath = /tcy# 2. 对应路径进行创建[root@backup /backup]# mkdir /tcy# 3. 对路径修改权限[root@backup /backup]# chown -R rsync.rsync /tcy# 4. 对服务重启[root@backup /backup]# systemctl restart rsyncd# 5. 对服务端模块路径模拟创建文件[root@backup /backup]# cd /tcy[root@backup /tcy]# touch aaa[root@backup /tcy]# touch bbb# 6. 客户端操作[root@nfs /]# export RSYNC_PASSWORD=123			# delete后面只能接目录并且需要将目录后接"/" 如:/etc/# 如将/etc/换成一个文件,则直接将文件备份到服务端中,不会对服务端其他文件产生影响[root@nfs /]# rsync -avz --delete /etc/ rsync_backup@172.16.1.41::tcy	
  • 同步文件,发现原本服务端文件会删除

    img

Rsync的Limit限速

#企业案例: 某DBA使用rsync拉取备份数据时,由于文件过大导致内部交换机带宽被沾满,导致用户的请求无法响应
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
[root@nfs01 ~]# rsync -avz --bwlimit=1 rsync_backup@172.16.1.41::backup/ /data/

rsync+inotify

  • 扩展rsync结合inotify实现实时同步(详细操作见博客园nfs章节)

# 存在理由
- inotify可对目录实时监控,当产生文件或目录时将作出相应操作,一般结合rsync使用# 参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载# 服务安装(对客户端安装)
yum -y install inotify-tools# 命令测试
- 当/backup目录出现创建,修改,删除,修改属性,写入内容时,将在屏幕输出信息
/usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /backup# 书写脚本(监控目录,当发生变化则及时进行同步到备份服务器,脚本需要手动执行,脚本运行后就放后台处理了)
[root@backup ~]# vim rsyn-inotify.sh
#!/bin/bash
dir=/backup
/usr/bin/inotifywait  -mrq  --format '%w %f' -e create,delete,attrib,close_write  $dir | while read line;docd  $dir  && rsync -az -R  --delete  .  rsync_backup@172.16.1.31::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
done  &

案例操作①

要求:

web01,web02 都是客户端写脚本,每天晚上23:00备份,给etc目录打包,推送到backup服务器的/backup目录下文件名:2020-05-06_web01_etc.tar.gz  2020-05-06_web02_etc.tar.gz
主机名wanIPlanIP角色
web0110.0.0.7172.16.1.7客户端
web0210.0.0.8172.16.1.8客户端
backup10.0.0.41172.16.1.41服务端

安装服务端

服务端:我们把备份的文件放在谁磁盘上,谁就是服务端

# 1. 安装rsync
[root@backup ~]# yum install -y rsync
# 2.修改配置文件(一般来说是以.conf 或 .cnf 或 .cfg结尾)
[root@backup ~]# vim /etc/rsyncd.conf
## 指定进程启动uid
uid = rsync
## 指定进程启动gid
gid = rsync
## rsync服务的端口
port = 873
## 无需让rsync以root身份运行,允许接收文件的完整属性
fake super = yes
## 禁锢指定的目录
use chroot = no
## 最大连接数
max connections = 200
## 超时时间
timeout = 600
## 忽略错误
ignore errors
## 不只读(可读可写)
read only = false
## 不允许别人查看模块名
list = false
## 传输文件的用户
auth users = rsync_backup
## 传输文件的用户和密码文件
secrets file = /etc/rsync.passwd
## 日志文件
log file = /var/log/rsyncd.log
#####################################
## 模块名
[zls]
## 注释,没啥用
comment = 123
## 备份的目录
path = /backup# 3.根据配置文件内容,创建出来需要的用户,目录,密码文件...
# 3.1 创建用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
# 3.2 创建备份目录
[root@backup ~]# mkdir /backup
# 3.3 修改属组和属主
[root@backup ~]# chown -R rsync.rsync /backup/
# 3.4 创建用户名和密码存放的文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123# 3.5 修改密码文件的权限为600
[root@backup ~]# chmod 600 /etc/rsync.passwd# 4.启动服务并且加入开机自启
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd# 5.检测端口
[root@backup ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      18373/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      18373/rsync        
# 6.检测进程
[root@backup ~]# ps -ef|grep [r]sync
root      18373      1  0 20:48 ?        00:00:00 /usr/bin/rsync --daemon --no-detach

查看服务端端口是否开启

img

安装客户端

  • rsync客户端不用修改配置文件

# 1.安装rsync
[root@web01 ~]# yum install -y rsync
# 2.客户端需要创建一个密码文件
[root@web01 ~]# vim /etc/rsync.pass							# 密码是服务端存放的密码
123
# 3.修改密码文件的权限为600
[root@web01 ~]# chmod 600 /etc/rsync.pass # 4.从客户端往服务端推送重要备份文件
rsync [-avz] 源文件 zls_bak@10.0.0.41::[模块]
rsync -avz /etc/shadow rsync_backup@10.0.0.41::zls --password-file=/etc/rsync.pass# 5.从客户端拉取重要备份文件
rsync -avz rsync_backup@10.0.0.41::zls /tmp/ --password-file=/etc/rsync.pass # 方式二:脚本中使用,强烈推荐方式
[root@nfs01 ~]# export RSYNC_PASSWORD=zls
  1. 客户端web02安装服务,(web01同样操作)

    img

  2. 客户端新建一个文件,保存服务端连接的密码,(web01同样操作)

    img

  3. 修改密码文件权限为600,(web01同样操作)

    img

  4. 写脚本,内容为打包etc目录 为此格式:2020-05-06_web02_etc.tar.gz,然后进行推送到backup中,(web01同样操作)

    img

  5. 书写定时任务,(web01同样操作),每晚23点执行此脚本

    img

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

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

相关文章

--芯片测试--

目录 芯片逻辑是什么 芯片如何选型? 测试策略有什么 Alpha测试和Beta测试的区别? 主要区别 TOPS是什么 如何计算TOPS MAC单元是什么 频率的单位是什么 如何解决跨时钟域问题? 解释一下对异步电路的理解,以及如何实现同步…

Python酷库之旅-第三方库Pandas(123)

目录 一、用法精讲 546、pandas.DataFrame.ffill方法 546-1、语法 546-2、参数 546-3、功能 546-4、返回值 546-5、说明 546-6、用法 546-6-1、数据准备 546-6-2、代码示例 546-6-3、结果输出 547、pandas.DataFrame.fillna方法 547-1、语法 547-2、参数 547-3、…

828华为云征文 | 云服务器Flexus X实例:RAG 开源项目 FastGPT 部署,玩转大模型

目录 一、FastGPT 简介 二、FastGPT 部署 2.1 下载启动文件 2.2 开放端口权限 2.3 启动 FastGPT 三、FastGPT 运行 3.1 登录 FastGPT 3.2 知识库 3.3 应用 四、总结 本篇文章主要通过 Flexus云服务器X实例 部署 RAG 开源项目 FastGPT,通过 FastGPT 可以使…

Spring MVC 基础 : 文件、cookies的接收 ,REST响应

一、接受文件 在 Spring MVC 中,可以使用 RequestPart 注解来接收文件。这个注解常用于处理复杂的请求,如同时发送 JSON 数据和文件。RequestPart 非常适用于多部分请求(multipart requests),这在单个请求中同时发送文…

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器

【深入理解SpringCloud微服务】了解微服务的熔断、限流、降级,手写实现一个微服务熔断限流器 服务雪崩熔断、限流、降级熔断降级限流 手写实现一个微服务熔断限流器架构设计代码实现整体逻辑ProtectorAspect#aroundMethod(ProceedingJoinPoint)具体实现1、获取接口对…

【Linux 】开发利器:深度探索 Vim 编辑器的无限可能

🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…

CANopen从站为什么总不上传PDO报文?

在CANopen网络中无法获取从站的TPDO数据?本文将为您解析可能的原因及解决方案。通过检查TPDO的通信参数和传输类型,确保主站与从站的数据同步,快速定位问题所在。 如果你的CANopen网络中已经确保接线和波特率都没有问题,但无论主站…

数学建模 第一讲 - 概论

一、什么是数学模型 一个栗子 例 1.1 一只装满水的圆柱型桶,底半径为 1米,高为 2米,底部有一直径为 0.1 米的洞。问桶流空要多少时间? 数学模型是对于一个特定的对象为了一个特定目标,根据事物的内在规律,作出一些必…

vs2022快捷键异常不起作用解决办法

安装了新版本的vs2022,安装成功后,发现快捷键发生异常,之前常用的快捷键要么发生改变,要么无法使用,比如原来注释代码的快捷键是ctrlec,最新安装版本变成了ctrlkc,以前编译代码的快捷键是F6或者…

搜索引擎onesearch3实现解释和升级到Elasticsearch v8系列(一)-概述

简介 此前的专栏介绍Onesearch1.0和2.0,详情参考4 参考资料,本文解释onesearch 3.0,从Elasticsearch6升级到Elasticsearch8代码实现 ,Elasticsearch8 废弃了high rest client,使用新的ElasticsearchClient,…

Java | Leetcode Java题解之第420题强密码检验器

题目&#xff1a; 题解&#xff1a; class Solution {public int strongPasswordChecker(String password) {int n password.length();int hasLower 0, hasUpper 0, hasDigit 0;for (int i 0; i < n; i) {char ch password.charAt(i);if (Character.isLowerCase(ch))…

BUUCTF-MISC-另外一个世界

下载题目文件解压获得一张jpg格式图片 按照经验&#xff0c;排查了文件中是否隐写了flag字段等&#xff0c;并未发现线索 但是把十六进制打开的文件翻到文章底部可以发现一段二进制数字 这段数字正好为56位&#xff0c;八位二进制可以转换成一位ASKII码&#xff0c;这里我怀疑他…

【devops】devops-ansible之介绍和基础使用

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

SpringCloud构建工程

一、新建数据库和表&#xff0c;并填写测试数据 二、创建父级工程 1、创建maven工程 2、工程名字OfficeAutomation 3、pom.xml文件中添加依赖 <properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.encodin…

【PHP源码】匿名来信系统H5版本V1.0免费开源源码(含搭建教程)

你的匿名来信H5一封你的来信源码/表白祝福短信程序/往来信/传话短信源码支持邮件发信与手机短信发信“你的匿名来信”是最近某音上爆火的一个活动话题&#xff0c;可以通过H5网站&#xff0c;编辑自己想要对某人说的话或者祝福&#xff0c;网站会把您想说的发给您预留的号码&am…

Java 数据结构 最小栈的实现

在O&#xff08;N&#xff09;时间复杂度内找出最小值&#xff1a; 创建两个栈当普通栈只有一个数据时&#xff0c;把该数据放入最小栈往普通栈放入数据时&#xff0c;把要放入的数据和最小栈的栈顶数据相比较&#xff0c;若要放入的数据比最小栈的栈顶数据小&#xff0c;则把…

单元测试和unittest框架(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 单元测试的定义 1. 什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&am…

上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(中):RGB相机的标定和使用

前言 本教程涉及基础相机的原理&#xff0c;使用&#xff0c;标定&#xff0c;和读取。(注&#xff1a;本教程默认大家有ROS1基础&#xff0c;故不对程序进行详细解释) 上一期&#xff1a;[csdn博客]上手一个RGBD深度相机&#xff1a;从原理到实践–ROS noeticAstra S&#xf…

Python 低层多线程接口_thread的用法

_thread是python标准库中的一个低层多线程API&#xff0c;可以在进程中启动线程来处理任务&#xff0c;并且提供了简单的锁机制来控制共享资源的同步访问。本文就_thread模块的用法和特性做个简单的演示。 文章目录 一、进程和线程的区别二、_thread模块的用法2.1 派生线程2.2…

ElasticsearchRestTemplate DSL日志打印

ElasticsearchRestTemplate DSL日志打印 痛点解决方案打印基础文档查询信息打印最终DML语句 痛点 在使用 ElasticsearchRestTemplate 进行数据操作时&#xff0c;经常遇到的一个问题是线上问题排查困难。具体来说&#xff0c;在线上环境中&#xff0c;当出现问题时&#xff0c…