Oracle Cluster 是一个单独的安装包,安装后,在每个结点上的Oracle Clusterware 会自动启动。 Oracle Clusterware的运行环境由2个磁盘文件(OCR,Voting Disk),若干进程和网络元素组成。
磁盘文件:
Clusterware 在运行期间需要两个文件:OCR和Voting Disk. 这2个文件必须存放在共享存储上。 OCR 用于解决健忘问题,Voting Disk 用于解决脑列问题。 Oracle 建议使用裸设备来存放这2个文件,每个文件创建一个裸设备,每个裸设备分配100M左右的空间就够了。
1.1 OCR
健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的。 Oracle 采用的解决方法就是把这个配置文件放在共享的存储上, 这个文件就是OCR Disk。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.2 Voting Disk
Voting Disk 这个文件主要用于记录节点成员状态,在出现脑裂时,决定那个Partion获得控制权,其他的Partion必须从集群中剔除。在安装Clusterware时也会提示指定这个位置。 安装完成后可以通过如下命令来查看Voting Disk位置:$Crsctl query css votedisk
后台进程:
Clusterware 由若干进程组成,其中最重要的3个是:CRSD,CSSD,EVMD. 在安装clusterware的最后阶段,会要求在每个节点执行root.sh 脚本, 这个脚本会在/etc/inittab 文件的最后把这3个进程加入启动项,这样以后每次系统启动时,Clusterware 也会自动启动,其中EVMD和CRSD 两个进程如果出现异常,则系统会自动重启这两个进程,如果是CSSD 进程异常,系统会立即重启
1 [root@node1 ~]# ls -l /etc/init.d/init.*
2 -r-xr-xr-x 1 root root 1951 Mar 24 05:30 /etc/init.d/init.crs 3 -r-xr-xr-x 1 root root 4719 Mar 24 05:30 /etc/init.d/init.crsd --CRSD 4 -r-xr-xr-x 1 root root 35399 Mar 24 05:30 /etc/init.d/init.cssd --CSSD 5 -r-xr-xr-x 1 root root 3195 Mar 24 05:30 /etc/init.d/init.evmd --EVMD 6 [root@node1 ~]#
2.1 CSSD的子进程OCSSD:
1 [oracle@node1 bin]$ ps -ef|grep -v grep|grep cssd 2 root 5673 1 0 23:15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd fatal 3 root 6328 5673 0 23:19 ? 00:00:00 /bin/sh /etc/init.d/init.cssd daemon 4 root 6453 6328 0 23:19 ? 00:00:00 /bin/su -l oracle -c /bin/sh -c 'ulimit -c unlimited; cd/opt/ora10g/product/10.2.0/crs_1/log/node1/cssd; /opt/ora10g/product/10.2.0/crs_1/bin/ocssd || exit $?'
5 oracle 6454 6453 0 23:19 ? 00:00:00 /bin/sh -c ulimit -c unlimited; cd /opt/ora10g/product/10.2.0/crs_1/log/node1/cssd; /opt/ora10g/product/10.2.0/crs_1/bin/ocssd || exit $?
6 oracle 6489 6454 0 23:19 ? 00:00:00 /opt/ora10g/product/10.2.0/crs_1/bin/ocssd.bin
OCSSD这个进程是Clusterware最关键的进程,如果这个进程出现异常,会导致系统重启,这个进程提供CSS(Cluster Synchronization Service)
服务。CSS服务负责整个集群配置,确定哪些节点是集群里的成员,每当有一个节点加入或离开集群时,CSS负责通知其他节点更新集群配置。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.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 类。
这种分类方式很好理解:Nodeapps 就是说每个节点只需要一个就够了,比如每个节点只有一个Listener;而Database-Related Resource 就是说这些资源和数据库有关,不受节点的限制,比如一个节点可以有多个实例,每个实例可以有多个Service
2.3 EVMD进程:
EVMD 这个进程负责发布CRS 产生的各种事件(Event). 这些Event可以通过2种方式发布给客户:ONS 和 Callout Script. 用户可以自定义回调脚本,放在特定的目录下,这样当有某些事件发生时,EVMD会自动扫描该目录,并调用用户的脚本,这种调用是通过racgevt进程来完成的。
EVMD 进程除了复杂发布事件之外,它还是CRSD 和CSSD 两个进程之间的桥梁。 CRS 和CSS 两个服务之前的通信就是通过EVMD 进程完成的。
网络元素--VIP原理和特点
3.1 VIP原理:
Oracle 的TAF 就是建立在VIP 技术之上的。 IP 和VIP 区别在与: IP 是利用TCP层超时,VIP 利用的是应用层的立即响应。VIP它是浮动的IP. 当一个节点出现问题时会自动的转到另一个节点上。假设有一个2个节点的RAC,正常运行时每个节点上都有一个VIP。当节点2发生故障,RAC 会做如下操作:
1). CRS 在检测到rac2节点异常后,会触发Clusterware 重构,最后把rac2节点剔除集群,由节点1组成新的集群。
2). RAC的Failover 机制会把节点2的VIP转移到节点1上,这时节点1的PUBLIC 网卡上就有3个IP 地址: VIP1,VIP2, PUBLIC IP1.
3). 用户对VIP2的连接请求会被IP层路由转到节点1
4). 因为在节点1上有VIP2的地址,所有数据包会顺利通过路由层,网络层,传输层。
5). 但是,节点1上只监听VIP1和public IP1的两个IP地址。并没有监听VIP2,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。
6). 客户段能够立即接收到这个错误,然后客户段会重新发起向VIP1的连接请求。
3.2 VIP 特点:
1). VIP 是通过VIPCA脚本创建的
2). VIP 作为Nodeapps类型的CRS Resource 注册到OCR中,并由CRS 维护状态。
3). VIP 会绑定到节点的public 网卡上,故public 网卡有2个地址。
4). 当某个节点发生故障时,CRS 会把故障节点的VIP 转移到其他节点上。
5). 每个节点的Listener 会同时监听public 网卡上的 public ip 和VIP
6). 客户端的tnsnames.Ora 一般会配置指向节点的VIP.
Clusterware 的日志体系:
首选的查看文件: alert.log $CRS_HOME/log/[node]/alert.Log Clusterware后台进程日志: crsd.Log $CRS_HOME/log/[node]/crsd/crsd.Log ocssd.Log $CRS_HOME/log/[node]/cssd/ocsd.Log evmd.Log $CRS_HOME/log/[node]/evmd/evmd.Log Nodeapp日志位置: $CRS_HOME/log/[node]/racg/ --包括ONS和VIP,比如:ora.Rac1.ons.Log 工具执行日志: $CRS_HOME/log/[node]/client/ --ocrcheck, ocrconfig,ocrdump,oifcfg和clscfg 这些工具产生的日志就放在这个目录下
--整理自《大话 oracle rac》