Rsync学习笔记1

2023-09-21 15:11:03

企业架构Web服务器的文件及时同步:

1)能够理解为何要服务器的文件同步;

2)能够简单描述实现文件同步的几种方式;

3)能够实现服务器文件实时同步的案例;

服务器同步文件的必要性:

当业务代码发生改变,上传到web服务器的时候,因为架构已经不是单台服务器提供服务,而是由多台Web服务器提供服务,业务代码需要同时上传到多台Web服务器,在操作上带来了很多不便。

故需要解决以上问题,就需要Web服务器中的业务代码能够及时同步,保证业务代码的一致性。

线上

对外提供服务的 10台 提供给用户对外服务 存储(分布式存储 解决服务器单例硬盘资源不够的情况)

线下:能够让线上更稳定提供服务的。

代码发布(CI CD git、jenkins、gitlab)版本管理;

灰度发布

监控(主机、服务 zabbix)zabbix-proxy;哪个机器出问题,能被监控,有告警;

日志收集分析ELK elasticsearch(elasticsearch-head) logstash kibana kafka消息队列)日志信息能看到;

存储:ceph 目的是是为了存储数据和文件;分布式存储,解决服务器单列硬盘资源不够的情况。

几百T的硬盘。多个服务器同时去存储。有个存储软件来管理。

NFS、Samba。

同步文件的几种方式:

1)SCP  secure copy的缩写,安全的复制,scp是Linux系统下基于SSH登录进行安全的远程文件拷贝命令,全量同步。

ssh包含哪几个组件:ssh scp sftp

问题:全部复制过去,比较慢、效率低一些,scp不能远程删除,目标服务器垃圾越来越多。

2)rsync:

rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法==只传送两个文件的不同部分==,而不是每次都整份传送,因此速度相当快 ==增量同步==

问题:当文件变动,不能实时同步。就是说文件变动的时候,我们需要定时执行下rsync命令。

每天同步一次,每天只能发布一个版本。

3)rsync+sersync:

inotify-tools和sersync属于同类:

sersync是基于inotify+sync时大量文件的多服务器自动同步工具。

使用==Linux 2.6 内核的 inotify 监控 Linux 文件系统事件==,被监听目录下如果有文件发生修改,sersync 将通过内核自动捕获到事件,并将该文件利用 rsync 同步到多台远程服务器。sersync 仅仅同步发生增、删、改事件的单个文件或目录,不像rsync镜像同步那样需要比对双方服务器整个目录下数千万的文件对比,并且支持多线程同步,因此效率非常高

sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发

特点:

1、sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

相比较上面两个项目,sersync配置起来很简单,其中bin目录下已经有基本上静态编译的

2、二进制文件,配合bin目录下的xml配置文件直接使用即可。

另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

3、本项目有出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则按设定时长对同步失败的文件重新同步。

4、本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。无需再额外配置crontab功能。

5、本项目socket与http插件扩展,满足您二次开发的需要。

同步文件案例:

源服务器 server01    原文件所在服务器   192.168.17.107

目标服务器  server03  需要复制到的服务器  192.168.17.109

1、scp:

语法:scp本地文件路径   用户名@远程IP:远程存储路径

由于需要远程登录,故需要输入密码不是很方便,添加机器的公钥到允许列表中。

在scp命令中要特别注意下-r的选项。遍历文件夹。

每次的同步的时候还要输入密码。

那我们要做一个免密登录。

1)源服务器生成公钥。

[root@server01 public]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FlzDszlWUrjL1tkXuVxibIQCidQlt48nqOZiz1s/jNQ root@server01
The key's randomart image is:
+---[RSA 2048]----+
|     ..oo==o..   |
|      ..o+*oo .  |
|        o .O o  .|
|         o*o  =o.|
|        S+o+o=..+|
|       o. Eoo .o.|
|      o..+     . |
|    o+ ...o      |
|   . o=.  ..     |
+----[SHA256]-----+
[root@server01 public]#

2)添加公钥到允许文件(源服务器) 

[root@server01 public]# ssh-copy-id 192.168.17.109
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.17.109's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.17.109'"
and check to make sure that only the key(s) you wanted were added.

3)测试远程登录:

[root@server01 public]# ssh 192.168.17.109
Last login: Thu Sep 21 14:17:19 2023 from 192.168.17.1

4)测试修改业务代码:

通过scp推送同步。

scp的缺点:

不能够进行增量同步,比较浪费时间

不能够目标服务器的文件,垃圾文件越来越多。

可以把以上的代码写入到脚本中,业务代码变化之后,直接执行脚本即可。

[root@server03 tp5shop]# cat /root/filesync/scp.sh
#!/bin/bash

scp -r /usr/local/nginx/html/tp5shop root@192.168.17.109:/usr/local/nginx/html/

更多推荐

play() failed because the user didn‘t interact with the document优化媒体不能自动播放

1.问题谷歌浏览器video元素设置autoplay,我们原意是希望页面加载时自动播放,但实际上并没有自动播放,在控制台报错如下:Uncaught(inpromise)DOMException:play()failedbecausetheuserdidn’tinteractwiththedocumentfirst.这里

前端面试题整理

1.沙箱隔离前端沙箱隔离(Frontendsandboxisolation)是一种安全机制,用于将前端代码与主机环境隔离开来,以保护系统的安全性和稳定性。在Web开发中,前端代码通常由JavaScript编写,而JavaScript是一种强大且灵活的语言,但它也可能存在一些安全风险。例如,恶意用户可能会通过前端代码执行

JavaEE初阶(5)多线程案例(定时器、标准库中的定时器、实现定时器、线程池、标准库中的线程池、实现线程池)

接上次博客:JavaEE初阶(4)(线程的状态、线程安全、synchronized、volatile、wait和notify、多线程的代码案例:单例模式——饿汉懒汉、阻塞队列)_di-Dora的博客-CSDN博客目录多线程案例定时器标准库中的定时器实现定时器线程池标准库中的线程池实现线程池多线程案例定时器定时器(Tim

Qt/C++音视频开发53-本地摄像头推流/桌面推流/文件推流/监控推流等

一、前言编写这个推流程序,最开始设计的时候是用视频文件推流,后面陆续增加了监控摄像头推流(其实就是rtsp视频流)、网络电台和视频推流(一般是rtmp或者http开头m3u8结尾的视频流)、本地摄像头推流(本地USB摄像头或者笔记本自带摄像头等)、桌面推流(将当前运行环境的系统桌面抓拍推流)。按照分类的话其实就是三大类

【Robotframework+python】实现http接口自动化测试

前言下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了bug,所以需要一遍遍回归case,过程一直手工去执行,苦不堪言。所以,对于即将开始的http接口测试需求,立马花了两天时

数据分析:利用gpt建立双11活动的分析框架

promt:您是一名某电商平台的资深数据分析师,首先,您知道什么是双11活动吗?output:当然,双11活动,也称为“光棍节”购物节,是中国最大的在线购物节之一。这个活动最初由阿里巴巴集团于2009年发起,并迅速吸引了其他电商平台的参与。双11活动通常在每年的11月11日进行,因此得名“双11”。这一天,各大电商平台

mybatis-plus

1.特征无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求支持Lambda形式调用:通

Java面向对象(四)

提示:以下是本篇文章正文内容,下面案例可供参考一、JavaBean是什么?1.概念JavaBean是一种Java语言写成的可重用组件。所谓javaBean,是指符合如下标准的Java类:类是公共的有一个无参的公共的构造器有属性,且有对应的get、set方法2.代码:publicclassCustomer{private

Vue3 基础 – 快速上手 & 常用指令

1.在HTML网页中使用vue3的3个基本步骤a.通过script标签的src属性,在当前网页中全局引入vue3的脚本文件:<scriptsrc="https://unpkg.com/vue@3/dist/vue.global.js"></script>b.创建vue3的单页面应用程序实例://2.1从Vue对象中解构

【数据可视化】动态条形图Python代码实现

使用Python中的bar_chart_race_cn库创建动态条形图前言数据可视化在今天的数据分析和传达信息中起着至关重要的作用。动态条形图是一种强大的数据可视化工具,可以帮助我们展示随时间变化的数据趋势。本文将介绍如何使用Python编程语言中的bar_chart_race_cn库创建动态条形图。动态条形图可以用于

JDBC实现数据库批量插入

目录一、JDBC实现批量插入几种方式二、PreparedStatementaddBatch方法使用三、Statement和PreparedStatement区别使用Java数据库连接(JDBC)实现批量插入可以提高数据库操作的效率,特别是在需要一次性插入多条数据时。一、JDBC实现批量插入几种方式使用PreparedS

热文推荐