在单机环境下,Oracle是运行在OS Kernel 之上的。 OS Kernel负责管理硬件设备,并提供硬件访问接口。 Oracle 不会直接操作硬件,
在单机环境下,Oracle是运行在OS Kernel 之上的。 OS Kernel负责管理硬件设备,并提供硬件访问接口。 Oracle 不会直接操作硬件,而是有OS Kernel代替它来完成对硬件的调用请求。
在集群环境下, 存储设备是共享的。OS Kernel 的设计都是针对单机的,只能控制单机上多个进程间的访问。 如果还依赖OS Kernel的服务,就无法保证多个主机间的协调工作。 这时就需要引入额外的控制机制,在RAC中,这个机制就是位于Oracle 和 OS Kernel 之间的Clusterware,它会在OS Kernel之前截获请求,然后和其他结点上的Clusterware协商,最终完成上层的请求。
在Oracle 10G之前,RAC 所需要的集群件依赖与硬件厂商,比如SUN,HP,Veritas. 从Oracle 10.1版本中,Oracle 推出了自己的集群产品. Cluster Ready Service(CRS),从此RAC 不在依赖与任何厂商的集群软件。 在Oracle 10.2版本中,这个产品改名为:Oracle Clusterware。
因此要了解Oracle RAC集群的最好要从理解集群(cluster)的组成、进程及相关日志文件的位置开始。
Clusterware 组成
Oracle Cluster 是一个单独的安装包,安装后,在每个结点上的Oracle Clusterware 会自动启动。 Oracle Clusterware的运行环境由2个磁盘文件(OCR,Voting Disk),若干进程和网络元素组成。
1 磁盘文件:
Clusterware 在运行期间需要两个文件:OCR和Voting Disk. 这2个文件必须存放在共享存储上。
OCR 中保存整个集群的配置信息,配置信息以"Key-Value" 的形式保存其中。 在Oracle 10g以前, 这个文件叫作Server Manageability Repository(SRVM). 在Oracle 10g, 这部分内容被重新设计,并重名为OCR.在Oracle Clusterware 安装的过程中, 安装程序会提示用户指定OCR位置。并且用户指定的这个位置会被记录在/etc/oracle/ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)文件中。 而在Oracle 9i RAC中,对等的是srvConfig.Loc文件。 Oracle Clusterware在启动时会根据这里面的内容从指定位置读入OCR 内容。
1). OCR key
整个OCR 的信息是树形结构,有3个大分支。分别是SYSTEM,DATABASE 和CRS。每个分支下面又有许多小分支。这些记录的信息只能由root用户修改。
2) OCR process
Oracle Clusterware 在OCR中存放集群配置信息,,故OCR 的内容非常的重要,所有对OCR的操作必须确保OCR 内容完整性,所以在ORACLE Clusterware运行过程中,并不是所有结点都能操作OCR Disk.
在每个节点的内存中都有一份OCR内容的拷贝,这份拷贝叫作OCR Cache。 每个结点都有一个OCR Process 来读写OCR Cache,但只有一个节点的OCR process能读写OCR Disk中的内容,这个节点叫作OCR Master结点。 这个节点的OCR process 负责更新本地和其他结点的OCR Cache内容。
所有需要OCR 内容的其他进程,比如OCSSD,EVM等都叫作Client Process, 这些进程不会直接访问OCR Cache,而是向OCR Process发送请求,借助OCR Process获得内容,如果想要修改OCR 内容,也要由该节点的OCR Process像Master node 的OCR process 提交申请,由Master OCR Process完成物理读写,并同步所有节点OCR Cache中的内容。
3) Voting Disk
Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个Partion获得控制权,其他的Partion必须从集群中剔除。在安装Clusterware时也会提示指定这个位置。 安装完成后可以通过如下命令来查看Voting Disk位置。
$Crsctl query css votedisk
Clusterware 后台进程
Clusterware 由若干进程组成,其中最重要的3个是:CRSD,CSSD,EVMD. 在安装clusterware的最后阶段,会要求在每个节点执行root.sh 脚本, 这个脚本会在/etc/inittab 文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware 也会自动启动,其中EVMD和CRSD 两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD 进程异常,系统会立即重启。
1). OCSSD
OCSSD 这个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启,这个进程提供CSS(Cluster Synchronization Service)服务。 CSS 服务通过多种心跳机制实时监控集群状态,提供脑裂保护等基础集群服务功能。
CSS 服务有2种心跳机制: 一种是通过私有网络的Network Heartbeat,另一种是通过Voting Disk的Disk Heartbeat.
这2种心跳都有最大延时,对于Disk Heartbeat, 这个延时叫作IOT (I/O Timeout);对于Network Heartbeat, 这个延时叫MC(Misscount)。 这2个参数都以秒为单位,缺省时IOT大于MC,在默认情况下,这2个参数是Oracle 自动判定的,并且不建议调整。可以通过如下命令来查看参数值:
$crsctl get css disktimeout
$crsctl get css misscount
注:除了Clusterware 需要这个进程,在单节点环境中如果使用了ASM,也需要这个进程;这个进程用于支持ASM Instance 和RDBMS Instance之间的通信。 如果在使用了ASM的节点上安装RAC,会遇到一个问题:RAC节点要求只有一个OCSSD进程,并且应该是运行$CRS_HOME目录下的,这时就需要先停止ASM,并通过$ORACLE_HOME/bin/localcfig.Sh delete 删除之前的inittab 条目。 之前安装ASM时,也使用这个脚本来启动OCSSD: $ORACLE_HOME/bin/localconfig.Sh add.
2). CRSD
CRSD是实现"高可用性(HA)"的主要进程,它提供的服务叫作CRS(Cluster Ready Service) 服务。
Oracle Clusterware是位于集群层的组件,它要为应用层资源(CRS Resource) 提供"高可用性服务",所以, Oracle Clusterware 必须监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程或者转移服务。CRSD进程提供的就是这些服务。
所有需要 高可用性 的组件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,而CRSD 进程就是根据OCR中的内容,决定监控哪些进程,如何监控,出现问题时又如何解决。也就是说,CRSD 进程负责监控CRS Resource 的运行状态,并要启动,停止,监控,Failover这些资源。 默认情况下,CRS 会自动尝试重启资源5次,如果还是失败,则放弃尝试。
CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 这些资源被分成2类:
GSD,ONS,VIP 和 Listener 属于Noteapps类
Database,Instance 和Service 属于 Database-Related Resource 类。