web服务器的文件及时同步

学习目标

1、能够理解为何要服务器间文件同步

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

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

一、同步文件介绍

1、服务器文件同步的必要性

实现了线上服务的提供,可以给用户提供稳定的整个的web服务。但是,在最近的操作中,也发现了一些问题。

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

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

业务集群:

线上 对外提供服务的 10台提供给用户对外服务 存储

线下 代码发布(CI CD git、jenkins、gitlab)灰度发布 监控(主机、服务zabbix),日志收集分析(ELK elasticsearch (elasticsearch-head) logstash kibana kafka消息队列)

2、同步文件的几种方式

ssh组件:ssh远程连接服务器 scp安全复制 sftp远程文件传输 慢 比ftp多了ssl

1、scp

scp是secure copy的缩写,scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令 全量同步

问题:全部复制过去比较慢 效率低一些 scp不能够远程删除和增量同步

2、rsync

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

问题:当文件变动,不能够实时同步

3、rsync+sersync

inotify-tools和sersync属于同类

sersync是基于inotify+rsync的大量文件的多服务器自动同步程序

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

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

4、sersync特点:

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

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

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

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

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

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

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

二、同步文件案例

1、scp

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

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

如果scp远程连接没有响应,很可能是因为没有hosts解析目标服务器的ip

①生成公钥(源服务器)

ssh-keygen

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

先切换到.ssh/

cd /root/ .ssh/

再复制添加公钥

ssh-copy-id -i id_rsa.pub 192.168.17.101

不指定-i也能自动创建authorized_keys,把公钥存进去 发送

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

把整个目录都替换了,全量同步,因为scp不知道哪个文件修改了

可以把以上推送命令,写入到脚本中,业务代码变化之后,直接执行脚本就可以

缺点是速度慢,不能删除操作。

2、rsync

既是一个服务,也是命令

1、web1文件变动

2、在web1执行推送

rsync -av /usr/local/nginx/html/tp5shop/ root@192.168.17.102:/usr/local/nginx/html

在web2上查看实现了增量同步,速度快

假如web1的文本被删除了,rsync也能实现同步删除操作 到远程的web2:ip 102

rsync -av --delete /usr/local/nginx/html/tp5shop/ root@192.168.17.102:/usr/local/nginx/html

问题:不能够文件变动就同步,想折中的版本通过计划任务(crontab) , crontab默认一分钟

tail -f /var/log/.cron

如何实现文件及时,自动同步?

可以写一个脚本:

vim rsync_20s.sh

到脚本所在目录后台启动脚本,脚本进程1723

还可以优化脚本,加上rsync日志信息

发送增加的文件80kB,被接收的472字节 每秒162276字节 sec秒的缩写 received 被接收

3、rersync + rsync

实现方式:

源服务器 安装sersync 监控文件(inotify)的变动 调用rsync传输数据给目标服务器

目标服务器 启动rsync的服务器

源服务器必须 先生成密钥对,然后复制发送公钥给目标服务器实现ssh(远程连接)免密登录

rsync同步web2

sersync监控触发同步web1

3.1、目标服务器配置

配置rsync服务

1、安装rsync

yum -y install rsync

2、配置rsync

vim /etc/rsyncd . conf

配置文件内容

启动daemon(后台进程) 也就是守护进程

3.2、源服务器配置
mv sersync2.5.4_64bit_binary_stable_final.tar.gz /usr/local/
cd /usr/local/
tar xvf sersync2 .5.4_64bit_binary_stable_final.tar. gz
mv GNU-Linux-x86 sersync   //移动解压出来的文件到sersync

修改配置文件

如果需要同步多台web服务器,可以直接在源服务器的监控软件sersync的配置文件里面添加

目标服务器配置文件里面配置的模块name="模块名称"

启动sersync服务

有些文件源服务器需要,目标服务器不需要,可以排除设置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值