基于Oracle数据库的业务系统的灾备设计

2018-12-28 16:40上海期货交易所上海200122
数码设计 2018年8期
关键词:灾备日志一致性

孙 伟(上海期货交易所 上海 200122)

引言:随着信息化的快速发展,人们对技术系统依赖程度越来越高,对业务连续性要求也越来越高。自然灾害、网络攻击、流行疾病和热点事件等都可能造成系统中断服务,可靠适用的灾备设计非常重要。目前使用Oracle数据库的技术系统占据了相当大的比例,此类应用系统在灾备设计上存在通用的方法。本文主要针对基于Oracle数据库的应用系统灾备的四大核心内容(主备状态复制、主备切换、数据一致性保障、业务处理能力维持)展开论述,为解决这类系统的灾备建设提供指南。

1 灾备技术概述

2005年4月,国务院信息化工作办公室联合相关部门起草的《重要信息系统灾难恢复指南》正式出台,该指南为灾难恢复工作提供了首个可操作的规范性文件[2]。2007年11月《重要信息系统灾难恢复指南》正式升级成为国家标准《信息系统灾难恢复规范》(GB/T 20988-2007),标准中规定了六个灾备等级,分别为:第1级基本支持;第2级备用场地支持;第3级电子传输和部分设备支持;第4级电子传输和完整设备支持;第5级实时数据传输和完整设备支持;第6级零数据丢失和远程集群支持[3]。这里所讲的灾备是指第6级或准6级,要求做到完整的设备支持,实时数据复制,零数据或极少量数据丢失,远程集群支持易于主备切换。

2 系统状态复制

系统状态复制是灾备工作的基础,只有当备机能及时地获取主机的数据,才能在灾备切换发生后取代主机提供服务。传统的系统状态复制主要依赖存储设备去完成。基于Oracle数据库的技术系统,其系统状态都保存在数据库中,这样相对于传统的存储复制就有更高效、更灵活的方案了,即可以通过数据库来复制系统状态。Data Guard是Oracle数据库主要的复制工具之一,该技术可以维护生产数据库一个或多个同步备份,由一个生产数据库和若干个备用数据库组成,并形成一个独立的、易于管理的数据保护方案。其基本原理是当某次事务处理对生产数据库中的数据作出更改时,Oracle数据库将在一个联机重做日志文件中记录此次更改。在Data Guard中可以配置写日志的这个过程,除了把日志记录到本地的联机日志文件和归档日志文件中,还可以通过网络,把日志信息发送到远程的备用数据库服务器上,实现远程数据复制。Data Guard有以下两种工作方式:

2.1传统Oracle Data Guard[4]最常见的Oracle Data Guard使用的是同步物理备用数据库与相应的生产数据库,以实现数据保护和高可用性。在Oracle数据库11g之前,物理备用数据库通常以连续的“重做应用”模式工作(即,不断地应用来自生产数据库的更改),以确保在生产站点中断几秒钟内完成数据库故障切换。必须先停止重做应用才能对Data Guard 10g备用数据库进行读取访问,这最终会导致副本具有陈旧数据,并增加了完成故障切换操作所需的时间。

2.2Oracle Active Data Guard[4]Oracle Active Data Guard 允许物理备用数据库对只读访问开放数据报告、简单或复杂查询、排序、基于Web的访问等,同时还可以应用来自生产数据库的更改。对物理副本的所有查询读取都是实时执行,并且可以返回最新结果。这意味着,需要进行最新只读访问的所有操作都可以卸载到副本,从而可以增强和保护生产数据库的性能。Active Data Guard还支持RMAN块更改跟踪,从而能够将快速增量备份从生产数据库卸载到备用数据库。与使用以前版本在物理备用数据库上进行备份相比,快速增量备份可以将速度提高几个数量级。Active Data Guard是Data Guard技术的发展,它提供了独特的性能优势,同时又能利用Oracle Data Guard 11g中包含的所有其他增强功能,能够迅速地将备用数据库与主数据库重新同步。Oracle Active Data Guard更适合灾备使用。

3 灾备切换技术

灾备复制主要是系统状态的复制,业务系统的状态保存在数据库中,业务系统的灾备复制就是数据库的复制,利用Oracle Active Data Guard来复制主数据库至同城或异地的备用数据库中。

主备数据库同时热运行,业务系统根据系统性质分别连接当前相应的主数据库,因此业务系统连接数据库时需要知道哪个是相应的主数据库。为了解决这个问题,借鉴web访问的DNS机制,采用业务名字服务BNS(Business Name Server)来告诉业务系统应该连接哪个数据库。除了提供主数据库信息,BNS还需要提供数据库的访问连接串和访问密码。业务系统在启动时从BNS获取数据库访问信息,准确地连接指定的主数据库。

在上海期货交易所的灾备项目实施过程中,我们自主研发了BNS。BNS包括服务器端和客户端两个部分,服务端以后台方式运行。BNS服务端侦听指定的名字查询端口,客户端可以通过TCP连接,提供名字查询服务。

为防止单点故障应该部署两台以上的BNS,组成统一的BNS集群,BNS集群中每个BNS都指向主数据库。当数据中心发生灾备切换时,切换的主中心数据库停止服务,备中心切换成主中心,这时BNS集群指向新的主数据库。业务系统在检测到原数据库连接异常时即能自动连接新的主数据库,完成灾备切换。

4 数据一致性保障

数据库的复制是通过Oracle Active Data Guard完成的,理论上讲,Oracle Active Data Guard的复制是基于事务的,单个数据库不应出现数据不一致的情况。但如果应用系统基于多个数据库实例,分别通过Oracle Active Data Guard进行复制,在分布式事务的前提下,Oracle Active Data Guard目标数据库存在数据不一致的可能。

对于分布式事务,在源端有机制可以保证不同数据库事务的一致性。但是分别通过Oracle Active Data Guard完全独立复制到目标数据库,在这个同步过程中目标数据库间无法进行协调,又由于采用了Data Guard的最佳性能模式,容忍一部分数据的丢失,于是目标数据库可能会存在不同步的问题,这在发生分布式事务的状况下无法完全避免。针对系统中可能对业务数据有影响的分布式事务,需要根据数据模型的具体情况提供具体的数据一致性检查和校对工具。可通过工具生成数据库的摘要信息,比较源端和目的端数据库的摘要信息,以此定期检查校准两个数据中心数据库的一致性。

5 灾备能力验证

验证灾备能力有以下三个通行的指标:

RTO(Recovery Time Objectives),恢复时间目标,RTO表示了从灾难发生直到业务流程再次运行(被恢复)的时间。一般来说,RTO越小(恢复时间越短),容灾的成本越高,灾难造成的业务损失就越小;反之,RTO越大(恢复时间越长),容灾的成本越低,灾难造成的业务损失也越大。

RPO(Recovery Point Objectives),恢复点目标,是灾难发生后业务能够容忍的数据丢失量,或者说灾难发生造成的数据丢失量。它开始于最后的数据备份时间,终止于灾难发生并使生产数据无法访问的时间。一般来说,RPO越小(丢失的数据量越少),容灾的成本越高,灾难造成的业务损失就越小;反之,RPO越大(丢失的数据量越多),容灾的成本越低,灾难造成的业务损失也越大。

DOO(Degraded Operations Objectives),是指运行性能降低预期目标,备份系统与主系统相比的运行能力。

基于Oracle灾备设计的主备数据库是热运行的,切换由BNS完成,BNS通过健康监测机制来发现主数据库故障,随即更换主数据库的连接入口,完成整个过程时间可控制在几十秒内,RTO指标会非常好;而RPO则主要取决于Data Guard的复制能力,也受主备数据库的距离和网络状况影响,由于性能卓越,如果主备数据库间网络畅通,则RPO可以做到几秒以内,在通用型业务系统中已经是优异水平了。本设计中,DOO主要取决于备用环境是否能配置到主用环境水准,如果采用与主用相同的备用环境,则可保证DOO达到100%。

本设计曾应用于上海期货交易所NGES(新一代交易所系统)后台业务系统的灾备方案中,实测RTO小于30秒,RPO小于5秒。具体测试验证方法如下[1]:

主用数据库和备用数据库分别部署在同城的两个数据中心,两地之间的直线距离20公里左右,Data Guard采用Maximum Performance方式,日志同步采取lgwr noaffirm方式。第一步是验证RPO是否小于5秒,在主用数据库重构某天的交易流水(共974231条300字节大小的记录,大约每秒生成1200条记录),通过数据复制后,发现备用数据库数据延后不超过2000条,RPO在2秒以内,随后逐次增加吞吐量直到现有实际场景的4倍,观测到的RPO仍在3秒以内,而对于灾难备份来说,可能损失的数据是只在“DATA GUARD把日志从源数据库传送到目标数据库的时间间隔”内,因为日志一旦被传到了目标数据库那数据就安全了,而与是否被立刻应用无关,所以实际RPO应小于观测值。第二步是测量RTO,分在线业务处理和后台批量业务两种类型,分别构建不同数据量和不同故障点的12种场景,在业务运转过程中中断主数据库服务或部署在数据库之上的应用服务,观测到业务都能顺利切换到备用数据库,实际切换时间在7至23秒之间,未发生数据丢失,并且通过数据一致性检测。第三步是检验数据复制过程中一致性保障机制,数据一致性问题很难在日常场景中发生,为此只能人工构建特定场景破环数据一致性,如复制过程中断网造成部分数据丢失,分布式事务处理时,中途中断数据复制等,此类场景中检测工具都能捕获到异常情况,且能修复不一致数据。三类测试结果数据都与预期目标一致。

6 总结

目前在生产中广泛运行的基于Oracle的业务系统,都可以使用以下方法来实现灾备:采用数据库自带的Oracle Active Data Guard工具来完成系统状态实时复制;主备数据库同时热运行,设立业务名字服务BNS来自动化管理切换,降低切换时间,透明化切换步骤;最后通过数据检验工具来检测和校准分布式事务的一致性。这些方法成本低、可靠性高、体验好,并且同城及异地灾备都能得到完美的支持,在上海期货交易所两地三中心后台业务系统的灾备建设中得到实证。

猜你喜欢
灾备日志一致性
商用车CCC认证一致性控制计划应用
一名老党员的工作日志
注重教、学、评一致性 提高一轮复习效率
对历史课堂教、学、评一体化(一致性)的几点探讨
扶贫日志
雅皮的心情日志
雅皮的心情日志
深蓝云海“云灾备”正式上线
基于事件触发的多智能体输入饱和一致性控制
共享灾备走向智能化