数据库集群技术分析和比较一、引言数据库是用来保存计算的最终结果的,所以是整个信息系统的最重要组成部分。在许多人看来,当前的数据库技术已经可以说是非常地成熟了。然而,在满足不断增长的联机事务处理应用方面,当前的数据库技术其实还存在不少急迫需要解决的技术问题。对于所有的数据库而言,除了记录正确的处理结果之外,它们都面临着四方面的挑战:如何提高处理速度,数据可用性、数据安全性和数据集可扩性,也就是说,如何使当前的数据库具有这四方面的可伸缩性,使客户能同时得到更高的处理速度、更高的数据可用性、更高的数据安全性和更大的数据集,而不是提升了其中的部分指标,却损坏了其余的指标或者其余的指标没有改进。随着IT应用的深入和有线,无线网络的快速增长,联机事务处理业务对以上四方面提出了更高的要求。将多个数据库联在一起组成数据库集群来达到上述目标应该说是一个很自然的想法。理想的数据库集群应该可以做到以下几点:◆在需要更高数据库处理速度的时候,我们只需简单增加数据库服务器就可以了。这样可以大大减小硬件投资的风险,而且大大提高现有服务的质量。◆在任何时刻需要有多个随时可用的实时同步数据服务。为了防灾,最好有多个异地的同步数据服务。这不光会大大增加数据可用性,还会有意想不到的更高数据库处理速度的效益。◆除了密码保护之外,我们最好能控制企业内部对数据库的非法访问。◆数据集的可扩性可能是最简单的要求了。但是,用增加数据库服务器的办法来扩大数据集对数据可用性会产生负面影响。如果没有数据冗余,那么每增加一台服务器,整个系统的可用性就会成倍地降低。最好的结果是我们能任意增大数据集而没有对可用性的负面影响。上述最后一条揭示了我们将面临的技术困难--除了异常简单的应用之外,有关数据库集群的技术都是非常困难和复杂的。更具挑战性的是,实际的应用要求上述几方面的指标能同时提升,而不是某一指标提升了,另外的指标却下降了。然而,所有的技术都是有副作用的,这就是当前数据库集群技术面临的重大困难。客观地比较各种数据库技术是很困难的,比较各种数据库集群技术可见会更困难。本文试图对当前主要的数据库集群用到的具体技术进行分析,目的是评价每种技术的优缺点,并且按它们各自的设计目的和使用效益评分,最后得出每种数据库集群的一个综合评价值。从而建立一个客观评价数据库集群技术的评价体系。我们希望能用这个评价标准来评价现有的和今后将出现的数据库集群技术,并且理清一些很容易混淆的概念。为了使得这个研究更具实用价值,我们还包括了两项和具体技术没有直接关系的评价:集群管理难易度和应用的透明度。评分标准:每一项技术都用从0(不支持)分到1(支持最好)分给出评分,减分是按四分法来做,所有的效益都大致分为四个梯度,按大约的比例减分。二、数据库集群技术的分类数据库集群用到的技术很自然地围绕着上述四方面的挑战而展开的。所以我们也围绕着这四个挑战来展开讨论,每个大指标又将分成几个子指标,每个子指标则对应一种为实现大指标而采用的特定技术。评价标准将给当前六大类数据库集群技术打分。欢迎读者来信对我们的评分标准提出质疑。在开始讨论之前,值得指出的是,我们讨论的六大类数据库集群技术分属两类体系结构:基于数据库引擎的集群技术和基于数据库网关(中间件)的集群技术。图1.共享磁盘或非共享磁盘的基于数据库引擎的集群技术图2.基于数据库网关(中间件)的集群技术(不共享磁盘)基于数据库引擎的集群技术要求数据库引擎本身具有集群功能(一般只有企业版的数据库才具有这种功能),而基于数据库网关(中间件)的集群技术则对数据库没有集群能力的要求。所以标准版或企业版都可以用。在本文中,我们将评估下列数据库集群技术:Oracle’sRealApplicationCluster(我们将称之为RAC).MicrosoftSQLClusterServer(我们将称之为MSCS)..IBM’sDB2UDBHighAvailabilityCluster(我们将称之为UDB)SybaseASEHighAvailabilityCluster(我们将称之为ASE)MySQLHighAvailabilityCluster(我们将称之为MySQLCS).ParallelComputersTechnologyInc.’sICX-UDSmiddleware我们将称之为ICX).除了ICX,所有其它的集群技术都是基于数据库引擎的。所以ICX可以支持任何当前流行的数据库。至于其他相关技术,如RAID(廉价冗余磁盘阵列)、磁盘镜像硬件(EMC的TimeFinder系列)、文件复制工具(如DoubleTake,VeritasandLegato),我们也将做简单评价和打分。我们会用DM来代表磁盘镜像(DataMirror),FM代表文件镜像(FileMirror).本文只限于讨论上述六类数据库集群系统和上述相关技术。如果有什么重要技术遗漏的话,欢迎读者和作者联系讨论。三、数据库集群技术1)提高数据库处理速度的技术目前有四种提高数据库处理速度的办法:◆提高磁盘速度:这包括RAID和其他磁盘文件分段的处理。主要的思想是提高磁盘的并发度(多个物理磁盘存放同一个文件)。尽管实现方法各不相同,但是它们最后的目的都是提供一个逻辑数据库的存储映象。我们要评价的六个系统都能有效地利用这些技术。由于ICX已经有最大的磁盘冗余度,RAID磁盘系统的设置应该侧重于速度,而不是数据冗余。这样磁盘利用的效益就会提高。◆分散数据的存放:主要思想是利用多个物理服务器来存放数据集的不同部分(一个数据库表格分散到多个服务器或者每个服务器分管几个内容不同的表格)。这些办法不但可以扩展数据集(数据集的可扩性),而且使得不同的服务器进行并行计算成为可能。例如,对于ORACLE的RAC来讲,由于它是共享磁盘的体系结构,你只需要简单地增加一个服务器节点,RAC就能自动地将这节点加入到它的集群服务中去。RAC会自动地将数据分配到这节点上,并且会将接下来的数据库访问自动分布到合适的物理服务器上,而不用修改应用程序。对于UDB来讲,因为它是非共享磁盘的体系结构,因此就必须手工修改数据的分区,MSCS和ASE也是同样的情况。MySQL也需要手工分区,并且是这几种数据库中支持分区的自动化程度最低的,也就是说,应用程序需要自己负责数据库的分布式访问。不管数据存放是如何实现的,分布式存放数据的缺点是对数据库的可用性有负面影响。任何一台服务器的损坏都会影响整个系统的可用性。但是,这是迄今为止各大数据库厂商能提供的业界最好的数据库集群技术了。ICX是一种基于中间件的数据库集群技术,它对客户端和数据库服务器都是透明的。因此,ICX可以用来集群几个数据库集群(一个逻辑数据库),也可以用于集群几个物理数据库服务器(来增强一个分管关键数据的物理服务器)。◆对称多处理器系统:此技术的思想是利用多处理机硬件技术来提高数据库的处理速度。但是,除了ICX,所有其它的数据库集群技术只支持单一的可修改的逻辑数据库。绝大部分的数据库事务处理是磁盘密集型的,纯计算负荷很小的,对称多处器技术在数据库上的应用的实际收益是很有限的。这也说明了为什么实际应用中最多只用了四个CPU的原因。所有的基于数据库引擎的集群都支持这个技术,ICX对SMP技术是中性的,因为它能把多个数据库服务器集合在一起构成一个集群,也能将多个现存的数据库集群集合在一起,构成集群的集群。◆交易处理负载均衡:此技术的思想是在保持数据集内容同步的前提下,将只读操作分布到多个独立的服务器上运行。因为绝大多数的数据库操作是浏览和查询,,如果我们能拥有多个内容同步的数据库服务器,交易负载均衡就具有最大的潜力(可以远远大于上面叙述的最多达四个处理器的对称多处理器系统)来提高数据库的处理速度,同时会具有非常高的数据可用性(真正达到5个9,即99.999%)。所有基于数据库引擎的集群系统都只支持一个逻辑数据库映象和一个逻辑或物理的备份。这个备份的主要目的是预防数据灾难。因此,备份里的数据只能通过复制机制来更新,应用程序是不能直接更新它的。利用备份数据进行交易负载均衡只适用于一些非常有限的应用,例如报表统计、数据挖掘以及其它非关键业务的应用。只有ICX能够做到同步复制多个数据库服务器从而达到在保持数据一直性前提下的真正的负载平衡。上述所有技术在实际部署系统的时候可以混合使用以达到最佳效果。2)提高数据库可用性的技术根据物理法则,提高冗余度是提高数据库可用性的唯一途径。提高数据库冗余度大致有四种方法:◆硬件级的冗余:主要思想是让多处理机同时执行同样的任务用以屏蔽瞬时和永久的硬件错误。有两种具体的实现方法:构造特殊的冗余处理机和使用多个独立的数据库服务器。冗余处理机的造价昂贵,效益很低。实际应用日渐减少。基于数据库的集群系统都是用多个独立的数据库服务器来实现一个逻辑数据库,在任意瞬间,每台处理器运行的都是不同的任务。这种系统可以屏蔽单个或多个服务器的损坏,但是因为没有处理的冗余度,每次恢复的时间比较长,它们需要把被损坏的服务进程在不同的服务器上从新建立起来。ICX让多个独立的数据库服务器作同样的处理。发现处理器问题时的切换不需要重建进程的状态,所以故障屏蔽是极快的。◆通讯链路级的冗余:冗余的通讯链路可以屏蔽瞬时和永久的通讯链路级的错误。基于数据库引擎的集群系统有两种结构:共享磁盘和独立磁盘。RAC,MSCS和MySQLCS可以认为是共享磁盘的集群系统。UDB和ASE是独立磁盘的集群系统。共享磁盘集群系统对网络系统的要求很高,所以通讯的冗余度最小。独立磁盘集群系统可以把磁盘系统独立管理,通讯冗余度较高。ICX的通讯链路级的冗余度最高,因为它使用的是多个独立的数据库服务器和独立的磁盘系统。ICX也可以用于共享磁盘系统。但是冗余度会相应降低。◆软件级的冗余:由于现代操作系统和数据库引擎的高度并发性,由竞争条件、死锁、以及时间相关引发的错误占据了非正常停机服务的绝大多数原因。采用多个冗余的运行数据库进程能屏蔽瞬时和永久的软件错误。基于数据库引擎的集群系统都用多个处理器来实现一个逻辑数据库,它们只能提供部分软件冗余,因为每一瞬间每个处理器执行的都是不同的任务。只有ICX可以提供最大程度的软件级冗余。◆数据冗余:有两类冗余数据集。被动更新数据集:所有目前的数据复制技术(同步或异步),例如磁盘镜像(EMC的TimeFinder系列)、数据库文件复制(如DoubleTake,VeritasandLegato)以及数据库厂商自带的数据库备份工具都只能产生被动复制数据集。通常,为了实现复制功能,需要消耗掉主服务器5%(异步)到30%(同步)的处理能力。被动更新的数据一般只用于灾难恢复.被动更新数据集还有两个致命的问题:一旦主处理机故障造成数据损坏,被动更新的数据集也会被破坏。另外,和主动更新系统相比,被动更新系统对数据网络的带宽要求更高。这是因为它缺少交易的信息,很多数据复制是盲目的。主动更新数据集:这种数据集需要一台(或多台)独立的备份数据库服务器来管理,由于这种数据集及时可用,它可以有多种用途,例如报表生成,数据挖掘,灾难恢复甚至低质量负载均衡。同样地,这里也有同步和异步两种技术。◆异步主动复制数据集:这种技术是先把事务处理交给主服务器来完成,然后这些事务处理再被串行地交给备份服务器以执行同样的操作来保证数据的一致性。这种技术生成的数据集和主数据集有一个时间差,所以仅适用于灾难恢复、数据挖掘、报表统计以及有限的在线应用。所有的商用数据库都支持异步主动复制技术。这种办法的难度在于复制队列的管理上,这个队列是用来屏蔽主服务器和备份服务器之间的速度差异的。因为主服务器可以尽可能地利用所有软硬件的并发性来处理并发的事务,而备份服务器只能串行地复制,在高负荷事务处理的情况下,复制队列经常可能溢出。因为没有任何办法来控制事务处理请求的速度,在高负荷事务处理的情况下,复制队列只能经常性地重建。因为所有现代数据库系统都支持热备份和LOGSHIPPING。通过精心策划,应该可以实现不关闭主服务器而重建队列。ICX也支持异步主动复制.ICX的复制队