【分布式技术】rsync远程同步服务

目录

一、rsync(远程同步)

二、实操rsync远程文件同步

准备一个服务端192.168.20.18以及一个客户端192.168.20.30

1、服务端搭建:先完成服务端配置,启动服务

 rsync拓展

1、关于rsyncd服务的端口号

2、rsync和scp的区别

2、测试

第一种:客户端下行从服务端拉取数据,进行同步

第二种:客户端主动给服务端推送文件和目录(图片只是示意,还不是实时同步)

 3、通过ssh和rsync结合的方式,实现远程文件传输,也可以实现增量传输数据

第一种:通过ssh免密+rsync的方式实现传输

第二种:通过sshpass+rsync的方式实现免密传输

4、小结

三、定时同步crontab + rsync

四、实时同步inotifywait + rsync 

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

 2.调整 inotify 内核参数(根据具体生产情况分析)

3.安装 inotify-tools

4.在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效) 

五、几种批量删除文件的区别(20万个文件测试)

第一种:rm -rf 这种如果针对大文件,可能不生效

第二种:find 指定目录 -exec rm {} \;

第三种:find 指定目录 -delete

第四种:使用rsync


一、rsync(远程同步)

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

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

二、实操rsync远程文件同步

准备一个服务端192.168.20.18以及一个客户端192.168.20.30

1、服务端搭建:先完成服务端配置,启动服务

systemctl stop firewalld
setenforce 0
--------------------配置rsync源服务器---------------------------
rpm -q rsync							#一般系统已默认安装rsync

#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf				#添加以下配置项
uid = root
gid = root
use chroot = yes									#禁锢在源目录
address = 192.168.20.18							#监听地址
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.20.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z				#同步时不再压缩的文件类型

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

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

chmod 600 /etc/rsync_users.db

#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /data
ls -ld /data

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

netstat -anpt | grep rsync

 rsync拓展

1、关于rsyncd服务的端口号

udp和tcp的873端口

udp负责文件传输 tcp负责建立连接

2、rsync和scp的区别

两者都可以实现远程传输文件和目录

rsync:远程文件同步,可以实现跨主机增量同步文件数据,同时还能对传输的文件进行压缩,并且支持软连接硬连接文件传输

scp:只能做全量数据传输

2、测试

服务端测试目录准备

第一种:客户端下行从服务端拉取数据,进行同步

rsync -avz lisi@192.168.20.18::share /root/test/

rsync -avz --delete lisi@192.168.20.18::share /root/test/

 

rsync -avz --delete rsync://lisi@192.168.20.18/share /root/kgc/

 

[root@localhost ~]#echo 123123 > pass
[root@localhost ~]#cat /root/pass
123123
[root@localhost ~]#chmod 600 /root/pass

[root@localhost ~]#rsync -avz --delete --password-file=/root/pass rsync://lisi@192.168.20.18/share /root/kgc/

总结

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

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

#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz lisi@192.168.20.18::share /root/test					#密码123123

格式二:
rsync -avz rsync://lisi@192.168.20.18/share /root/test
	
#免交互格式配置:
echo "123123" > /root/pass
chmod 600 /root/pass

第二种:客户端主动给服务端推送文件和目录(图片只是示意,还不是实时同步)

配置文件修改 

[root@localhost data]#vim /etc/rsyncd.conf 
[root@localhost data]#systemctl restart rsyncd
[root@localhost data]#ll -d ./
drwxr-xr-x 2 root root 6 1月  11 21:07 ./
[root@localhost data]#chmod 777 /data/  ##一定记得加权限
[root@localhost data]#ll -d ./
drwxrwxrwx 2 root root 6 1月  11 21:07 ./
[root@localhost data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt
[root@localhost data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  a
[root@localhost data]#ls
5.txt  a

[root@localhost ~]#touch /root/kgc/{1..5}.txt
[root@localhost ~]#ls /root/kgc/
1.txt  2.txt  3.txt  4.txt  5.txt
[root@localhost ~]#rsync -avz --delete --password-file=/root/pass /root/kgc/ 


[root@localhost ~]#echo a > /root/kgc/a
[root@localhost ~]#ls /root/kgc/
1.txt  2.txt  3.txt  4.txt  5.txt  a
[root@localhost ~]#rsync -avz --delete --password-file=/root/pass /root/kgc/ 


[root@localhost ~]#rm -f /root/kgc/{1..4}.txt 
[root@localhost ~]#ls /root/kgc/
5.txt  a
[root@localhost ~]#rsync -avz --delete --password-file=/root/pass /root/kgc/ rsync://lisi@192.168.20.18/share

 3、通过ssh和rsync结合的方式,实现远程文件传输,也可以实现增量传输数据

注意:这种方式可以不用修改配置文件

第一种:通过ssh免密+rsync的方式实现传输

[root@localhost /test]#ssh-keygen -t rsa
[root@localhost /test]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.20.7

[root@localhost /test]#ls
passwd  yum.repos.d
[root@localhost /test]#pwd
/test

[root@localhost /test]#rsync -azvH --delete -e 'ssh -p 22' /test/  root@192.168.20.7:/root/cxk/

 

[root@localhost /test]#echo a > a
[root@localhost /test]#rm -rf yum.repos.d/
[root@localhost /test]#ls
a  passwd
[root@localhost /test]#rsync -azvH --delete -e 'ssh -p 22' /test/  root@192.168.20.7:/root/cxk/

第二种:通过sshpass+rsync的方式实现免密传输

[root@localhost ~]#yum install -y sshpass

[root@localhost ~]#rsync -avzH --delete -e 'sshpass -p 123 ssh -p 22 -o StrictHostKeyChecking=no' /root/test10/ root@192.168.20.15:/share

4、小结

文件传输:lrzsz   ftp   samba   cifs   nfs   sftp   scp   WinSCP    rsync   SVN   git  

rsync 远程文件同步,可实现跨主机增量同步文件数据

命令格式:
rsync [选项] 原始位置  目标位置

rsync -az --delete  源服务器位置   本地位置         #下行同步,从源服务器拉数据
rsync -az --delete  本地位置       源服务器位置     #上行同步,推数据到源服务器


免交互
#rsync-daemon方式
rsync -az --delete --password-file=密码文件   用户名@源服务器地址::共享模块名   本地目录
rsync -az --delete --password-file=密码文件   rsync://用户名@源服务器地址/共享模块名   本地目录

#rsync-ssh方式
rsync -az --delete -e 'sshpass -p 'ssh密码' ssh -p ssh端口 -o StrictHostKeyChecking=no'  用户名@源服务器地址:共享目录/   本地目录

先做ssh密钥对免交互(空密码,ssh-agent bash + ssh-add)
rsync -az --delete -e 'ssh -p ssh端口'  用户名@源服务器地址:共享目录/   本地目录

以上都是手动执行远程文件传输

如果说是想要实现自动,可以有两种方式:

1、定时计划性任务crontab + rsync

2、实时同步 inotifywait + rsync 

三、定时同步crontab + rsync

crontab -e
*/30 * * * * /usr/bin/rsync -azH --delete --password-file=/root/pass rsync://lisi@192.168.20.18/share /root/kgc/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 lisi 用户的密码,如 /root/pass。在执行 rsync 同步时使用选项 “--password-file=/root/pass” 指定即可。

systemctl restart crond
systemctl enable crond

四、实时同步inotifywait + rsync 

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

实操架构图:

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

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

[root@serverp ~]#mkdir /data  ##创建共享目录
[root@serverp ~]#vim /etc/rsyncd.conf 
[root@serverp ~]#echo "server:123123" >/root/userlist  ##准备账号文件
[root@serverp ~]#chmod 777 /data/   ##修改共享目录权限

 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 = 1048576

sysctl -p

3.安装 inotify-tools

测试inotifywait 监控 

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 /root/kgc

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

4.在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效) 

#!/bin/bash
INOTIFY_COM="inotifywait -mrq -e modify,create,move,delete /root/kgc/"

RSYNC_COM1="rsync -avz --delete --password-file=/root/pass /root/kgc/ server@192.168.20.12::share"
RSYNC_COM2="rsync -avz --delete --password-file=/root/pass /root/kgc/ server@192.168.20.16::share"
##两同步,分别传输到两不同服务端(serverQ和serverP)

$INOTIFY_COM | while read event
##这是一种while的触发循环,将管道符左边的执行结果给到read后面的自定义变量中,一旦有执行结果,则会触发循环
do
    if [ $(pgrep rsync|wc -l) -le 1 ];then
##判断有没有rsync的进程存在,判断的方式有很多种pidof、ps、killall -0等,小于等于1表示开启为1,如果不开启为0,没有正在同步传输的进程
        $RSYNC_COM1 &>/var/log/inotify_test.log
        $RSYNC_COM2 &>/var/log/inotify_test.log
##将两个传输都记录到日志文件中
    fi
done

chmod +x /root/inotify.sh
chmod +x /etc/rc.d/rc.local
echo '/root/inotify.sh' >> /etc/rc.d/rc.local				#加入开机自动执行

五、几种批量删除文件的区别(20万个文件测试)

第一种:rm -rf 这种如果针对大文件,可能不生效

第二种:find 指定目录 -exec rm {} \;

第三种:find 指定目录 -delete

第四种:使用rsync


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

先建立一个空的文件夹:
mkdir /home/blank

用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp/
这样目标目录很快就被清空了
选项说明:
--delete-before 接收者在传输进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
--progress 在传输时显示传输过程
--stats 给出某些文件的传输状态

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

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

相关文章

在qemu虚拟机环境下,使用kgdb调试kernel

enable kgdb的情况下,使用qemu启动kernel 1,需要先在内核配置中增加kgdb的支持 2,启动qemu虚拟机时,增加参数-s -S,这两个参数会使得kernel在启动之后遇到的第一个指令等待gdb连接 例子: /qemu-project…

爬虫之牛刀小试(三):爬取中国天气网全国天气

天气网: import requests from bs4 import BeautifulSoup import time from pyecharts.charts import Bar from pyecharts import options as optsurl_hb http://www.weather.com.cn/textFC/hb.shtml url_db http://www.weather.com.cn/textFC/db.shtml url_hd …

RocketMQ Dashboard可视化工具

RocketMQ Dashboard 将 RocketMQ的相关指标展示在web页面 ,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 官方文档地址:RocketMQ Dashboard | RocketMQ 目录 1.下载安装 1.1 系统要求: 1.2 源码安装 1.3 访问页面 2.功…

微信小程序地图展示区轮廓+展示指定地区标点气泡

需求:显示当前地区所有的学校列表:名称。区域显示区域名称下面所属学校数量 根据用户缩小放大当前区域(大于12显示区,小于12显示当前区学校列表),获取:regionchange的type:end数据&…

中央处理器CPU(1)----指令周期和微程序

前言:由于期末复习计算机组成效率太慢所以抽时间写一下文章总结一下思路,理解不是很深,欢迎各位不吝赐教。 由于时间不是很充分,所以有些考点由于我们不考试,一笔带过了。 我这是期末复习总结,不是考研知识…

【BIAI】Lecture 7 - EEG data analysis

EEG data analysis 专业术语 EEG 脑电图 excitatory postsynaptic potential(EPSP)兴奋性突触后电位 inhibitory postsynaptic potential(IPSP) 抑制性突触后电位 action potential 动作电位 dipoles 偶极子 Pyramidal neurons 椎体细胞 Axon 轴突 Dendrite 树突 Synapse 突触…

python 识别验证码图片

描述:利用cv2和百度的aipocr 识别有噪点的验证码图,百度aip需要自己注册,把密钥替换为自己的即可 百度智能云 测试用的图片 # encoding: utf-8 from PIL import Image # 调用百度OCR接口识别验证码 from aip import AipOcr class preserv…

R语言下载安装及VScode配置

文章目录 1. R 下载和安装1.1 下载1.2 安装 2. VSCODE 配置2.1 安装R拓展2.2 安装R语言辅助功能包2.3 DEBUG 1. R 下载和安装 1.1 下载 网址:https://www.r-project.org/ 选择一个镜像地址下载 选择对应的版本 一般选择base即可 1.2 安装 下载安装包后按提示安装…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换,注意括号2.宏的优缺点 优点: 1.增强代码的复用性 2.宏函数不用建立栈帧,提高性能 缺点: 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…

SpringCloud系列篇:核心组件之熔断器组件

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 前言 在微服务架构中,一个应用往往由多个服务组成,这些服务之间相互依赖,依赖关系错综复杂。 例…

three.js 关键帧动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

二维激光雷达

目录 前言 1 单线激光雷达 激光器 接收器 信号处理单元 旋转机构 2 单线激光雷达原理 2.1 三角测距法 1、直射式 2、斜射式 2.2 TOF飞行时间测距法 总结 前言 开始干活啦&#xff0c;单线激光雷达&#xff0c;三维知道原理&#xff0c;但不研究了&#xff0c;问就是买不起。 1 …

【JaveWeb教程】(19) MySQL数据库开发之 MySQL数据库操作-DML 详细代码示例讲解

目录 3. 数据库操作-DML3.1 增加(insert)3.2 修改(update)3.3 删除(delete)3.4 总结 3. 数据库操作-DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09;修改数据…

mybatis-flex与springBoot整合

mybatis-flex基本使用 1.测试sql2.导入坐标3.框架搭建1.pojo层2.mapper层3.service层4.controller层5.启动类6.配置类7.EmpMapper.xml 4.启动测试 本片文章在springBoot3&#xff0c;jdk21下测试通过 注意官方网站为&#xff1a;https://mybatis-flex.com/ 请点击&#xff1a;直…

【C++】C++11中的常见语法(上)

C11 一、C11简介二、统一的列表初始化1.&#xff5b;&#xff5d;初始化2. std::initializer_list 三、声明1. auto2. decltype3. nullptr 四、右值引用和移动语义1. 左值引用和右值引用2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 右值引用引用左值及其一些更深入的…

如何使用Postman创建Mock Server?

这篇文章将教会大家如何利用 Postman&#xff0c;通过 Mock 的方式测试我们的 API。 什么是 Mock Mock 是一项特殊的测试技巧&#xff0c;可以在没有依赖项的情况下进行单元测试。通常情况下&#xff0c;Mock 与其他方法的主要区别就是&#xff0c;用于取代代码依赖项的模拟对…

Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题

前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式&#xff0c;纵横合并-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135537511?spm1001.2014.3001.5501 目录 一、&#x1f6e0;️ newTable.vue 封装Table 二、&#x1f6a9; newForm.vue …

【数据库】视图索引执行计划多表查询笔试题

文章目录 一、视图1.1 概念1.2 视图与数据表的区别1.3 优点1.4 语法1.5 实例 二、索引2.1 什么是索引2.2.为什么要使用索引2.3 优缺点2.4 何时不使用索引2.5 索引何时失效2.6 索引分类2.6.1.普通索引2.6.2.唯一索引2.6.3.主键索引2.6.4.组合索引2.6.5.全文索引 三、执行计划3.1…

性能测试中TPS上不去的几种原因浅析

昨晚在某个测试群看到有人问了一个问题&#xff1a;压力测试中TPS一直上不去&#xff0c;是什么原因&#xff1f;稍微整理了下思路&#xff0c;列举性的简略回答了他的问题。 这篇博客&#xff0c;就具体说说在实际压力测试中&#xff0c;为什么有时候TPS上不去的原因。如有遗…

一包多语言——使用FontForge合并字体

大家好&#xff0c;我是阿赵。   比较多游戏做了一个游戏包里面包含了多种语言&#xff0c;可以游戏内切换。这里分享一个合并多种语言字体的方法。 一、遇到的问题 假设我们游戏需要同时显示简体中文、泰文、老挝文三种语言。 解决方案有多种&#xff1a; 1、准备多种字体 …