使用rsync同步服务器目录及文件遇到的问题

avatar
作者
筋斗云
阅读量:0

背景:某天,客户找我倾诉了一个需求,问我是否有方法解决。诉求如下:有一个生产服务器(我暂时把它称为主站服务器),还有一个专门用来备份主站服务器上目录和文件的服务器(我姑且把它称为子站备份服务器)。平时这个两个服务器是每隔一天就会同步一次/data/下的所有内容,不知什么原因导致的两个服务器的时间不同步进而导致两个服务器下的目录文件数量相差甚大。诉求就是如何将这两台服务器/data/目录下的文件保持一致?

分析问题:客户使用的是rsync指令进行数据远程拷贝,那就在他们运行的rsync指令上进行排查,且由于不同的参数会造成不同的拷贝结果,需要查看客户使用的参数是否正确。

象征性的写一下指令:

rsync -chavzP --delete /data/*  root@192.168.139.150:/data/ 

我一看这不是加了--delete参数了吗,怎么还会造成主备服务器之间的数据同步不一致呢。实在不应该啊,我在我本地环境下测试了,发现使用rsync导致主备服务器数据不一致(请注意我说的文件目录数量不一致,不是目录文件内容不一致。倘若文件内容不一致那是rsync指令出现bug,不能远程同步目录文件)的原因可以有两个分别是:

1、如果我在备份服务器的备份目录下,添加文件或者目录会导致主备服务器上的目录文件数量不一致。

2、如果我在一次备份(无论这个备份是全量备份还是增量备份)后另外在源服务器上删除目录文件后,也会造成主备服务器上目录文件数量不一致。

我们都晓得,rsync指令是增量备份(这也是它为什么同步大量数据很快的原因)。它同步的原理是:rsync使用“Rsync算法”来同步文件,该算法只传送两个文件的不同部分,因此速度相当快。

友情链接:这个也是我整理的一个有关备份的博客

备份策略:全量备份,增量备份,差异备份_增量备份,全量备份-CSDN博客

 那么,我现在就需要问清楚客户是主备服务器目录文件内容不一样还是目录文件数量不一致,客户给我反馈说是目录文件数量不一致。那这太好办了,那不就是我上面总结的这两条直接告知客户就完事了,然而问题来了。客户说我们添加了--delete参数啊,不是会保持主备服务器上目录文件数据一致吗,怎么现在备份服务器比主服务器多了这么多文件。

然后我就去深度学习了一下,rsync的参数客户使用的-chavzP都没啥问题,无非就是一些归档、递归、压缩数据、显示传输进度,但是到了--delete参数的介绍时就出现了意想不到的坑,要我逐字逐句进行阅读。

我呢,英文水平一般般,所以我需要体谅到我及其他读者的感受,为了表现出我的友好,我就用大白话为在电脑或手机前的您解释这段话的意思。

解释如下:

--delete参数告诉我们rsync从接收端删除多余的文件(不在发送端的文件),但只删除正在同步的目录。这便意味着主备服务器之间只要同步过文件,若在主服务器下删除文件和在备份服务器上添加删除文件都会导致主备服务器文件数量不一致,但是它不影响主服务器上的数据完整地同步至备份服务器下,它不会删除备份服务器目录下本来就存在的目录。说白了就是,永远以源节点为参照将源节点的数据同步至备份服务器备份目录下。

解决:

告知客户后,他们说他们这边会有在源服务器(也就是主服务器)上删除文件和目录的操作,既然可以将主服务器的内容完整备份至备份服务器,那就不影响运维管理规范。

分析排查了半天竟然是对rsync指令参数的理解不够深入,闹了个乌龙事件。

再次还是要告诫自己,基础知识还是很重要。至少要对基本的参数含义了解深入才行。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!