国家信息中心 何国庆 王润宇 宿云凯
随着信息技术的发展,信息技术不仅改变了我们的工作方式,更是我们提高工作效率的原动力。数据库是信息技术的核心技术之一,其直接存储和管理信息数据主体,并提供数据查询等服务。数据库的稳定高效运行是业务是否稳定的前提。然而,各种突发事件诸如网络威胁、硬件故障、火灾等,都使数据库稳定运行面临着巨大挑战。
为了在突发事件发生时,数据库仍然能够高效稳定运行,或使突发事件产生的影响降低到最小。从操作系统到数据库应用都产生了很多高可用技术。
本文首先分析操作系统层面的高可用技术,及其对于数据库的局限性。然后重点讨论目前常见的oracle数据库和高可用性有关的两项技术:Real Application Cluster和Data Guard。
时至今日,服务器不仅运算速度有了飞速提升,各种硬件的冗余技术,硬盘的RAID技术及日益稳定的操作系统都使其稳定性有了质的飞跃,但是硬件故障、操作系统的漏洞和bug依旧不能完全避免。为了满足特殊服务器的高可用需求,常见的操作系统均推出了自己的集群技术,如AIX的High Availability Cluster Multi-Processing(简称HACMP或HA)。Windows的windows Failover Cluster(简称WSFC)等。集群的工作模式可分为主从、互备、多点集群三大类。基本思路是由多个节点共同对外提供服务。当一个节点故障时,其他节点接替该节点的工作。
操作系统的集群技术对于其它的应用多数可靠有效,但是对数据库来说虽然也可以实现,但是却存在着资源利用率低,不能无缝切换的缺点。原因很简单,数据库中不断变换的数据只能有一份,各个节点对外的结果必须一致,这就要求节点之间要实现快速数据同步。而操作系统仅仅是应用的平台,无法深入到应用中完成数据同步工作。常见的操作系统层面的数据库集群是双机主备模式。数据存放在独立的存储中,正常情况下存储挂在主服务器上,当主服务器故障后,首先主服务器停止服务,然后存储资源切换到备用服务器,最后备用服务器开始工作。这样的工作模式,始终有一台服务器处于闲置状态,并且在故障发生时,必然有个切换过程,这期间数据库服务是中断的。
Oracle Real Application Cluster通常称作RAC。是从oracle9i开始推出的应用层面的集群数据库。
通常由多个节点服务器(至少2个节点)和一台存储设备组成,如图1所示。
每个节点有两个网卡和一个连接存储的光纤卡。其中一块网卡连接在由这几台服务器组成的私有网络,用于各个节点之间通讯和数据交换。另一个网卡连在公共网络对外提供服务。存储和所有节点通过光纤相连,数据库的数据文件就存放在存储中。
高可用性:RAC中的每个节点均为数据库的一个实例,这些节点同时对外服务,避免单节点故障造成数据库服务中断。
可扩展性:RAC集群中的节点可以根据业务的繁忙程度,动态的增加或减少。资源利用率高:RAC集群中的所有节点均在线服务,没有闲置节点。另外,根据不同业务高峰期的差别。动态调整不用业务的服务资源范围,如在一个4节点的集群中,白天可以分配3个节点为销售业务提供服务,1个节点为统计分析提供服务。夜里分配三个节点为统计分析提供服务,1个节点为销售业务提供服务。
节约成本:可以用多台廉价的PC代替昂贵的小型机或大型机。同时节约相应的维护成本。
图1
图2
对系统规划要求高,如果系统规划设计不合理,可能使集群的性能还不如一个节点的性能高。如频繁出现多个节点对同一个数据块写操作时,出现各个节点之间相互等待,并且使节点之间出现大量的内存拷贝,从而在集群的私有网络上引发所谓的网络风暴。
虽然多节点同时提供服务避免了单节点故障引起的服务中断,但并非节点故障对业务没有影响,对于非连接池的应用来说,新的连接均可以连接到正常的节点。但对于采用连接池的应用来说,已经连接在故障节点的连接并不会立刻刷新,应用在使用故障连接时会报数据库连接异常的错误,直到所有到故障节点的连接被刷新。
由于集群需要访问共同的存储设备,集群中各个节点的物理距离不会太远,这样虽然集群可以避免由于软硬件故障引起的服务中断,但对于火灾、地震等重大灾难事故,RAC集群数据库无能为力。
Datagurad是从oracle7i时就推出的一种数据库高可用技术。通常由多台(至少两台)位于不同城市的数据库服务器组成。其中一台为主数据库角色,其它数据库称为standby数据库,如图2所示。
基本原理是将主数据产生的联机日志随时传送给各个standby数据库,standby数据库再重做这些日志。当主数据库发生重大故障或当地发生火灾、地震等灾难事件时,任意一个standby数据可以快速转换为主数据库角色。
Dataguard技术最大价值就在于灾备。最多9个standby数据库,分布在不同的城市。可以最大限度降低火灾、地震等重大灾难事件的影响。其次standby数据库可以以只读模式打开,提供数据查询服务,standby数据库也可用于数据库备份,这两项能力均可减轻主数据库的压力。
Dataguard的不足是基础设施(机房、人员、软硬件成本)投入较大。另外和操作系统集群类似,资源利用率低,故障切换时服务会中断[3]。
以上三种技术均可用于部署高可用oracle数据库,各有利弊。操作系统集群由于自身的不足,目前逐渐退出主流,但由于其投资少,一些要求不高的小型用户还在使用。RAC由于其资源利用率高,调配灵活,在oracle高可用数据库市场上占据主流。而Dataguard从出现到现在乃至可见未来,由于其不可替代的灾备功能,不会退出市场,但是由于其基础设施投入大,其主要用户是跨地域的大型用户,
这三种高可用技术并不完全是竞争关系,而是可以配合使用更好以取长补短。实际上许多大型用户由于业务量大,且需要7*24小时服务,他们更多的情况是主数据库和standby数据库均为集群数据库。
[1]张晓明著.大话oracle RAC[M].人民邮电出版社,2009.
[2]http://doc.mbalib.com/view/7f15d6af436571f0628d3 7212aebbbdc.html(2012年7月).
[3]http://blog.csdn.net/zengmuansha/article/details/3725939(2012年7月).