这个服务通过管理集群中的节点成员身份完成整个集群的配置工作,每当有新的节点加入到集群,或者有节点离开时,CSS服务负责通知集群的所有节点变更集群配置信息。如果某个节点上的整个进程失败,就会重启这个节点,这个进程是以root身份运行。
这个组件负责集群的高可用性。被CRS管理的对象叫做集群资源。这些资源包括数据库、实例、监听、VIP地址以及应用程序进程。缺省情况下CRS管理着4个应用程序:oracle监听器、VIP地址、GSD(globalservice daemon)、ONS(oraclenotification service)这些资源的配置信息都保存在OCR中。每个资源的状态发生了变化,CRS就会生成一个事件。
CRS会监控这些资源的状态,如果某个资源失效了CRS就会重启这些组件。如果尝试几次都失败了就会放弃尝试,缺省时CRS会尝试5此重启然后放弃。CRS也是通过root身份运行的。如果CRS本身失败,实例就会重启。
这个组件负责对外发布CRS生成的事件,我们可以自行定义回调脚本,这样当有事件发生时,EVM就可以调用我们自己的脚本,这种调用是通过racgevt进程进行的。这个组件也是以root身份运行的。
除了通过这个组件,oracle clusterware还会和ONS(oracle notificationService)通信这个组件支持客户端订阅和发布FAN事件。
在执行root脚本是会在/etc/inittab中添加三行:
[oracle@felix2 ~]$ cat /etc/inittab
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <[email protected]>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#
# Default runlevel. The runlevels used by RHS are:
# 0 - halt(Do NOT set initdefault to this)
# 1 -Single user mode
# 2 -Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Fullmultiuser mode
# 4 -unused
# 5 - X11
# 6 -reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# When our UPS tells us power has failed, assumewe have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerdinstalled and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "PowerFailure; System Shutting Down"
# If power was restored before the shutdown kickedin, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "PowerRestored; Shutdown Cancelled"
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon
h1:35:respawn:/etc/init.d/init.evmdrun >/dev/null 2>&1 </dev/null
h2:35:respawn:/etc/init.d/init.cssdfatal >/dev/null 2>&1 </dev/null
h3:35:respawn:/etc/init.d/init.crsdrun >/dev/null 2>&1 </dev/null
[oracle@felix2 ~]$
这样在以后每次系统启动时cluster就会自动启动,如果EVMD和CRSD两个进程如果出现异常,则系统会自动重启这两个进程,如果CSSD进程出现异常,系统会自动重启。
这个进程是clusterware最关键的进程,如果这个进程出现异常,会导致系统重启。这个进程提供CSS服务,CSS服务负责整个集群配置,确定哪些节点是集群里的成员,每当有一节节点加入或者离开集群时,CSS都负责其他节点跟新进群配置。CSS服务通过多种心跳机制,实施监控集群健康状态,一旦发生异常,则重启问题节点以避免发生数据损坏以及提供 脑裂保护等基础集群服务功能。
CSS服务有两种心跳机制:一种是通过私有网络的net我认可heartbeat,另一种是通过voting disk的disk heartbeat;这两个心跳都有最大延时,对于disk heartbeat,这个延时叫做IOT(I/O Timeout);对于network heartbeat,这个延时叫做MC(MisCount);
[oracle@felix2 ~]$ crsctl get css disktimeout
unrecognized parameter disktimeout specified.
[oracle@felix2 ~]$ crsctl get css misscount
60
[oracle@felix2 ~]$
[oracle@felix2 ~]$ ps -ef | grep css
oracle 7171 5395 0 01:00 pts/2 00:00:00 grep css
root 28575 1 0 00:09 ? 00:00:01 /bin/sh /etc/init.d/init.cssdfatal
root 29007 28575 0 00:11 ? 00:00:00 /bin/sh /etc/init.d/init.cssd daemon
root 29148 29007 0 00:11 ? 00:00:00 /bin/su -l oracle -c /bin/sh-c 'ulimit -c unlimited; cd /u01/oracle/10.2.0/crs_1/log/felix2/cssd; /u01/oracle/10.2.0/crs_1/bin/ocssd || exit $?'
oracle 29149 29148 0 00:11 ? 00:00:00 /bin/sh -c ulimit -cunlimited; cd /u01/oracle/10.2.0/crs_1/log/felix2/cssd; /u01/oracle/10.2.0/crs_1/bin/ocssd || exit $?
oracle 29181 29149 0 00:11 ? 00:00:03/u01/oracle/10.2.0/crs_1/bin/ocssd.bin
[oracle@felix2 ~]$
这个进程也叫做process Monitor daemon。这个进程是用来检测节点的ProcessHang(CPU 挂起)。这个进程锁定在内存中,用于IOFencing功能。OPROC进程会定期唤醒,检查从上次唤醒以来经历的时间,如果这个时间超过了某个期待值(1.5秒),OPROCD进程就会重启节点。