ORACLE RAC集群的体系结构

RAC是一个完整的集群应用环境,它不仅实现了集群的功能,而且提供了运行在集群之上的应用程序,即Oracle数据库。无论与普通的集群相比,还是与普通的Oracle数据库相比,RAC都有一些独特之处。

RAC由至少两个节点组成,节点之间通过公共网络和私有网络连接,其中私有网络的功能是实现节点之间的通信,而公共网络的功能是提供用户的访问。在每个节点上分别运行一个Oracle数据库实例和一个监听器,分别监听一个IP地址上的用户请求,这个地址称为VIP(Virtual IP)。用户可以向任何一个VIP所在的数据库服务器发出请求,通过任何一个数据库实例访问数据库。Clusterware负责监视每个节点的状态,如果发现某个节点出现故障,便把这个节点上的数据库实例和它所对应的VIP以及其他资源切换到另外一个节点上,这样可以保证用户仍然可通过这个VIP访问数据库。

在普通的Oracle数据库中,一个数据库实例只能访问一个数据库,而一个数据库只能被一个数据库实例打开。在RAC环境中,多个数据库实例同时访问同一个数据库,每个数据库实例分别在不同的节点上运行,而数据库存放在共享的存储设备上。

通过RAC,不仅可以实现数据库的并发访问,而且可以实现用户访问的负载均衡。用户可以通过任何一个数据库实例访问数据库,实例之间通过内部通信来保证事务的一致性。例如,当用户在一个实例修改数据时,需要对数据加锁。当另一个用户在其他实例中修改同样的数据时,便需要等待锁的释放。当前一个用户提交事务时,后一个用户立即可以得到修改之后的数据。

RAC集群环境的基本结构如图2.1所示。

在创建RAC集群时,一般来说,Clusterware软件和Oracle数据库软件安装在每个节点的本地文件系统中,而那些要被所有节点访问的文件则存放在共享的存储设备中。在安装Clusterware软件时,需要在共享存储设备中创建OCR和Voting文件。其中,在OCR文件中记录RAC集群的配置信息,在Voting文件记录每个节点的成员资格信息。每个节点中的RAC集群在启动时,都需要读这两个文件,以确定当前节点的成员资格,并获得整个集群的配置信息。在创建数据库时,数据库文件、重做日志文件、控制文件、参数文件也存放在共享的存储设备中。对于共享存储设备,RAC有以下几种使用方式:

ORACLE RAC集群的体系结构_第1张图片 
图2.1   RAC的基本结构

在共享存储设备中创建集群文件系统,如Linux中的OCFS、AIX中的GPFS等。

在共享存储设备中创建文件系统,然后在NFS服务中将这些文件系统设置为共享文件系统。

创建ASM磁盘组,将共享存储设备放在ASM磁盘组中。

无论以什么样的方式使用共享存储设备,多个节点需要能够同时访问存储于这种设备中的文件。因此,与单机中的存储设备相比,共享存储设备需要向多个节点提供并发访问。

从11.2版本开始,Oracle已经完全取消了对裸设备的支持,这就意味着,无论是OCR和Voting文件,还是数据库文件,都不能存储在裸设备中了。Oracle目前强力推荐使用的存储技术是ASM。在安装Grid Infrastructure软件时,同时安装了Clusterware软件和ASM软件,这时就可以创建ASM实例和ASM磁盘组,并把OCR和Voting文件存储在ASM磁盘组中。在创建数据库时,还可以再创建其他的ASM磁盘组,把数据库文件和快速恢复区(Flash recovery area)也存放在ASM磁盘组中。

为了访问ASM磁盘组中的文件,在每个节点上需要运行一个ASM实例。ASM实例的功能是对ASM磁盘组进行管理和控制。在一个RAC集群环境中,可以创建多个ASM磁盘组,在不同的磁盘组可以存放不同类型的文件。

使用ASM磁盘组的RAC如图2.2所示。

ORACLE RAC集群的体系结构_第2张图片 
(点击查看大图)图2.2   使用ASM磁盘组的RAC

在单实例数据库中,一个实例只能访问一个数据库,一个数据库只能被一个实例打开。实例是内存中的结构,包括SGA(System Global Area)和后台进程两部分。其中SGA是内存中一些缓冲区的集合。以下几种缓冲区是每个实例都需要的:

数据库高速缓存 存放用户最近所访问的数据。

重做日志缓冲区 存放与用户事务有关的重做日志。

共享池 包括库缓冲区和数据字典缓冲区。其中,在库缓冲区中存放用户最近所执行过的SQL语句以及它们的分析代码和执行计划。在数据字典缓冲区中存放用户最近所访问过的数据库对象的数据字典信息。

在启动实例时,系统在内存中分配SGA,同时启动若干后台进程。后台进程的主要功能是在实例和数据库之间交换数据。以下后台进程是每个实例都需要的:

DBWR 用于把数据库高速缓存中的脏缓冲区写入数据文件。

LGWR 用于把重做日志缓冲区中的重做日志写入重做日志文件。

SMON 用于进行实例恢复。

PMON 用于监视用户进程的状态,如果发现用户进程意外终止,便回收相关的资源,回滚没有提交的事务,并释放用户进程对数据所加的锁。

CKPT 用于发出检查点,对数据文件、控制文件和重做日志文件进行同步。

ARCH 用于对重做日志文件进行归档。

数据库表现为磁盘上的文件,用户通过实例访问这些文件中的数据。数据库中的文件可以存放在计算机的内置磁盘上,也可以存放在外置的存储设备中。以下文件是每个数据库都需要的:

数据文件 用于存放用户所关心的业务数据。

控制文件 用于存放数据库的结构信息。

重做日志文件 用于存放与用户事务有关的重做日志。

除了上述三种文件以外,在数据库中还有归档日志文件、口令文件、跟踪文件、警告文件、参数文件等各种类型的文件。

单实例数据库的结构如图2.3所示。

ORACLE RAC集群的体系结构_第3张图片 
图2.3   单实例数据库的结构

在RAC集群数据库中,每个数据库实例都具有数据库高速缓存等几种内存结构,以及SMON等后台进程,这一点与单实例数据库是相同的。然而,多个实例需要同时访问数据库中的数据,这就要求RAC保证数据的一致性。RAC通过“缓存融合”(Cache Fusion)技术来保证数据在多个实例之间的一致性。

利用“缓存融合”技术,RAC把每个数据库实例中的数据库高速缓存,在逻辑上虚拟为一个大的缓存,每个数据库实例在处理数据时,就好像是处于自己的缓存中一样。在每个数据库实例中还有另外两个后台进程GCS(Global Cache Service)和GES(Global Enqueue Service),用来维护每个数据文件的状态,以及那些已经被读到数据库高速缓存中的数据块的状态,这些状态信息记录在一个称为GRD(Global Resource Directory)的内存数据结构中。当一个数据库实例访问数据时,数据所在的数据块被读到这个实例的数据库高速缓存中,其他数据库实例将从前一个实例中得到这个数据块的映像。如果数据块的内容被修改,其他实例也将得到被修改之后的映像。由此可见,当多个数据库实例同时访问同样的数据时,数据直接在这些实例的数据库高速缓存之间传输,而不需要重复地从数据文件中读取。为了实现“缓存融合”,在不同的实例之间需要进行相互通信,这种通信是通过私有网络来完成的。

从上述内容可以看出,私有网络在整个RAC集群环境中起着非常重要的作用:一方面,Clusterware通过私有网络发送心跳信号,探测每个节点的状态;另一方面,数据库实例通过私有网络实现“缓存融合”。为了避免对私有网络的通信带来干扰,建议大家不要通过私有网络实现用户的访问。

在RAC集群环境中,GCS和GES进程表现为实例中的以下后台进程:

LMON

LMD

LMS

LCK

ACMS

这些后台进程相互合作,保证了数据在多个数据库实例之间的一致性,一旦数据在一个实例中被修改,在其他实例中可以得到相同的数据。

在RAC集群环境中,由于多个节点同时访问数据库,所以数据库中的文件都存放在共享的存储设备中。由于每个实例都独立地处理自己的事务,所以每个实例都有自己的重做日志组和UNDO表空间,临时表空间和业务数据所在的表空间以及控制文件都是多个节点共享的。为了对重做日志组进行切换和归档,每个数据库实例至少需要两个重做日志组。

RAC数据库服务器的结构如图2.4所示(在图中只列出部分后台进程)。

ORACLE RAC集群的体系结构_第4张图片 
图2.4   RAC数据库的结构

你可能感兴趣的:(Oracle)