day33-数据同步rsync

news/2025/2/7 12:06:10/

一、Rsync本地模式和远程模式

纯通过rsync的命令,来实现,数据目录A 拷贝到数据目录B

也就是模拟cp的用法 很简单

1.安装

yum install rsync -y

2.命令语法,分几个模式

- 本地模式

rsync 参数   源路径  目标路径

rsync  -xxxxx    /var/log    /tmp

- 远程模式

推送方式,把自己的数据推送到另一台机器上(上传)
语法1 ,rsync默认走ssh协议
rsync 参数  源路径  user@ip:目标路径

rsync  -avzP  /var/log/      root@10.0.0.31:/tmp/

 比较常用的组合参数
 rsync -avzP
-a    保持文件原有属性
-v    显示传输细节情况
-z    对传输数据压缩传输
-P    显示文件传输的进度信息


你在命令行里,执行命令,喜欢看到命令的执行过程
-avzP

脚本里面?
bash xxx.sh
rsync -az 

二、本地模式  

 对文件同步

[root@rsync-41 ~]#yum install rsync -y
把本地的的/var/log/messages 文件 拷贝到/opt下拷贝单个文件
[root@rsync-41 ~]#rsync -avzP /var/log/messages /opt
sending incremental file list
messages985,500 100%   56.79MB/s    0:00:00 (xfr#1, to-chk=0/1)sent 123,300 bytes  received 35 bytes  246,670.00 bytes/sec
total size is 985,500  speedup is 7.99拷贝单个大文件,拷贝大文件时,要注意限速,否则占用磁盘IO太多
--bwlimit=10先生成一个5G文件
dd bs=100M count=50 if=/dev/zero  of=/var/log/my_self.logrsync -avzP /var/log/my_self.log  /optiotop查看磁盘的读写IO情况限制单个大文件的传输,速度只给他20M每秒[root@rsync-41 ~]#rsync -avzP --bwlimit=20   /var/log/my_self.log  /opt
sending incremental file list
my_self.log393,117,696   7%   20.14MB/s    0:03:55  

对目录同步(注意语法的区别) 

拷贝后的数据,是否携带该目录本身
[root@rsync-41 ~]#rsync -avzP /var/log    /opt不拷贝该目录本身,拷贝目录下的数据
[root@rsync-41 ~]#rsync -avzP /var/log/    /opt测试文件夹的增量拷贝
[root@rsync-41 ~]#rsync -avzP /test1/   /test2
sending incremental file listsent 118 bytes  received 12 bytes  260.00 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-41 ~]#
[root@rsync-41 ~]#
[root@rsync-41 ~]#
[root@rsync-41 ~]#echo "123" >/test1/1.png 
[root@rsync-41 ~]#
[root@rsync-41 ~]#rsync -avzP /test1/   /test2
sending incremental file list
1.png4 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=4/6)sent 175 bytes  received 35 bytes  420.00 bytes/sec
total size is 4  speedup is 0.02
[root@rsync-41 ~]#

无差异化拷贝

使用--delete参数 将目标目录的数据清空,保证完全和源目录的数据一致rsync -azvP --delete  /test1/   /test2/[root@rsync-41 /test2]#rsync -azvP --delete  /test1/   /test2/
sending incremental file list
deleting 行者孙.png
./
白龙马.png0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/12)sent 269 bytes  received 55 bytes  648.00 bytes/sec
total size is 4  speedup is 0.01
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#
[root@rsync-41 /test2]#ls /test1/
1.png  2.png  3.png  4.png  5.png  孙悟空1  孙悟空2  孙悟空3  孙悟空4  孙悟空5  白龙马.png
[root@rsync-41 /test2]#ls /test2
1.png  2.png  3.png  4.png  5.png  孙悟空1  孙悟空2  孙悟空3  孙悟空4  孙悟空5  白龙马.png# rsync拷贝文件夹,携带目录本身
# 吧test1目录本身,连带着数据,都拷贝到test2下
rsync -avzP /test1    /test2/
最终会生成
/test2/test1/ 该文件夹的数据,和源数据目录 /test1是一样的

对rsync限速,因为rsync在传输数据时,会占用大量的磁盘IO,以及如果是网络传输的话,占用网络带宽,会导致其他程序受影响

所以rsync这样的备份服务,都是在夜里,凌晨操作,被影响其他程序


--bwlimit

 三、远程模式

把/root下的数据,拷贝到 /tmp下

把rsync-41   /root下的数据拷贝到 nfs-31   /tmp下

PUSH 推送模式,上传模式

把rsync-41   /root下的数据,拷贝到 nfs-31   /tmp下登录rsync41
用ip形式、再用主机名形式
添加无差异化参数,该参数,慎用!搞清楚了你在做什么!rsync -avzP  --delete  /root/    root@172.16.1.31:/tmp/

PULL 拉取模式(你要琢磨,数据最终放在了哪)

# 把rsync-41   /root下的数据,拷贝到 nfs-31   /tmp下rsync -avzP   root@172.16.1.41:/root/    /tmp/
# 拉取rsync41的/etc/passwd文件到 nfs-31的/opt下,使用主机名通信rsync -avzP root@rsync-41:/etc/passwd    /opt/

传输目录注意

#传输整个目录,包含目录本身rsync -avzP   root@172.16.1.41:/root    /tmp/
#只传输目录下的文件,不包含目录本身
rsync -avzP   root@172.16.1.41:/root/    /tmp/

无差异传输

#不同主机之间同步数据 --delete
rsync -avzP --delete   root@172.16.1.41:/root    /tmp/#坑:如果/和一个空目录进行完全同步,那么效果和删根一样
#坑:传输过程不限速导致带宽被占满 ,--bwlimit=50远程传输 nfs-31下的 /tmp/2G.log   备份到  rsync-41的/opt下rsync -avzP   /tmp/2G.log   root@172.16.1.41:/opt

-a   保持文件原有属性
-v   显示传输过程
-z   压缩传输数据
-P   显示传输进度

 举例

远程备份文件,且改名
[root@nfs-31 /tmp]#rsync -avzP   /tmp/2G.log   root@172.16.1.41:/opt/2G.logggggggggggggggggggggg
远程传输 nfs-31下的 /tmp/2G.log   备份到  rsync-41的/opt下,且是无差异化备份
等于清空原有/opt下的数据rsync -avzP --delete   /tmp/2G.log   root@172.16.1.41:/opt/2G.log

四、Rsync服务模式-服务端配置

0.为什么需要服务模式 Rsync 借助 SSH 协议同步数据存在的缺陷:

1.使用系统用户(不安全) /etc/passwd

2.使用普通用户(会导致权限不足情况)

3.守护进程传输方式: rsync 自身非常重要的功能(不使用系统用户,更加安全)

1.安装rsync

 yum install rsync -y

2.修改配置文件

cat > /etc/rsyncd.conf << 'EOF'
uid = www 
gid = www 
port = 873
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
#####################################
[backup]
comment = yuchaoit.cn about rsync
path = /backup[data]
comment = this is secord backup dir,to website data..
path = /data
EOF

3.创建用户以及数据目录

根据你的配置文件中定义的信息,创建对应的用户,备份的目录
该无法登录的用户,只是用于运行进程的账户
useradd -u 1000 -M -s /sbin/nologin www创建配置文件中定义的2个备份目录
mkdir -p /data/   /backup修改备份目录的权限
[root@rsync-41 ~]#chown -R www:www /data/
[root@rsync-41 ~]#chown -R www:www /backup/
[root@rsync-41 ~]#ll -d /data /backup/
drwxr-xr-x 2 www www 6 Apr 20 11:34 /backup/
drwxr-xr-x 2 www www 6 Apr 20 11:34 /data

4.创建rsync专用的账户密码(这一步很重要,有错基本也是来这排查)

1.创建密码文件,写入账户和密码,用于和客户端连接时候的认证
vim /etc/rsync.passwd2.写入账户密码
[root@rsync-41 ~]#cat /etc/rsync.passwd 
rsync_backup:chaoge6663.待会客户端向rsync服务器推送数据,就得用这个账号密码!!!!4.这一步,非常重要,rsync要求降低密码文件的权限,且必须是600chmod 600 /etc/rsync.passwd [root@rsync-41 ~]#ll /etc/rsync.passwd 
-rw------- 1 root root 23 Apr 20 11:36 /etc/rsync.passwd

5.加入开机自启动

设置rsyncd服务,运行,且开机自启systemctl start rsyncd检查rsyncd服务是否运行,以及该服务的运行日志 [root@rsync-41 ~]#cp /etc/rsyncd.conf.bak /etc/rsyncd.conf
[root@rsync-41 ~]#
[root@rsync-41 ~]#
[root@rsync-41 ~]#systemctl restart rsyncd
[root@rsync-41 ~]#
[root@rsync-41 ~]#systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemonLoaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled)Active: active (running) since Wed 2022-04-20 11:46:57 CST; 4s agoMain PID: 6078 (rsync)CGroup: /system.slice/rsyncd.service└─6078 /usr/bin/rsync --daemon --no-detachApr 20 11:46:57 rsync-41 systemd[1]: Started fast remote file copy program daemon.
Apr 20 11:46:57 rsync-41 systemd[1]: Starting fast remote file copy program daemon...
Apr 20 11:46:57 rsync-41 rsyncd[6078]: params.c:Parameter() - Ignoring badly formed line in config file: ignore errors
Apr 20 11:46:57 rsync-41 rsyncd[6078]: rsyncd version 3.1.2 starting, listening on port 873
[root@rsync-41 ~]#
[root@rsync-41 ~]#

6.检查服务是否运行

systemctl status rsyncd# 无论是学习期间还是上班了,都养成好习惯
# 给别人启动了某程序后,给自己启动某程序
务必去检查,验证是否正确[root@rsync-41 ~]#ps -ef|grep 'rsync' | grep -v 'grep'
root       6078      1  0 11:46 ?        00:00:00 /usr/bin/rsync --daemon --no-detach[root@rsync-41 ~]#netstat -tunlp|grep rsync
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      6078/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      6078/rsync     

五、Rsync服务模式-客户端配置

 1.安装rsync

yum install rsync -y

2.配置密码文件及授权

此时rsync客户端,需要把数据推送到rsync服务端
但是需要账户认证,这个账户密码,是服务端指定好的
回头去看笔记
rsync_backup
chaoge666客户端需要做的操作有2个,提供密码认证1. 生成密码文件,每次连接都指定这个密码文件2. 生成密码变量,让当前系统中存在叫做 RSYNC_PASSWORD 这个变量,以及变量的值,是配置文件中的密码即可

推送,备份,发送nfs-31的数据发给rsync-41

把客户端的数据,发送给服务端的backup备份模块下语法,不一样了,注意语法的写法!!!吧客户端的 /tmp/200M.log 备份,发送到rsync-41机器上的 backup模块下rsync -avzP   /tmp/200M.log  账户@主机名::模块名# 默认无密码变量,也无密码文件,需要你自己输入该rsync_backup虚拟用户的密码
# 需要交互式的输入密码,无法再脚本中使用rsync同步命令
# rsync基本都是和脚本结合使用
rsync -avzP   /tmp/200M.log  rsync_backup@rsync-41::backup非交互式密码的操作,如下2个方法
1. 生成密码文件,每次连接都指定这个密码文件(在客户端生成)echo 'chaoge666'  > /etc/my_rsync.pwd
还必须降低密码文件的权限才行,必须是600
chmod 600 /etc/my_rsync.pwd此时可以传输数据了,往data模块下传输
rsync -avzP  --password-file=/etc/my_rsync.pwd   /tmp/200M.log  rsync_backup@rsync-41::data如果是脚本中的话,去掉vP显示过程的参数去掉
rsync -az  --password-file=/etc/my_rsync.pwd   /tmp/200M.log  rsync_backup@rsync-41::data2. 生成密码变量,让当前系统中存在叫做 RSYNC_PASSWORD 这个变量,以及变量的值,是配置文件中的密码即可
export RSYNC_PASSWORD='chaoge666'rsync -avzP    /tmp/200M.log  rsync_backup@rsync-41::backup

下载备份服务器的数据

rsync -avzP rsync_backup@rsync-41::backup   /tmp/要输入密码
1.的确没指定密码文件
2.是否有密码变量呢?如何需要输入密码呢?
撤销这个密码变量
unset RSYNC_PASSWORD
或者重新登录,只要密码变量失效,就必须得输入密码了,或者使用密码文件rsync -avzP rsync_backup@rsync-41::backup   /tmp/非交互式的密码认证方式
1,使用密码变量
export RSYNC_PASSWORD='chaoge666'2.指定密码文件rsync -avzP --password-file=/etc/my_rsync.pwd  rsync_backup@rsync-41::backup   /tmp/rsync -avzP --password-file=/etc/my_rsync.pwd  rsync_backup@rsync-41::backup/222222222.log   /tmp/


http://www.ppmy.cn/news/1570060.html

相关文章

Med-R2:基于循证医学的检索推理框架:提升大语言模型医疗问答能力的新方法

Med-R2 : Crafting Trustworthy LLM Physicians through Retrieval and Reasoning of Evidence-Based Medicine Med-R2框架Why - 这个研究要解决什么现实问题What - 核心发现或论点是什么How - 1. 前人研究的局限性How - 2. 你的创新方法/视角How - 3. 关键数据支持How - 4. 可…

游戏引擎学习第87天

当直接使用内存时&#xff0c;可能会发生一些奇怪的事情 在直接操作内存时&#xff0c;一些意外的情况可能会发生。由于内存实际上只是一个大块的空间&#xff0c;开发者可以完全控制它&#xff0c;而不像高级语言那样必须遵守许多规则&#xff0c;因此很容易发生错误。在一个…

CSS实现自适应的正方形

摘要 在开发移动端时&#xff0c;会遇到类似于九宫格菜单的页面&#xff0c;宽度很好设置&#xff0c;一般设置为“33.333%”或者其他&#xff0c;但是高度呢&#xff1f;下面介绍几种常用方法。 方法1&#xff1a;使用padding-top百分比 .square {width: 100px;height: 0;p…

DeepSeek R1技术报告关键解析(8/10):DeepSeek-R1 的“aha 时刻”,AI 自主学习的新突破

1. 什么是 AI 的“aha 时刻”&#xff1f; 在强化学习过程中&#xff0c;AI 的推理能力并不是线性增长的&#xff0c;而是会经历一些关键的“顿悟”时刻&#xff0c;研究人员将其称为“aha 时刻”。 这是 AI 在训练过程中突然学会了一种新的推理方式&#xff0c;或者能够主动…

Spring Boot 日志:项目的“行车记录仪”

一、什么是Spring Boot日志 &#xff08;一&#xff09;日志引入 在正式介绍日志之前&#xff0c;我们先来看看上篇文章中&#xff08;Spring Boot 配置文件&#xff09;中的验证码功能的一个代码片段&#xff1a; 这是一段校验用户输入的验证码是否正确的后端代码&#xff0c…

深入解析:Jsoup 库的多功能应用场景

Jsoup 是一个强大的 Java 库&#xff0c;主要用于解析和操作 HTML 文档。它不仅广泛应用于网络爬虫和数据抓取&#xff0c;还在网页内容分析、数据清洗与处理、自动化测试等多个领域有着广泛的应用。本文将详细介绍 Jsoup 库的多种用途&#xff0c;并提供具体的代码示例。 一、…

网络安全 风险评估指南 网络安全风险测评

本文介绍常用的安全测评工具&#xff0c;分别以Web安全测评和移动支付及互联网金融安全测评为案例&#xff0c;详细阐述针对实际业务系统开展安全测评工作的步骤、内容和判定方法。 一、安全测评工具 介绍在测评工作中常用的几类安全测评工具&#xff0c;包括网络数据分析工具…

什么是算法? – Algorithm

人工智能有三驾马车&#xff1a;数据、算法、算力。本文重点介绍算法相关的知识。 本文将介绍算法在人工智能里的概念&#xff0c;算法的4个特征、6个通用方法。以及在选择算法时需要注意的3个点。 目录 什么是算法&#xff1f; 算法的4个基本特征 算法的6个基本方法 选择算…