Oracle RAC结构

Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后 , 才正在推出了属于自己的RAC集群解决方案 。RAC?和集群分类章节提到的集群系统有很多相似之处 , 从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境 。

Oracle RAC结构

文章插图
Oracle Rac 结构
从上图可以看出 , RAC集群是由若干个物理计算机组成( 每个叫作一个节点) , 这些节点间通过网线(心跳线)连接 。每个节点上都运行一个Oracle实例(Instance) ,  这些实例通过一个集群管理软件(Clusterware, 集群件)的协助 , 共同操作一个数据库 。从用户(使用者)的视角来看 , 他们看到的只是一个数据库 。
【Oracle RAC结构】我们从逻辑上可以把RAC集群分为存储层、网络层、集群件层、应用层4层结构 , 下面我们逐一讲解一下各分层的概念 。
存储层Oracle RAC其实是一个多实例、单数据库的系统 。其中数据文件、联机日志、控制文件等文件在集群中只有一份 。集群当中不管有多少个节点 , 这些节点都平等地使用着同样的数据文件 , 每个节点服务器通过光纤线连接到存储上 。虽然RAC中有多个实例 , 但是只有一个数据库 , 这个数据库就保存在共享存储的磁盘上 。
在Oracle中 , 实例和数据库这两个概念是不同的 。实例特指由SGA内存结构和后台进程组成的运行时环境 , 因此Oracle实例是一个动态的概念 , 而数据库指的是数据文件、控制文件、日志文件这些保存在存储上的永久文件 , 是一个静态的概念 。
因此 , Oracle的实例和数据库是多对一的关系 , 在单实例环境中 , 二者是一对一的关系 , 所以二者经常会混淆使用 , 会被认为是同一个概念 。但是在RAC集群环境中 , 可以有多个实例 , 但是数据库就只有一个 , 所以区分这两个概念有重要意义 。
网络层通过上图的RAC的结构图 , 我们可以发现在整个RAC集群环境中 , 是有3个网络存在的 。一个是访问者访问数据库时 , 提供的一个公共网络 , 主要用于提供数据库查询和操作等服务;另一个是由私有网卡组成的私有网络 , 用于RAC集群各个节点间的互联 , 既是心跳线;第三个是各个节点和存储设备进行连接的存储网络 。
集群键层Oracle在单机环境下是运行在OS操作系统的内核之上的 , 操作系统负责和硬件设备进行交互 , 并通过访问接口 。Oracle系统是不会直接操作硬件的 , 而是有操作系统替代完成的 。
但是 , 到了RAC集群环境下 , 虽然会有多个实例(节点或计算机) , 但是Oracle的存储设备是共享的 。这个时候如果还依赖OS操作系统 , 只能控制单机上的多个进程间的访问 , 无法实现多个节点间的协调工作 。因此 , Oracle RAC引进额外的控制机制 , 这个机制就是位于Oracle和OS操作系统之间的多了一集群管理软件(Clusterware) , 它会在OS操作系统之前截获请求 , 然后和其他节上的Clusterware协商 , 最终完上层的请求 。
应用层Oracle RAC应用层 , 必须要提到一个软件CRS , CRS是Oracle Cluster Ready Service(Oracle集群就绪服务) 。CRS是Oracle 10gR2开始的 , 用以提供标准的群集服务接口 , 用来搭建一般应用程序的高可用集群 。之后从Oracle 10.2版本开始把CRS改名为上面的Oracle Clusterware 。并且这个产品不局限于搭建Oracle数据库的集群 , 其它软件可以借助其API搭建集群功能 。
集群环境之所以能够提供高可用性 , 是因为集群软件(CRS)对运行于其上的应用进行监视 , 并在发生异常时进行重启、切换等干预手段 , 这些被CRS监控的对象就叫作CRS Resource 。可以简单的理解 , CRS Resource通常是一个进程或者有一组进程组成的服务 。通过这些服务提供应用 。
其中 , RAC集群的CRS Resource主要有GSD ( Global Service Daemon)、ONS (Oracle Notification Service Daemon)、VIP、 Database、 Instance、 Listener 和Service 。
总结:本节主要大概介绍Oracle RAC的结构和逻辑层次 , 主要目的为了读者可以对Oracle RAC集群有一个宏观的了解 。


推荐阅读