企业容灾架构中,所谓的数据复制技术主要是指能够将结构化数据进行复制,从而保证数据具备双副本或者多副本分散在不同数据中心的技术。这里面需要强调两点:
① 结构化数据:以结构化数据为主的数据复制技术。
② 分散在不同数据中心:数据副本必须分布在不同的数据中心。
就具体的实现技术而言,就目前业界发展来看,可以实现数据复制的技术多种多样,有基于数据库层面的数据复制技术,例如Oracle公司的Active Data Gurad、IBM公司的 Db2 HADR等;有基于系统层面的数据复制技术,例如赛门铁克的vxvm、传统的逻辑卷管理(LVM)、Oracle公司的自动存储管理(ASM)冗余技术、IBM公司的GPFS等;有基于存储虚拟化实现的数据复制技术,例如EMC公司Vplex Stretch Cluster、IBM公司SVC Split Cluster、NetAPP公司Metro Cluster等;也有基于存储底层实现的数据复制技术,例如IBM公司的DS8000 PPRC技术、EMC公司的SRDF技术、HP公司的CA技术等等。每一种技术都有其实现的前提条件,也有各自的技术特点和实现的不同效果。
从RPO维度来划分,大的方面可以分为同步复制和异步复制。
① 同步复制:要求每一个写入操作在执行下一个操作处理之前,在源端和目标端都能完成。特点是数据丢失少,会影响生产系统性能,除非目标系统物理上离生产系统比较近。
② 异步复制:在处理下一个操作前, 只需要完成源端数据写入即可, 不等待数据复制到目标系统中。特点是复制的数据与源数据有时间差,但这种复制对生产系统性能影响较小。
那么这里有一个问题“如何界定一个写入操作完成?”,一般来讲,存储端的写入以存储设备的缓存写入为标准,数据库的写入以数据库的事务日志落盘为标准。
如果用图的方式来区别同步和异步之前的区别就在于:同步需要等待黑色和红色的ACK返回才会执行下一个IO,而异步只需要等待黑色的ACK返回即可执行下一个IO。从结果上来看,等待红色的ACK返回显然需要花费更多时间,因为A和B分别位于不同的数据中心;但是等待会带来RPO=0的回报。
根据上图,数据复制最终完成的结果是在两个磁盘介质上完成同一个IO数据,但是将来自客户端的单个IO请求镜像为两个IO的源头可以有三种不同的选择:操作系统层面、数据库层面以及存储层面。
1)操作系统层面的复制技术:以LVM、VXVM等逻辑卷镜像为基础,IO写入的时候可以在组成同一个逻辑卷的物理镜像上同时写入数据,底层数据写入是需要通过SAN协议完成的。
2)数据库层面的复制技术:一种是类似操作系统逻辑卷的模式,比如ORACLE的ASM,它也是一种逻辑卷管理模式,同样也可以通过多个物理镜像来组成一个逻辑卷,从而通过镜像复制的方式完成数据副本的同时写入。本质上它与操作系统层面的逻辑卷镜像技术没有区别,只是它离数据库更近,数据库更懂它。另外一种是通过数据库事务日志复制的方式将数据修改行为在另外一个备库上重新演绎一遍,最终可以达到使数据结果一致的目的。
3)存储层面的复制技术:一种是通过存储网关将两个物理存储卷组成一个逻辑存储卷,通过镜像复制的方式完成数据在存储落盘时的双写。本质上它与操作系统层面的逻辑卷镜像技术也没有区别,只是它选择在存储层面实现。另外一种是通过存储介质之间以块拷贝的方式来实现数据副本的冗余。
究其原理,其实无论从哪个层面来实现,这些技术从原理上可以划分为三种类型:
对于操作系统层面的逻辑卷管理器LVM模式来讲,是将底层来自不同数据中心的的两个物理存储卷作为物理镜像( PV) 组合成一个可用的逻辑存储卷( LV) 提供给上层应用来存放数据,本地物理卷和远程物理卷分别是由存储经过本地SAN环境以及跨数据中心SAN环境提供给服务器操作系统层。
建立逻辑卷的时候就已经定义好LV和PV的映射关系,并且逻辑页(LP ) 和物理页(PP ) 的映射关系也已经完全定义好了。这种复制只能采用同步复制机制,复制对象为逻辑卷层的变化Block,其过程为:捕获逻辑页( LP) 当中的变化块,同步写两个物理页( PP) ,等于在一个主机上将同一数据写入两个不同的磁盘,本地写完得到ACK确认,并且远端写完也得到ACK确认,才能算是一个完整的写入。假设远端存储卷写入超时就会被标为故障或者是离线状态,当远端存储写入恢复之后,对于LVM来讲需要重新进行手动同步实现镜像副本完全一致。
对于ASM模式来讲,其实原理与LVM基本相同,创建DiskGroup的时候,将冗余策略选择为Normal,也就是所有业务数据保证两份镜像。这样的话,我们可以将相等数量的磁盘分别归入不同的故障组( Failure Group) 。ASM对Oracle数据文件( Data File) 进行修改的时候,以AU为单元进行实时双向写入,本地写完得到ACK确认,并且远端写完也得到ACK确认,才能算是一个完整的写入。
相比LVM的优势在于两点:ASM会有一个短时间内的写事务日志记录,它会帮助恢复离线镜像恢复数据,但是如果超过这个时间,同样需要一个全新的同步来保证数据的一致性。另外一点,AU并非建立数据文件的时候就已经映射好了,ASM是在数据写入时才会分配具体的AU,完全可以做到通过指针转移的方式避免坏块儿导致的数据写入失败问题。
对于GPFS模式来讲,它是通过将底层来自不同站点的两个物理存储卷归属到不同的Failure Group当中,然后由这些物理存储卷经过文件系统格式化形成分布式文件系统,提供给上层应用以文件的形式写入数据。文件本身会被GPFS文件系统打散形成若干文件碎片,这些碎片在落盘时分别落入不同Failure Group当中的物理磁盘,从而保证底层数据的双副本。这种模式与前两种模式的最大区别在于它的数据落盘是根据NSD磁盘定义的服务实例顺序来决定的,正常情况下我们需要定义本站点的服务节点为磁盘的主服务节点,这样的话两个镜像写入的时候是靠GPFS位于不同中心的两个服务实例节点分别写入,两个服务实例之间也需要私有协议的交互,相当于数据的双写多了一个环节。
对于事务日志的复制技术,可以分为绝对同步模式、近似同步模式和异步模式三种。
对于Oracle DB来讲,客户端的数据更新请求首先要由日志写入进程( LGWR) 从重做缓存刷到重做日志文件当中,然后由数据写进程再周期性地写入数据文件当中。重做日志当中以SCN为数据库独有的时间戳序列来记录所有数据库更新的先后顺序,从而保障数据库恢复能够按照正确的顺序执行保障数据一致性和完整性。也就是说在数据库的认知当中,只要事务日志写入重做日志文件,这个IO就算完成。
如图,对于配置了Data Guard绝对同步模式的数据库,在以上所述过程中,写入进程( LGWR) 在本地日志文件并不能结束,日志传输进程( LNS) 会将缓存里面的重做日志通过TCP /IP 网络传输给灾备站点的备库实例的日志接受进程(RFS ) ,备库实例的日志接收进程( RFS) 根据接受到的重做日志在备库上重新执行数据库的更新操作,然后将ACK回传给日志传输进程( LNS) ,日志传输进程( LNS) 再通知写入进程( LGWR) ,才算是一个完整的IO完成。这样做可以保证主库和备库的事务性更新行为实时一致,最终保证数据的一致。当然也有一个前提条件,那就是在Data Guard开始同步复制之前,必须保证备库的数据保持与主库的某一固定时间点的完整副本,这需要靠传统数据备份技术来实现备库的初始数据复制。因为事务复制的本质是行为复制,那么行为作用的初始数据副本必须保持一致,才能保证最终两副本的一致性。
如图,对于配置了Data Guard异步模式的数据库,日志传输进程( LNS) 会将缓存里面的重做日志以及被LGWR归档的重做日志文件通过TCP /IP 网络异步传输给灾备站点的备库实例的日志接受进程(RFS ) ,备库实例的日志接收进程( RFS) 根据接受到的重做日志在备库上重新执行数据库的更新操作,但是并不会实时给日志传输进程( LNS) 进行ACK反馈,PrimaryDB只要完成本库的事务更新就认为IO结束。但是备库日志接受进程(RFS ) 会定期将进度信息反馈给主库进程。
当主备库传输管理剥离之后,主库会主动通过以下两种方式探测并尝试重新和备库建立联系,第一是归档日志进程会周期性ping备库,成功情况下,它会根据获得的备库控制文件的记录的最后归档点和自己的归档日志决定向备库推送哪些归档日志。第二是日志发送进程会在重做日志准备发生归档的时刻点主动去ping备库日志接受进程并把剩余的重做条目发送给备库接受进程。
近似同步模式是指在传输正常情况下保持与绝对同步模式一样的模式,在网络传输超时的情况下,就会剥离备库重做日志的过程,只要保证主库重做日志落盘就可以了。
所谓存储网关双写复制技术,就是在物理存储层之上增加一层网关技术,用以形成存储资源透明抽象层,即存储虚拟化是服务器与存储间的一个抽象层用以实现存储底层的虚拟化以及高可用镜像,它是物理存储的逻辑表示方法。其主要目的就是要把物理存储介质抽象为逻辑存储空间,将分散的物理存储管理整合为集中存储管理并且由存储网关来控制镜像写入的策略和模式。IBM、EMC、NETAPP 、 HUAWEI、英方等公司都有相应容灾技术方案及相应产品 。基于写入原理及策略的不同, 各自方案又各有一些区别。但是抛开细节究原理,归类总结之后有两种模式 。
模式 1,如 图中所示,是以 EMC Vplex为代表的分布式存储卷技术。在存储网关VPLEX上重新定义虚拟存储卷,该虚拟卷由分布在两个数据中心的物理存储卷以1:1方式映射组成,并且以共享模式提供给VPLEX的两个引擎,引擎之间类似Oracle RAC的原理来共享全局缓存、心跳信息以及分布式锁的信息。两个引擎同时可以写IO,对于Block级别的并发写操作,是通过分布式锁及全局缓存机制来完成。所以这种双写是可以做到IO级别。
模式 2,如图中所示,是以 IBM SVC为代表的虚拟存储卷技术。在存储网关SVC上重新定义虚拟存储卷,该虚拟卷由分布在两个数据中心的物理存储卷以1:1方式映射组成,并且归属同一个IO Group,并且以共享模式提供给SVC的两个节点,虽然两个节点都可以写操作,但是对于某一个IO Group来讲,只能通过一侧节点进行物理层面的双写操作,这样就避免了两个节点的在Block级别的并发控制。所以这种双写只能做到应用级别,做不到IO级别。
当然还有一些类似的架构,在某些细节上更先进,比如NetApp的容灾方案MCC架构,它在此基础之上可以将负责存储写操作的实例节点做到VM级别,VM负责以卷为粒度的双写,同时VM可以在存储网关的物理引擎或节点之间进行漂移和重组,这样的话以应用为粒度的写操作的容灾切换更加平滑。
对于存储存储底层的块儿复制技术来讲, 它的数据复制是完全脱离了上层的应用层、系统层、数据库层。主要是依靠存储层两个物理存储设备 来完成源到目标 设备 的 Block 复制。
如图所示,从组成上来看,只有两个同型物理存储设备,数据复制跟上层没有任何关系,只需要存储层从一边的物理卷捕获 Block变化,复制到另外一边的物理存储卷,整个复制行为通过源端的日志文件来记录进度以及保障故障恢复。根据整个复制过程是否需要等待复制完成的ACK返回可以分为同步复制和异步复制。复制过程依赖的传输环境可以是远距离的以太网也可以是近距离的SAN网络。
但是这种数据复制技术和上层的联系几乎是割裂的,基本很难与上层的容灾切换配合。