Oracle的三大高可用集群解决方案1RAC(RealApplicationClusters)多台Oracle服务器组成一个共享Cache,这些Oracle服务器共享一个基于网络的存储。系统可以容忍单机和/或多机故障。但是系统内的多个节点需要高速网络互连,基本上所有东西都需要放在机房,或者数据中心。如果机房出现故障,比如网络故障,就会坏掉。因此,仅使用RAC仍然不能满足一般互联网公司的重要业务需求。重要的业务需要多个机房来容忍单个机房发生事故。2数据卫士。(主要功能是冗余)DataGuard方案适用于多机房。一个机房有生产数据库,其他机房部署备用数据库。Standby数据库分为物理的和逻辑的。物理备库主要用于生产故障后的切换。逻辑备库平时可以分担生产库的读负载。3MAAMAA(MaximumAvailabilityArchitecture)不是独立的第三种,而是前两种的组合,提供最高可用性。每个机房部署一个RAC集群,多个机房同步DataGuard。RAC概述共享存储文件系统(NFS),甚至集群文件系统(如:OCFS2)主要用于存储区域网络(所有节点直接访问共享文件系统上的存储),使节点故障不影响其他节点。访问文件系统,通常,共享磁盘文件系统用于高可用性集群。OracleRAC的核心是共享磁盘子系统。集群中的所有节点必须能够访问所有数据、重做日志文件、控制文件和参数文件。数据盘必须全局可用,允许所有节点访问数据库。每个节点都有自己的重做日志和控制文件,但其他节点必须能够访问它们,以便能够从该节点上的系统故障中恢复。OracleRAC在集群上运行,为Oracle数据库提供前所未有的可用性、可伸缩性和低成本计算能力。如果集群中的一个节点发生故障,Oracle将继续在其余节点上运行。Oracle的主要创新是一种称为缓存合并的技术。缓存合并允许集群中的节点通过高速集群互连有效地同步它们的内存缓存,从而最大限度地减少磁盘I/O。缓存最重要的优点是它使集群中所有节点的磁盘能够共享对所有数据的访问。数据不需要跨节点分区。Oracle是唯一一家提供具有此功能的开放系统数据库的供应商。其他声称可以在集群上运行的数据库软件需要对数据库数据进行分区,这是不切实际的。企业网格是未来的数据中心,建立在标准化商品组件的大型配置之上,包括:处理器、网络和存储。OracleRAC的缓存整合技术提供了前所未有的可用性和可伸缩性。OracleDatabase10g和OracleRAC10g显着降低了运营成本并增强了灵活性,从而赋予系统更大的适应性、可预测性和灵活性。节点、存储、CPU和内存的动态配置可以通过提高利用率来持续降低成本,同时实现所需的服务水平。RAC集成集群件管理OracleRAC10g在运行Oracle数据库10g的所有平台上提供完全集成的集群件管理解决方案。此集群件功能包括集群连接、消息处理服务和锁定、集群控制和恢复以及工作负载管理框架(下面讨论)。OracleRAC10g的集成集群件管理具有以下优点:(1)成本低。Oracle免费提供此功能。(2)单一供应商支持。推卸责任的问题被消除了。(3)安装、配置和日常维护更简单。使用标准的Oracle数据库管理工具安装、配置和维护OracleRAC10g集群件。此过程不需要额外的集成步骤。(4)所有平台的质量一致。Oracle对新软件版本的测试比第三方产品更严格。(5)跨所有平台的一致功能。例如,某些第三方集群件产品会限制集群中可支持的节点数。使用OracleRAC10g,所有平台都可以支持多达64个节点。用户还可以获得跨所有平台的一致且响应迅速的体验,有效解决高可用性挑战,包括服务器节点故障、互连故障和I/O隔离现象。(6)支持高级功能。这包括集成的监控和通知功能,可在发生故障时在数据库和应用程序层之间实现快速协调的恢复。RAC的架构RAC是Oracle数据库的集群解决方案,具有协调两个或多个数据库节点运行的能力。RAC结构图如下图所示:集群管理器(ClusterManager)集成了集群系统中的其他模块,通过高速内部连接提供集群节点间的通信。每个节点之间的内部连接通过心跳线连接。心跳线上的信息功能决定了集群逻辑中的节点成员信息和节点更新状态,以及节点在某个时间点的运行状态,以保证集群系统的正常运行。通信层管理节点之间的通信。它的职责是对集群中的节点信息进行配置和互联,使用集群管理器中心跳机制产生的信息,通过通信层传递,保证信息的正确到达。还有集群监控进程,可以持续验证系统不同区域的健康状况。例如,心跳监控不断验证心跳机制是否正常运行。在一个应用环境中,所有的服务器都使用和管理同一个数据库,目的是分散各个服务器的工作量。硬件至少需要两台或多台服务器和共享存储设备;还需要两类软件,一是集群软件,二是Oracle数据库中的RAC组件。同时,所有服务器上的操作系统应该是同一类型。根据负载均衡的配置策略,当客户端向某个服务的监听器发送请求时,服务端会根据负载均衡策略将请求发送到本机。服务器的RAC组件处理也可以发送给其他服务器的RAC组件处理。RAC处理完请求后,会通过集群软件访问共享存储设备。在逻辑结构上,每个参与集群的节点都有一个独立的实例,这些实例访问同一个数据库。节点通过集群软件的通信层进行通信。同时,为了减少I/O消耗,有全局缓存服务,所以每个数据库实例都保留同一个数据库缓存。RAC的特点如下:每个节点实例都有自己的SGA;每个节点实例都有自己的后台进程,每个节点的强度都有自己的重做日志,每个节点实例都有自己的撤销表空间中的所有节点共享数据文件和控制文件的副本。RAC结构和机制在Oracle9i之前,RAC被称为OPS(OracleParallelServer)。RAC和OPS一个很大的区别是RAC采用了CacheFusion(高速缓存合并)技术,一个节点取出的数据块在更新后可以被另一个节点更新而不写入磁盘,然后用***的版本。在OPS中,节点间的数据请求需要先将数据写入磁盘,然后请求节点才能读取数据。使用CacheFusion时,RAC各节点之间的数据缓冲区通过高速、低延迟的内部网络传输数据块。下图是一个典型的RAC对外服务的示意图。一个OracleRACCluster包括以下部分集群节点(Clusternode)——2到N个运行OracleDatabaseServer的节点或主机。私有网络(NetworkInterconnect)——RAC需要一个高速互连的私有网络来处理通信和CacheFusion。共享存储——RAC需要共享存储设备,以便所有节点都可以访问数据文件。外部服务网络(ProductionNetwork)——RAC外部服务网络。通过该网络访问客户端和应用程序。RAC后台进程OracleRAC有一些独特的后台进程,它们不在单个实例中发挥配置作用。如下图所示,定义了一些RAC运行的后台进程。这些后台进程的功能如下所述。(1)LMS(Globalcacheserviceprocessesglobalcacheserviceprocess)进程主要用于管理对集群中数据块的访问,以及传递不同实例的BufferCache中的数据块镜像。直接从控制实例的缓存中复制数据块,然后将副本发送到请求实例。并保证一个数据块的图像在所有实例的BufferCache中只能出现一次。LMS进程通过在实例中传递消息来协调对数据块的访问。当一个实例请求一个数据块时,该实例的LMD进程会发送一个数据块资源请求,该请求指向主数据块实例的LMD进程。实例的LMD进程和正在使用的实例的LMD进程释放资源。这时,拥有该资源的实例的LMS进程会创建一个数据块镜像的一致性读,然后将数据块传递给请求该资源的实例的BUFFER。在缓存中。LMS进程保证每一时刻只允许一个实例更新数据块,并负责维护数据块的镜像记录(包括更新数据块的状态FLAG)。RAC提供了10个LMS进程(0~9),进程的数量随着节点间消息传递的数据量的增加而增加。(2)LMON(LockMonitorProcess,锁监控进程)是一个全局的队列服务监控器。每个实例的LMON进程会定期通信,检查集群中每个节点的健康状态。它提供的服务称为集群组服务(CGS)。LMON主要使用两种心跳机制来完成健康检查。(1)节点间网络心跳:可以想象成节点间定时发送ping包,检查节点状态。如果能在规定时间内收到回复,则认为对方状态正常。(2)通过控制文件的磁盘心跳(controlfileheartbeat):每个节点的CKPT进程每3秒更新一次控制文件的数据块。这个数据块称为检查点进度记录。控制文件是共享的,所以实例之间可以互相检查是否及时更新。(3)LMD(theglobalenqueueservicedaemon,锁管理守护进程)是一个后台进程,也被称为全局队列服务守护进程,因为它负责资源管理需求来控制访问块和全局队列。在每个实例内部,LMD进程管理传入的远程资源请求(即来自集群中其他实例的锁定请求)。此外,它还负责检查死锁和监视转换超时。(4)LCK(锁进程)管理非缓存融合,锁请求是本地资源请求。LCK进程为共享资源的实例管理资源请求和跨实例调用操作。在恢复期间,它会构建一个无效锁定元素列表并验证锁定的元素。由于LMS中处理锁管理的主要功能,每个实例只存在一个LCK进程。(5)DIAG(diagnosabilitydaemon,诊断守护进程)负责捕捉RAC环境中进程故障的信息。并写出故障分析的跟踪信息,DIAG产生的信息对于配合OracleSupport技术查找故障原因非常有用。每个实例只需要一个DIAG进程。(6)GSD(theglobalservicedaemon,全局服务进程)与RAC管理工具dbca、srvctl、oem交互,完成实例的启动、关闭等管理任务。为了保证这些管理工具的正常运行,首先必须在所有节点上启动gsd,一个GSD进程支持一个节点上多个rac.gsd进程。日志文件是ORACLE_HOME/srvm/log/gsdaemon.log。GCS和GES进程负责通过全局资源目录(GRD)维护每个数据文件和缓存块的状态信息。当一个实例访问数据并对数据进行缓存时,集群中的其他实例也会获取对应的块映像,这样其他实例在访问数据时就不需要读取磁盘,而是直接读取SGA缓存中的数据。GRD存在于每个活动实例的内存结构中。这个特性导致RAC环境的SGA比单实例数据库系统的SGA要大。其他进程和内存结构与单实例数据库没有太大区别。RAC共享存储RAC需要有共享存储,独立于实例的信息,比如上面提到的ocr和votedisk以及数据文件都存储在这个共享存储中。存储方式有OCFS、OCFS2、RAW、NFS、ASM等,OCFS(OracleClusterFileSystem)和OCFS2只是一个文件系统。与NFS一样,它们在集群环境中提供共享存储文件系统。RAW裸设备也是一种存储方式,是oracle11g之前的版本RAC支持的存储方式。在Oralce9i之前,OPS/RAC支持只能使用这种方式,即把共享存储映射到RAWDevice,然后将Oracle需要的数据存储到RAWDevice中,但是RAW相对于文件系统并不直观,也不是易于管理,并且RAW设备的数量有限。RAW显然需要一个新的解决方案来替代它,于是就有了OCFS这样的文件系统。当然,这只是Oracle自己实现的一套文件系统,其他厂商提供的文件系统也可以作为存储选项。ASM只是数据库存储方案,不是集群方案,所以这里的ASM应该是区别于同级别的RAW和OCFS/OCFS2的概念。RAW和OCFS/OCFS2不仅可以作为数据库存储方案,也可以作为集群件存储方案。存储方案是CRS中需要的存储,而ASM只是作为数据库存储,严格来说只是RAC中的一个节点应用(nodeapps)。ASM不支持集群件安装所需的ocr和votedisk。毕竟ASM本身是需要实例的,而CRS完全在架构之外。这就是为什么总是添加ASM解决方案的原因。OCFS/OCFS2和RAW上的原因之一。各种RAC共享存储方式对比如下:集群文件系统——支持windows和Linux的OCFS/OCFS2AIX、GPFS等方式——优点是管理方便,表示直观,缺点是基于文件系统管理软件,需要OS缓存处理,性能和稳定性欠缺,不适合生产环境使用。可以支持CRS集群软件文件和数据库文件。RAW裸设备模式——通过硬件支持的共享存储系统,直接使用RAW设备存储,可以支持集群软件文件和数据库文件。网络文件系统(NFS)——通过NFS共享存储,但需要通过Oracle认证的NFS才能支持CRS集群软件文件和数据库文件。ASM—结合了RAWI/O性能和集群文件系统易于管理的优点,Oracle10g下推出的共享存储方式,但是ASM本身需要Oracle实例的支持,所以ASM只支持数据库文件,不支持CRS文件。RAC数据库和单实例数据库的区别为了让RAC中的所有实例都可以访问数据库,所有的数据文件、控制文件、PFILE/Spfile和重做日志文件都必须存储在共享磁盘上,并且可以被同级的所有节点访问。同时。它涉及原始设备和集群文件系统。RAC数据库的结构不同于单实例:每个实例至少多配置一个重做线程,例如:由两个实例组成的集群至少需要4个重做日志组。每个实例两个重做组。另外,为每个实例准备一个UNDO表空间。1、对于redo和undo,每个实例在修改数据库时使用自己的redo和undo段,各自锁定自己修改的数据,相对独立的分离不同实例的操作,避免数据不一致。稍后,我们将在备份或恢复时考虑重做日志和归档日志在这种情况下的特殊注意事项。2.内存和进程每个节点的每个实例都有自己的内存结构和进程结构。每个节点的结构基本相同。RAC通过CacheFusion(缓存融合)技术在各个节点之间同步SGA中的缓存信息,提高访问速度的效果也保证了一致性。
