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