Rsync学习笔记1

企业架构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:

Rsync学习笔记1_第1张图片

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

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

Rsync学习笔记1_第2张图片

在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
[email protected]'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)测试修改业务代码:

Rsync学习笔记1_第3张图片

通过scp推送同步。

scp的缺点:

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

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

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

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

scp -r /usr/local/nginx/html/tp5shop [email protected]:/usr/local/nginx/html/

你可能感兴趣的:(Rsync,Linux,linux)