请点击上面
一键关注!
内容来源:简书
链接:https://www.jianshu.com/p/b14ece444676
编者注:
备份是为了增强企业关键数据可靠性和数据冗余性,备份的必要性不言而喻。今天我们来探讨下备份常用的技术和分类。
所谓数据保护技术是指对
当前时间点
上的数据进行备份,如果说原始数据被误删除了,可以通过
备份数据
找回或恢复数据。从底层来分,数据保护可以分为文件级保护和块级保护。
文件级备份
文件级备份:
将磁盘上所有文件通过
调用文件系统接口
备份到另一个介质上。也就是把数据以文件形式读出,然后存储在另一个介质上面
。
此时备份软件只能感知到
文件
这一层。
我们知道一般来说,文件在原来的介质上,可以是不连续存放的,通过文件系统来管理和访问。当备份到新的介质上以后,文件完全可以
连续存放
。正因为如此,没有必要备份
元数据
,因为利用新介质进行恢复的时候,反正会重构文件系统。
块级备份
块级备份:
就是不管块上是否有数据,不考虑文件系统的逻辑,备份块设备上的每个块。
这样好处是不通过调用文件系统接口,速度更快,缺点的是备份的时候会把所有的块复制一遍,但是实际上很多扇区的数据是不对应真实文件的,也就是会备份很多僵尸扇区。而且备份之后,原来不连续的文件一样是不连续的文件,有很多的碎片。
远程文件复制
远程文件复制:
通过网络传输到
异地容灾点
。典型的代表是rsync异步远程文件同步软件。可以监视文件系统的动作,将文件的变化,同步到异地站点。增量复制。
远程卷镜像
这是基于
块
的远程备份。与
远程文件复制
不同的地方在于,是把
块数据
备份到异地站点。又可以分为同步和异步复制。
基于块的备份措施,一般都是在底层设备上进行,不耗费主机资源。
快照技术
远程镜像确实是对生产数据一种非常好的保护,但是需要镜像卷一直在线,主卷有写IO,那么镜像卷也需要有写IO。
如果想对
镜像卷
进行备份,需要将停止主卷的读写,然后将两个卷的镜像关系分离。所以当恢复主卷的IO的时候,镜像卷不会再被读写。然后才可以备份镜像卷的数据。
这样会存在一个问题,主卷上还继续有IO,将会导致数据与备份的镜像不一致。所以主卷上所有的写IO动作,会以
位图
BitMap
方式记录下来,BitMap上的每个位表示卷上的一个块,0表示未写入,1表示已写入,所以当拆分镜像以后,被写入了数据,程序将
BitMap
文件对应位从0变为1。备份完成以后,再做数据同步即可。
可以看出上述过程比较的繁琐,而且需要占用一块和主卷一样大小的镜像卷。
快照技术就是为了解决这种问题,其
基本思想
是抓取某一时间点磁盘卷上的所有数据。
快照分为:
基于文件系统的快照和基于物理卷的快照,下面介绍一下快照的底层原理。
基于文件系统的快照
文件系统管理的精髓:
链表、B树、位图,也就是元数据。
文件系统
-
将扇区组合成更大的逻辑块来降低管理规模。NTFS最大块可以到4KB,也就是8个扇区一组一个簇(Block),这样可以减少管理成本。
-
文件系统会创建所管理存储空间上所有簇的
位图
文件。每个位代表卷上的簇(或者物理扇区)是否被使用,如果被使用,则置1。
-
文件系统保存一份文件和其对应簇号的映射链。因为映射链本身和簇位图也是文件,也有自己的映射链,所以针对重要的元数据,有一个固定的入口:
root inode
。
写入新数据
删除数据
可以看出删除数据实际上不会抹掉实际的数据。所以,最重要的不是数据,而是文件——
簇号映射链和位图
等元数据。
也就是说我们要做备份,
只需要把某时刻的文件系统中的映射图表保存下来。
但是必须保证卷上的数据不被IO写入了,同时又要不应用还不能中断。既然原来的空间不能再写了,我们可以写到其他的
空闲区域。
其实只有首次覆盖的时候,才重定向,因为重定向以后的数据块,哪怕被覆盖了,也不影响之前快照保存的数据了。
到这一步,看上去挺完美,实际上存在一个问题:
如果
元数据
特别大怎么办?
对于海量庞大的文件系统,元数据量可能到GB级别。如果复制的话,时间上仍然太多。
我们可以回头想想,实际上元数据可以看做指针,指向具体存储的位置。我们复制到元数据,相当于复制了一堆指针。现在元数据太多了,我们能不能把这个
元数据链
的指针给复制了?当然可以,元数据有个
根入口块
,或者称为Super Block,这个块是固定不变的,里面存放有指向下一级元数据链块的指针。
那么操作系统每次载入元数据的时候,都需要从这个地址读入Super Block,从而一层一层的遍历。
基于物理卷的快照
基于物理卷的快照比文件系统快照要简单得多。因为LUN一般在底层磁盘上是恒定的,不像文件系统一样可以随机细粒度的分布。所以可以认为
LUN的元数据就是在底层磁盘的起始和结束地址。
这样在快照的时候,需要复制的元数据就更少了,但是完成了以后,需要按照一定粒度来做CoFW或者RoFW,还需要记录更多数据映射指针,就比较难受了。
对于实现了
块级虚拟化
的系统如NetApp、XIV、3PAR等,它们的LUN在底层位置是不固定的,LUN就相当于一个文件,存在元数据链来进行映射管理的维护,所以这些系统实现快照的原理与文件系统快照类似。
基于物理卷的快照,相当于给物理卷增加了“卷扇区映射管理系统”。在底层卷实现快照,可以减轻文件系统的负担。
卷扇区方都是用LBA来编号的,实现快照的时候,程序首先保留一张
初始LBA表
,每当有新的写入请求的时候,重定向到另一个地方,并在初始的LBA表中做好记录,比如:
原始LBA:
卷A的10000号,映射到LBA:卷B的100号。
值得说明的是,
文件系统无法感知重定向,文件系统在它的映射图里面还是记录了原始的LBA地址
。此时如果来了新的写IO,有两种方式一种是
Write Redirect
,另外一种是
Copy on Write
。
所谓Write Redirect就是将文件系统的读写请求,重定向到卷B,这样每次IO其实都会查找快照映射表,降低了性能。所以引入了Copy on Write。
所谓Copy on write,就是当写请求来的时候,先把原来的扇区的数据复制一份到空闲卷,然后将新数据写入原卷。不过这种复制操作只发生在
原卷某个或者快照之后从未更新过的块
上面,若是某个块在快照之后更新过了,说明之前的数据已经转移走了,可以放心的覆盖。
所以Copy on Write实际上是让旧数据先占着位置,等新数据来了以后先把原来的数据复制走,再更新,而且一旦更新了一次,可以直接覆盖。
带来的好处是 ,原卷上的数据随时是最新的状态,每个IO可以直接访问原卷的地址,而不需要遍历映射表。
RoFW方式与CoFW方式比较
不管是RoFW还是CoFW,只要上层向
快照后没有更新过的数据块
进行写,都需要占用一个新的块。所以如果将所有扇区块都更新了,新卷的容量和原来的容量应该一样大,但是通常不会覆盖百分之百,所以只要预设原容量的30%即可。
IO资源消耗:
所以RoFW相对CoFW方式在IO资源消耗与IO延迟上有优势。
由于只有首次覆盖才会Copy或者Redirect,那么如何
区分是否是首次覆盖呢
?可以使用记录表(文件级快照)或者位图(卷快照)来记录每个块是否被覆盖过。
对于
读IO:
RoFW会影响
读性能
,因为重定向出去以后,数据块排布都是乱的,如果把快照删除后,不好清理战场,严重影响后续的读写性能。
综合来说,RoFW比较吃计算资源,而CoFW比较耗费IO资源。我们知道其实一般来说读比写多,
当覆盖第二次
以后:
尤其在LUN卷级快照下,原本卷在底层磁盘分布式是定死的,寻址非常迅速。但是RoFW引入了,LUN的块随机定向到其他的空间的,所以需要记录新的指针链,而且被写出的块不是连续排列的。对性能影响非常明显的。
绝大多数的厂商使用的还是
CoFW
,但是一些本来就使用LUN随机分块分布模式的存储系统比如XIV、NetApp等,都使用RoFW,因为原本其LUN的元数据链就很复杂,而且原来就是随机分布的,RoFW的后遗症对它们反而是正常的。
快照的意义
快照所保存下来的卷数据,相当于
一次意外掉电之后卷上的数据
。怎么理解?
上层应用和文件系统都有缓存,
文件系统缓存的是文件系统的元数据和文件的实体数据。
每隔一段时间(Linux一般是30s)批量Flush到磁盘上。而且不是只做一次IO,有可能会对磁盘做多次IO。如果快照生成的时间恰恰在这连续的IO之间,那么此时卷上的数据实际上有可能不一致。
文件系统的机制是先写入数据到磁盘,元数据保存在缓存里面,最后再写元数据。因为如果先写元数据,突然断电了,那么元数据对应的僵尸扇区的数据会被认为是文件的,显然后果不堪设想。
总之,快照极可能生成不一致的数据。
那么为什么还要用快照呢?
但是快照会存在不一致的问题,如何解决?
既然快照无异于一次磁盘掉电,那么利用快照恢复数据之后,
文件系统可以进行一致性检查
,数据库也会利用日志来使数据文件处于一致。
另外,现在主流的快照解决方案是在主机上安装一个
代理
,
执行快照前,先通知文件系统将缓存中的数据全部Flush到磁盘,然后立即生成快照。
-
快照还可以预防数据
逻辑损坏
,也就是比如T1时刻,做了快照,T2时刻,因为管理员操作不当,误删了一个文件,T3的时候,进行了全备份操作。此时,这个文件看似永久丢失了,其实,此时还可以通过快照恢复这个文件。
-
快照还可以降低一致性备份的窗口。如果没有快照,要对某个卷进行一致性备份,需要暂停写IO,所以
备份窗口
比较长,需要等待备份停止以后才能继续写IO。使用快照的话,只需要复制元数据,然后在后台进行备份,降低了影响。
-
备份完毕以后,如何能检测数据是否是真一致的?若没有快照,需要将备份数据恢复到独立的物理空间里面,挂载到另一台机器上。有了快照,可以将快照直接挂载到另一台主机,避免了数据物理恢复导入的过程。
卷Clone技术
快照类似于某时刻的影子,而
克隆则是某时刻的实体
。每时刻生成了一份可写的快照,就叫对卷某时刻的一份Clone。然后这份Clone内容每被修改的部分是与源卷共享的,所以源卷没了,则Clone就没了,所以叫
虚拟
Clone。如果把数据复制出来,生成一个独立的卷,则就叫Split Clone,也就是可以得到
实Clone
。
卷Clone最大的好处在于可以瞬间生成针对某个卷可写的镜像,而不管卷的数据量有多大。数据备份系统的基本要件:
-
备份对象:
需要进行备份的备份源。
-
备份目的:
磁盘、磁带等介质
-
备份通路:
网络
-
备份执行引擎:
备份软件
-
备份策略
下面重点介绍一下
备份目的、备份通路、备份引擎
等技术细节。
备份目的地
备份到本地磁盘
备份目的地是在本地的磁盘,则只需要将数据备份到本地磁盘的另外分区中或者目录中。
这样不需要网络,缺点是对备份对象自己的性能影响大。还会对其他的IO密集型程序造成影响。
这种方式一般用于不关键的应用和非IO密集型应用。比如E-mail,对转发实时性要求不高。
备份到SAN上的磁盘
备份到SAN上的磁盘,就是将需要备份的数据,从本次磁盘读入内存,再写入HBA卡缓冲区,然后再通过线缆传送到磁盘阵列上。
-
优点:
只耗费SAN公用网络带宽,对主体影响小。
-
缺点:
对公共网络资源和出口带宽有影响。
备份到NAS目录
备份到NAS目录就是将数据备份到远程共享目录中。比如window中常用的文件夹共享。因为数据一般是通过以太网进行传递的,占用了前端的网络带宽,但是相对廉价,不需要部署SAN。
备份到磁带库
现在出现一种虚拟磁带库,即用磁盘来模拟磁带,对主机来说看到的是一台磁带库,实际上是一台磁盘阵列,主机照样使用磁带库一样来使用虚拟磁带库。要做到这点,就必须在磁盘阵列的控制器上做虚拟化操作,也就是实现协议转换器的作用。可以带来了的好处是:
信息生命周期管理
将使用不频繁的数据移动到低速、低成本的设备上。比如只给视频应用分配20GB的空间,但是报告有500GB的空间,剩下的空间是在在磁带库上。
分级存储
-
一线磁盘阵列
-
二线虚拟磁带库:
近期不会被频繁调度。利用大容量SATA盘,性能适中的控制器。
-
带库或者光盘库:
几年甚至几十年都不访问到。
备份通路
本地备份
数据流向:
本地磁盘—>总线—>磁盘控制器—>总线—>内存—>总线—>磁盘控制器—>总线—>本地磁盘。
也即数据从本地磁盘出发,
经过本地的总线 和内存,经过CPU少量控制逻辑代码之后,流回本地磁盘。
通过前端网络备份
经过前端网络备份的数据流向是:
本地磁盘—>总线—>磁盘控制器—>总线—>内存—>总线—>以太网卡—>网线—>以太网—>网线—>目标计算机的网卡—>总线—>内存—>总线—>目标计算机的磁盘。
数据从本地磁盘出发,流经本地总线和内存,然后流到本地网卡,通过网络传送到目标计算机磁盘。
通过后端网络备份
通过后端网络备份的数据流向是:
本地磁盘—>总线—>控制器—>总线—>内存—>总线—>后端HBA卡—>线缆—>后端交换设备—>线缆—>备份目的的后端网卡—>总线—>内存—>磁盘。
LAN Free备份
备份的时候不经过LAN,也就是不流经前端网络,也叫Frontend Free。这样的好处是
不耗费前端网络的带宽,对客户终端接受服务器的数据不影响。
因为前端网络一般是是慢速网络 ,资源非常珍贵。无论是本地、还是网络,都需要待备份的服务器付出代价,即需要读取备份源数据到自身的内存,然后从内存写入备份的目的地。对主机CPU、内存都有浪费。能否不消耗服务器的性能呢?可以,使用Server Free备份。
Server Free备份
Server Free备份的时候,数据不用流经服务器的总线和内存,消耗极少,甚至不消耗主机资源。备份源和备份目标都不会在服务器上,因为如果在服务器上,数据从磁盘读出,要流将总线,然后到内存,这就不是Server Free?那怎么做呢?
备份策略
备份引擎:
决定整个数据备份系统应该怎么运作,备份那些内容,什么时候开始备份,备份时间有没有限制等的策略。
备份服务器
备份引擎以什么形式体现呢?当然是运行在
主机上的程序
,所以需要一台计算机来做引擎的执行者。
那么备份服务器的备份策略和规则,怎么传给整个数据备份系统中的服务器?通过以太网,因为以太网扩展性好,适合节点间通信。相对于以太网,SAN更适合传送大量的数据。所以
常用前端网络来连接待备份的服务器和备份服务器,因为备份策略的数据包不多。
备份服务器如何与每个待备份的服务器建立通话?怎么通话?规则怎么定?需要待备份服务器上运行一个
代理程序
,专门解释备份服务器发来的命令,根据命令作出动作。
这个运行在待备份服务器上的程序,就叫
备份代理
,监听端口,接收备份服务器发来的命令。
介质服务器
若数据备份系统中有一台SCSI磁带机,且多台主机想备份到这台磁带机上。而SCSI磁带机只能同时接到一台主机上。
那么怎么办呢?可以引入一台专门的计算机,只能由这台计算机来操作磁带机。
需要备份的计算机通过以太网将数据发给这台
掌管磁带机的计算机
,然后写给磁带机。
这样磁带机成为了公用设备,而在整个系统中,只有一台计算机能掌管备份目标,它就类似于一个
代理
,代理其他服务器执行备份。我们把它称为
介质服务器。
还有一个问题,如果有多台服务器向
介质服务器
发出请求,怎么办?当然需要一个
协调员
,也就是
备份服务器
,它可以指挥安装在待备份服务器的
代理
,让每台服务器按照顺序有条理的使用
介质服务器
提供的备份介质进行备份。
三种备份方式
完全备份:
不管文件多大,只要要备份,都需要将文件都备份下来。