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有以下几种使用方式:
图2.1 RAC的基本结构 |
(点击查看大图)图2.2 使用ASM磁盘组的RAC |
DBWR 用于把数据库高速缓存中的脏缓冲区写入数据文件。
LGWR 用于把重做日志缓冲区中的重做日志写入重做日志文件。
SMON 用于进行实例恢复。
PMON 用于监视用户进程的状态,如果发现用户进程意外终止,便回收相关的资源,回滚没有提交的事务,并释放用户进程对数据所加的锁。
CKPT 用于发出检查点,对数据文件、控制文件和重做日志文件进行同步。
ARCH 用于对重做日志文件进行归档。
数据库表现为磁盘上的文件,用户通过实例访问这些文件中的数据。数据库中的文件可以存放在计算机的内置磁盘上,也可以存放在外置的存储设备中。以下文件是每个数据库都需要的:
数据文件 用于存放用户所关心的业务数据。
控制文件 用于存放数据库的结构信息。
重做日志文件 用于存放与用户事务有关的重做日志。
除了上述三种文件以外,在数据库中还有归档日志文件、口令文件、跟踪文件、警告文件、参数文件等各种类型的文件。 单实例数据库的结构如图2.3所示。
图2.3 单实例数据库的结构 |
LMON
LMD
LMS
LCK
ACMS
这些后台进程相互合作,保证了数据在多个数据库实例之间的一致性,一旦数据在一个实例中被修改,在其他实例中可以得到相同的数据。 在RAC集群环境中,由于多个节点同时访问数据库,所以数据库中的文件都存放在共享的存储设备中。由于每个实例都独立地处理自己的事务,所以每个实例都有自己的重做日志组和UNDO表空间,临时表空间和业务数据所在的表空间以及控制文件都是多个节点共享的。为了对重做日志组进行切换和归档,每个数据库实例至少需要两个重做日志组。 RAC数据库服务器的结构如图2.4所示(在图中只列出部分后台进程)。
图2.4 RAC数据库的结构 |