备份是保证数据安全的重要防线,这条防线都有哪些特征?需要哪些技术搭建?UnitedStack有云存储组PTL乔建峰在开源中国的存储分论坛上,对这些问题进行了剖析,详见下文:
点击下载PPT: OpenStack里的连续数据保护(CDP)服务_
首先灾备是备什么的,大家都知道,就是备数据的。那么数据的重要性如何、如何存放、什么规模等等直接决定了是否需要灾备、以及需要什么样的灾备的问题。随着网络和虚拟化的进一步发展,我们进入了云计算时代,这个时代的特点是虚拟化、分布式。存储是分布式的,因为用户越来越多,所以数据量是暴增的,也就意味着如果没有保护措施,那么会影响更多用户并给企业带来严重损失。
在遭遇故障的时候,有没有灾备体验是天与地的差别,比如,亚马逊北弗吉尼亚的数据中心在8月10日出问题导致长时间服务瘫痪;谷歌比利时的一个数据中心在8月19日遭遇四次雷击,部分存储于磁盘的数据丢失。但是Azure云服务在10月13日宕机后,因为有较好的灾备方案,所以能够做到当上海节点出问题之后,可以将业务在较短时间内迁移到北京节点,减少损失。
这也说明了一个好的灾备方案可以减少企业和用户的损失,并间接地增加用户将数据和业务迁移到云计算平台的信心。
1)可靠性和可用性,这是灾备存在的目的即保证数据不能丢以及在出现故障时要减少对业务连续性的影响。
2)容量和扩展性,能够处理海量数据并且做到按需扩容。
3)性能和隔离性,在引入灾备之后尽量减少其对现有系统性能的影响,并且灾备存储要和原有系统之间做到完全隔离。
4)成本和管理可控性,灾备方案应该做到低成本以及方便管理。
OpenStack作为一种提供平台级服务的方案,从服务、数据可用性和持久性方面来说,他都需要一种数据保护方案。当然数据保护方案可以实现在不同的层次里面,可以实现在应用层,可以实现在框架层也可以实现在存储层。
OpenStack里的Raksha是实现在框架里的方案。在OpenStack里需要备份的部分包括系统盘和数据盘,Raksha借助于Nova、Swift、Glance和Cinder等模块的接口来实现以虚机为中心的数据保护。其实现技术也比较简单粗暴,也就是起一个定时任务定期执行将系统盘和数据盘的数据备份到另外一个独立的后端swift里。
但显然这种方案,也有一些弊端,比如:
仍处于开发验证阶段尚不可使用;其所使用的灾备技术属于传统的基于增量备份的技术,存在一个时间窗,在这个时间窗里有些数据仍然面临丢失的风险,而这就不能满足诸如金融、证券等关键行业对数据持久性和可用性的需求;使用统一体系的方案来做备份也不是一个好的方案。
正因为Raksha的以上问题,所以UnitedStack有云在OpenStack中引入一种更高级别的灾备技术,也被视为下一代的灾备技术CDP,即连续数据保护。
CDP是一套方法,通过捕获或跟踪数据的变化,并将其独立存放在生产数据之外,以确保数据可以恢复到过去的任意时间点,所以说白了CDP可以做到更细粒度的灾备,即IO级别的。它的实现可以基于文件和块。基于文件的CDP系统主要是通过捕捉并纪录文件系统的数据和元数据变化事件,而基于块的实现可以通过客户端代理软件、传输层设备以及存储层中引入Data Splitter。
UOS作为UnitedStack自己的OpenStack版本,要在其中引入CDP服务,要先清楚UOS的产品架构:
整个架构可以看成是一个四层结构,最底层物理集群资源,为整个平台提供计算、存储、网络的资源,往上一层是存储层,它承载了整个平台的数据,有云使用的是Ceph这个统一存储方案、它为上层提供块存储、文件存储以及对象存储。再往上是OpenStack层,它为最上层的用户提供虚拟机、云硬盘、数据库等平台级服务。也就是说这些服务的存储资源都需要CDP的保护。
UOS中引入CDP服务,主要是通过在Qemu的block层中引入一个新的CDP驱动程序,它主要用于将发送到Ceph rbd的IO进行分流并转发到具体的CDP设备火星舱中,下图给出了开启CDP服务后的I/O流程变化。
目前而言,UOS的CDP服务能够实现重要数据的备份、压缩、重删和恢复等功能。