新的一周,新的开始,坐在工位,趁着没有忙,赶紧整理一下技术笔记,今天分享的是深入分析rsync的一些知识点:
既然是深度讲解Rsync,我就先聊聊rsync的排除,依旧还是这张拓扑:
在说排除打包的是知识点之前,我先对之前的rsync服务补充以一些:
当我们系统启动时,看看rsync启动没有?
很明显,看的出rsync服务是没有启动的!

所以,我要在这里启动以进程方式启动rsync服务:
再次查看rsync就是成功启动起来了。

但是这样做虽然解决了目前的问题,但是一旦系统重启之后,就有需要到这一步手动启动!
所以,我要把rsync放在rc.local里面去!
看下此命令的全路径,原因在于服务一旦放在rc.local里面中,必须使用全路径!所以我要查看这一步:
我第一种办法用vi编辑:
当然,也可以用追加的办法来做,这样的好处在于写命令全路径时不容易出错!(推荐用)

弄完之后,记得要查看核实。

然后就可以用客户端进行推送和拉取操作了。
在这里,我依靠了历史命令中的一个快捷功能:
查看历史命令,然后根据历史命令的序号执行,
这里我用的是从服务端进行的拉取动作!


我再来解释下rsync配置文件中“模块”的意思:
步入正题:
rsync的排除:用man 来了解下rsync:
在下面搜索 /excude

Rsync的排除有两方面:
客户端通过命令来进行排除某些内容。(很灵活)
服务端通过配置参数进行排除某些内容。(不推荐)
我先演示下在客户端上通过命令来进行排除:
我将演示在客户端上推送给服务端除了rsync-test之外的文件。
为了保证实验准确性,我先将服务端准备在客户端推送的文件路径上的文件删除掉!

在这次试验中,我遇到了以下问题:(权限问题,根据错误提示去翻译,去定位!)

经过认真排查,我发现是服务端的share文件的权限出现了问题!而且还要注意子目录的文件是不是有权限!还可以利用日志的输出去观察:
解决办法:

所以说以整体部署为思路 ,虽然排错很辛苦,但是一旦解决就超级有成就感!
言归正传:我将演示在客户端上推送给服务端除了rsync-test之外的文件:
一般推荐是在客户端上进行排除操作,这样会比较灵活,如果在服务端上做排除每次都需要更改,有一些麻烦。
在服务端进行核实,是不是排除:已经排除!
那么,在实际生产中如果要排除多个文件的时候,就需要稍微改动下:
命令格式如下:(排除多个文件用{}和,隔开。如果是名字连续文件,可以用..连续。) rsync -avz --exclude={rsync-test1.txt,rsync-test2.txt} /fengxin/ rsync_backup@192.168.8.188::share
Password:
我的需求是排除-test1 -test2.
服务端进行核实:确实是指传送了test.txt这一个文件。
rsync的排除就简单介绍到这
无差异同步。
无差异同步能解决什么呢?之前,我在客户端上操作推送或者拉取动作时:
在普通同步时是存在差异的。
在实际生产工作中,会用到无差异同步的,以防删除的文件在某一个时刻利用备份机制恢复。

无差异同步其实也很简单:就是一个简单的参数,但是其涉及到的风险面还是挺广的,因为这一删除连备份都没有啦!
其中,无差异备份也是分为push和Pull的应用场景:
push:备份
pull:代码发布,下载。
push:
数据流方向是从客户端到服务端。(站在客户端上来说)
主要用作备份!
还是在客户端上进行操作!
我举一个例子:假设我客户端的当前要推送给服务端的目录被黑客攻入,删除了全部的文件
在没有做无差异备份的时候,服务端的文件是完好的:
客户端做无差异备份的参数(我在客户端推送当前空的目录给服务端。):命令格式如下 :
我可以清楚的看见图中提示:deleting的提示!
回到服务端:看下共享目录下的文件:备份的文件就没有了。
因此:可以证明,在客户端推送无差异备份,一旦本地丢失了,就连备份服务器内文件也会丢失!
因此,在做这个操作时,一定要知道此命令背后涉及到影响:
-- delete风险在于:
本地存在什么,远端就有什么!
本地没有的,远端的有也要删除,所造成的影响就是服务器端的目录数据可能丢失!
pull:
数据流的方向是从服务端到客户端(站在客户端上来说)
代码发布,下载!
-- delete风险在于:
远端有什么,本地就有什么,远端没有的,本地有的也要删除,所造成的影响本地目录文件丢失!
我来演示下:
服务端已经没有什么文件了!
站在客户端上做pull拉取动作!原来客户端是有文件的!现在变成已有的文件消失了。

因此总结出无差异同步的生产场景:
一般是有需要两台服务器之间,必须要求数据一致!且实时性又不是很高的情况下,例如架构中的两台负载均衡的web服务器之间的同步。
下面要对rsync 排错这一块做下总结分析:(在企业实际生产运维上也很重要,快速的定位故障点是排错能力高低的体现!)
排错的前提一定是:
1.部署流程熟悉。(一般要主要要共享的文件的权限,目录是否存在,防火墙是否关闭,等常见错误。)
2.原理理解。
3.根据日志的输出来分析。
在运维工作中,除了RSYNC这个软件做同步外,还可以用union做双向同步,的,drdb用作实时的大数据量的同步,属于底层的文件系统,效率更高!
数据库有自身的同步工具,例如musql 有repliacation !而oracle dataguard (物理和逻辑两个方面)。





