一、概述
在原先《备份概述》我们说过备份的一些方式。比如说一台服务器上我将第一个分区备份到第二个分区,也就是俗称的“本地备份”,备份的具体工具有tar、dd、dump、cp等等都能实现。但其实还是“把鸡蛋放在一个同篮子里”,一旦硬件出现问题然后无法正常的引导和启动,数据还是没办法找回,为了解决本地备份的这个问题,我们引入了另外一种备份机制----“异地备份”。
*异地备份:指在另外一个位置备份数据,避免因为火灾、自然灾害、盗窃等造成数据丢失与服务中断。例如银行主要机房或资料中心位于甲地,而在乙地建有同样的资料中心,平时会通过网络传输同步资料。当甲地因为各种原因无法运行时,乙地可接手运行。
有人会说,我在第一台服务器上tar或者cp一下,然后通过scp或者sftp传到第二台不就完了了么?
在生产环境下,数据量是比较大的,首先说tar或者cp会花费大量的时间和占用系统性能,通过scp或者sftp传输,也会占用大量的网络资源,这在实际的生产环境下肯定是不被允许的。其次,这些命令或者说工具是需要管理员手工输入的,需要搭配计划任务crontab一起。crontab设定的时间也不好掌握,crontab设定的时间过短,比如说1分钟执行一次,可能会出现第一次数据没有执行完毕,第二次又执行的情况。crontab设定的时间过长,比如5小时执行一次,可能会出现因为数据没有及时的备份,导致数据丢失的情况。
所以在生产环境下需要有一种数据备份,需满足以下的需求:
1、通过网络传输的备份(异地备份)
2、实时的数据文件同步
3、对系统资源的占用较小,且效率较高
rsync就是为了满足以上的需求而出现的,使用GUN开源许可协议,是一款快速增量备份的工具,目前最新版本为3.1.3(2018年1月28日),官方网站https://rsync.samba.org/。需要注意!rsync本身只是一个增量备份的工具,并不具备实时数据同步的功能,需要搭配另外的程序做功能补充。除了这之外,同步是单向的,要想双向备份,需要搭配另外的程序才能实现。
在平台支持上,支持绝大多数的类Unix,不管是Linux、BSD等都支持。另外windows下也有相关的rsync,比如cwRsync。
*增量备份:指对上一次全部备份或增量备份后更新的数据进行备份。过程是这样的,比如第一天进行一次全部备份(也叫完整备份);第二天进行一次新增数据的备份,相对于全部备份来说;第三天在第二天的基础上再进行一次新增数据的备份,相对于第二天来说,以此类推。
二、基本原理和特点
rsync是如何实现高效的单向数据同步备份的?
rsync算法(checksum算法),从官方域名上或许你能看出一些端倪,这个算法和samba的开发者即澳大利亚程序员Andrew Tridgell有关。rsync算法会将同步的数据平均拆分成n个块,生成块的校验和,通过本地客户端校验和和服务器的校验和做对比,通过块的不一致对比数据的差异在哪里。
rsync的特点有:
能以递归的形式更新整个目录;
能有选择的保留文件同步属性,比如硬链接、软链接、所有者、所属组、对应权限、修改时间等,可以保留其中的一部分属性;
支持两种方式作为传输的端口,即rsh和ssh,也就是说支持两种搭建方式;
支持匿名rsync同步文件,一种常用的镜像工具。
*镜像:原指光透过物体在镜面所生成的像,在计算机中,比如你听到的“镜像站点”或者“镜像文件iso‘,就是一种对文件数据内容的拷贝。
三、同步源和发起端
在rsync中,我们习惯将服务器端称为同步源(也叫备份源),主要有两种:rsync同步源和SSH同步源。
访问的客户端,我们习惯称为发起端。