网络诚可贵,计算价更高;若是数据没,二者皆垮掉——浅谈数据保护的类型和差异

最近经常被问到一些和数据保护相关的问题,有的是针对业务连续方面的,有的是针对数据安全方面的。数据保护的方法多种多样,不同场景需要使用不同的方法或者多种方法的组合方案。而众多的数据保护方法往往给不熟悉的人带来疑惑,不知道如何选择。本文就针对常见的数据保护方法做简单探讨。

先放一张老东家的数据保护全景图镇楼:

从上图可以看出,数据保护有多种方式:高可靠、复制、快照、备份、归档,以及最近方兴未艾的连续数据保护等。
每种保护方式对应了不同的数据保护要求:

总体来说,IT系统对数据的保护分为两类:

  • 业务可持续性:当出现故障时,系统会受到多大影响?包含两个维度:RPO(丢失多少数据)及RTO(多长时间可以恢复)
  • 基于时间点的数据保护:当出现数据逻辑错误时,可以将数据会退到一个时间点,对历史数据的长时间保护。
    当然,这两点并不是绝对隔离的,例如,当数据出现灾害性损失,会用历史数据来恢复业务,实现业务可持续性。而企业里,应该根据实际需求选择多种方案来实现立体的保护。

下边,具体看看不同数据保护手段实现的功能。

备份

作为最常见的数据保护方式,备份通过定期或者实时发起的操作,将当前时间点业务数据复制到另一个地方,实现数据保护:

备份是一种典型的历史数据保护手段,复制出来的数据(备份数据)是一种离线数据,和主存储无关,还可以异地保存。只要备份数据存在,业务就可以恢复到备份时间点,所以备份经常用作历史数据核查(例如审计)、应对灾难性损失(如火灾地震)等场景。甚至在很多行业里,备份是合规性审查的必备因素。
备份经过多年的发展,不是简单的复制数据,而是和应用做了很好的整合,通过调用应用自身的保护机制(如Oracle RMAN)实现备份管理,所以备份可以很好的保持应用一致性。
在Azure,提供了很好的备份手段。在Azure上,可以使用如下的备份方式:

  1. ASR:Azure原生的备份系统,可以备份文件、Azure虚机、SQL数据库、Exchange服务器等,而且不只限于Azure,可以备份本地机房甚至其他云上的数据
  2. 第三方镜像:如果觉得ASR功能不够,例如还有Linux文件、MySQL等备份需求,可以使用MarketPlace里的第三方镜像,例如Comvault、Avamar等,相当于在云端部署一套备份环境实现更多功能
  3. 本地备份系统的延伸:传统本地备份系统使用磁带、虚拟带库、磁盘等作为备份介质,而公有云则有效扩展备份介质的容量,降低成本,并且不用担心数据安全。例如NetApp AltaVault、EMC DD Tier等应用装置,将Azure整合到内部,对备份软件提供接口,备份数据透明转移到云端,实现“无限大”的备份容量。

快照

快照是一个很容易和备份混淆的概念,相同之处是都是对历史时间点的保护,不同之处是快照并不真正把所以数据复制到其他地方。
快照是一个“瞬时”操作,记录的是数据指针而不是数据本身。当某个或者某些数据块发生变化时,原有的数据块并不会被覆盖,而是被转移到新的位置,或者将新数据写入新位置,然后修改指针,实现数据的更新。但需要回退时,只要根据快照时记录的原始指针就可以将数据恢复到快照时间点。

与备份比较,快照非常迅速就可以完成,不用复杂的策略管理。但快照也有其不足之处:

  • 占用主存储空间,单独快照无法离线保存实现数据容灾
  • 基于磁盘操作,没有应用感知,无法 保证应用数据一致性(脏数据问题)
    现在也有一些方案解决上述问题,如对快照的备份、黄金时间点快照等,但总体来说,快照更适合短时间临时的数据保护。例如系统升级,但不知道是否会造成业务异常,就可以先做个快照,如果出现异常,可快速回退到快照时间点;如果业务正常,经过一段时间试运行后直接删除快照即可。
    Azure为虚机提供了快照功能,并且可以将快照用作直接生成磁盘,实现快速业务恢复或历史数据检查。

连续数据保护

备份可以长时间保护数据,但恢复时间长,颗粒度比较粗糙(一般以天为单位);快照可以迅速完成保护或者快速回退,但是无法长期保留历史数据。所以一种新的数据保护方式CDP——连续数据保护这几年成为了一颗新星。
如果说备份和快照是数据的历史“照片”,那么CDP可理解为数据的历史“录像”。CDP通过写拆分或者连续快照的方式记录下数据的每一个变化,存放在本地或者转储到其他地方:

可以看到,CDP整合了备份和快照的长处,即实现长时间数据保护,又可以迅速恢复到任意时间点(相对于照片,录像是连续的),可以做到秒级RPO,分钟级RTO。
CDP也有其不足之处,例如较长时间前的数据恢复比较慢,对应用的整合不是很好等,但不妨碍其逐步成为一种主流的数据保护方式。
Azure的ASR提供的站点恢复功能其实就是你用了CDP,将源端数据不停拉到Azure,然后根据需要选择合适的恢复点恢复虚机。

归档

不同于以上几种数据保护手段不影响源数据,归档是一种“有损”的操作。
归档的基本操作是按策略实时或定期将旧数据从生产系统删除,保留在归档系统里,但在生产系统保留索引,实现生产数据的轻量化:

通常用到归档的环境有:

  • 邮件系统:用户可随时删除邮件,保证邮箱的容量不超过设计,而后台归档系统里保留了所有收到发出的邮件,以共合规检查(如塞班斯法案)。
  • 业务数据库:按日期将旧数据复制到归档库,同时从主库中删除,或者通过分库分表的方式,减少主库的容量,提升数据库性能。
    最新的Azure Blob存储在热、冷两层之外,也开始提供归档层给用户,实现大容量低成本的长期数据保存。

复制

复制不是为了保护历史数据,而是保护业务持续性。
通常业务数据我们放到具备raid保护的磁盘阵列,但是盘阵本身会成为单点故障,这时候就需要通过复制的方式来实现数据保护。数据复制可以在应用层(如Oracle ASR)、OS层(如LVM),或者是在盘阵。
盘阵的复制有两种方式:

主备

主备式复制的盘阵分为一主一备,数据写入主盘阵后再由主盘阵发起指令同步或异步的方式写入备盘阵:

这是传统的数据复制方式,但是在盘阵出现故障时,需要将背盘阵提升为主盘阵并挂载到服务器实现业务恢复,无法做到RTO=0,并且盘阵修复后需要重新切换主备。

双活

双活的数据复制是通过存储网关或者软件方式,将两台甚至多台盘阵虚拟为一台盘阵提供给服务器,服务器同时写入多个盘阵:

这样,底层盘阵的故障后更换对服务器是透明的,无需在服务器端做任何操作,可实现RTO=0。
但是双活对距离有限制,通常要求数据延迟低于一定值,所以无法实现远距离双活。

如果有严格的业务持续性保护要求,可以设计为两地三中心,同一地区两数据中心双活,再异步复制到异地第三中心,实现远程容灾:

数据复制还有一种使用场景:
某些环境下有海量小图片(如论坛头像),或者大文件(例如视频)。如果每天备份,需要消耗大量时间和资源。而这些数据不同于数据库,一般不会有改变,所以没有必要重复备份,可以通过同步复制方式做两份副本,保证数据不丢失即可。

需要注意的是,复制方式的多副本数据是保持一致的,修改和删除的动作会作用到所有副本,所以复制不能保护数据被修改或被删除。

Azure为所有写入的数据提供了3副本的本地保护机制(LRS),客户不同担心数据安全,所以在vm使用lvm或软raid时,使用raid0即可,不用考虑冗余机制做数据保护。同时也提供异步的跨Rdgion保护共客户选择(GRS)。

——————万恶分界线——————
以上简单介绍了对于数据保护的各种方式,大家可根据实际情况选择使用,有具体需求欢迎讨论。