clusterware组件和进程
clusterware由若干个进程组成,在unix、linux系统中,这些进程以后台daemon的形式存。集群的所有节点上都会有这些进程,不同节 点上的同名进程之间相互通信,实现了集群的相互通信,同时这些进程还要负责本节点上的Oracle Clusterware和Oracle database之间的通信。下面是Clusterware的服务组件和进程列表
Oracle Clusterware Component | LInux/Unix进程 |
Cluster Synchronization Services (CSS) | init.cssd ocssd ocssd.bin |
Cluster Ready Service (CRS) | crsd.bin |
Event Manager Service (EVM) | evmd evmdlogger |
Oracle Notification Service (ONS) | ons |
Process Monitor Daemon | oprocd |
RACG | racgmain racgimon |
CSS(Cluster Synchronization Service)
这个服务通过管理集群中的各个节点成员身份完成整个集群的配置工作。每当有新的节点加入到集群,或者有节点离开集群时,CSS负责通知集群的所有节点变更集群配置信息。
CSS服务有两种心跳机制:一种是通过私有网络的Network Heartbeat,另一张是通过Voting Disk的Disk Heartbeat
这两个心跳都有最大延迟,对于Disk Heartbeat这个延时叫IOT(I/O Timeout),单位为秒;对于Network Heartbeat叫做MC(MisCount)是指可以丢失包的次数,以秒为计。缺省情况下这些参数由Oracle自行判定,并且不建议调整。可通过如 下命令查看:
[oracle@rac1 ~]$ crsctl get css disktimeout
200
[oracle@rac1 ~]$ crsctl get css misscount
60
注意:不同版本的RAC,IOT和MC的默认值不同。10.2.0.1中 Linux上默认misscount为60s,其他平台为30s,若使用了第三方vendor clusterware则为600s,但10.2.0.1中未引入disktimeout;10.2.0.4以后misscount为 60s,disktimeout为200s;11.2以后misscount为30s
负责运行css服务的是init.cssd进程,如果某个节点上的这个进程失败,这个节点会被重启。这个进程是以root身份运行的。该进程是由系 统的init启动的。init启动init.cssd后,init.cssd还会启动ocssd.bin,oprocd和oclsomon.bin。
ocssd管理节点成员关系,以oracle身份运行。如果ocssd死掉或被kill,那么init就会重启故障节点。如果ocssd发生错 误,init就会再次启动init.cssd,在尝试启动ocssd进程之前,后者发现已经有ocssd daemon,也会重启故障节点。
oclsomon是从10.2.0.2引入的,以oracle身份运行,用来监控css,如果发现进程挂起,也会重启节点
CRS(Cluster Ready Service)
这个组件负责集群的高可用性。被CRS管理的对象叫集群资源,这些资源包括数据库、实例、服务、监听器、VIP地址以及应用程序进程。缺省情况 下,CRS管理着4个应用程序进程:Oracle监听器,VIP地址,GSD(Global Service Daemon),ONS(Oracle Notification Service)。这些资源信息都保存在OCR中。每当某个资源发生了变化,CRS就会生成一个事件。
CRS会监控这些资源的状态,如果某个资源失效了(比如实例或监听),CRS就会尝试自动重启该组件。如果尝试几次都失败就会尝试放弃。缺省时,CRS会尝试5次然后放弃。
CRSD是提供HA的主要进程,提供CRS服务,以root身份运行,如果CRS失败,该进程会自动重启。CRSD是Oracle clusterware高可用性的核心,负责管理注册应用的start、stop、monitor和failover。CRSD为每个实例起一个专用的 racgimon进程负责监控各应用的运行情况,CRSD负责管理OCR中的各资源配置以及状态。它也是以root用户运行,如果这个进程失败会自动重 启。此外,CRSD还可以临时生成以下进程执行某些操作:
racgeut(Execute Under Timer),定时触发,杀掉一些超市进程
racgmdb(Manage Database),启动、停止和检查数据库实例
racgchsn(Change Service Name),给实例增加、删除、检查服务名
racgons,维护OCR中的ONS配置信息
racgvip,启动、检查、停止VIP
所有需要“高可用性”的组件,都会在安装配置的时候,以CRS Resource的形式登记到OCR中,而CRSD进程就根据OCR中的内容决定监控哪些进程、如何监控、出现问题时如何解决。也就是说CRSD需要启 动、停止、监控和Failover这些资源。默认情况下,CRS会自动尝试5次,如果还是失败,则会放弃尝试。
CRS Resource包括GSD(Global Service Daemon)、ONS(Oracle Notification Service Daemon)、linster、VIP、Database、Instance和Service。GSD,ONS,VIP和listener属于 Noteapps类;而Database、Instance和Service属于Database-Related Resource类。Nodeapps就是说每个节点只要一个就够了,比如每个节点一个listener,而Database-related是说这些资 源和数据库相关,不受节点限制,比如一个节点可以有多个实例、每个实例多个service。
被CRS管理的对象被称为Resource,一个资源的生命周期包含以下几个阶段:创建或修改 profile(crs_profile)-->将resource注册到OCR中(crs_register)-->启动 (crs_start)-->查看状态(crs_stat)-->重新分配到其他节点(crs_relocate)-->停止 (crs_stop)-->取消注册(crs_unregister)。资源的profile以及相关属性都存放在OCR中。profile中的属 性包括check interval、action script、dependencies、failure policies、privileges等,可以使用crs_stat -p resourcename查看各项属性
EVM(Event Management)
这个组件负责对外发布CRS生成的事件,负责这个组件的是evmd进程,以root身份运行。这些event通过两种方式发布给客户--ONS和 Callout Script。用户可以自定义回调脚本,放在特定目录下这样当有事件发生时,evmd会自动扫描该目录,并调用用户脚本。EVM就可以调用我们自己的脚 本,这种调用是通过racgevt进程进行的。
EVMD进程除了发布事件之外,他还是crs和css之间通信的桥梁。
ONS ( Oracle Notification Service )
ONS:Oracle通告服务,发布和订阅Fast Application Notification事件。这个组件和CRS进行协作,加强了RAC的负载均衡和故障检测能力。
Oracle Clusterware Process Monitor Daemon(oprocd)
从oracle9.2.0.2.0开始到10.2.0.4以及11.1.0.1到11.1.0.5,Oracle在linux下建立RAC时推荐使 用一个I/O fencing模块,叫做hangcheck-timer,此模块作用是用来监测节点Linux kernel是否hang住,如果长时间hang住的话Oracle认为对RAC节点稳定性存在影响,就会重启此节点. 此模块有三个参数hangcheck_tick和hangcheck_margin、hangcheck_reboot,如果kernel在 hangcheck-tick和hangcheck-margin时间总和内无响应的话,hangcheck-timer根据 hangcheck_reboot的值确定是否重启系统.hangcheck_reboot大于等于1,重启;0,不重启。在2.6的内核中,缺省值是 0。那么"Hangcheck: hangcheck value past margin!"告警信息,表示由于hangcheck-reboot值为1。系统应该重启但没有重启。
不过从10.2.0.4开始,以及11.1.0.6以后,Linux平台开始使用oprocd这个进程,也叫做Process Monitor Daemon来实现“IO 隔离”功能。oprocd这个进程用来检测节点的Processor hang(CPU挂起)。该进程锁定在内存中,用于提供IO Fencing功能。它所提供的其实和linux平台下hangcheck相同的功能,机制也类似。如果这个时间超过了某个期待值(默认是 1.5s),oprocd进程就会重启节点。oprocd进程的失败也会导致Oracle clusterware重启节点。
oprocd也是被init.cssd脚本以root身份启动的,这个进程用来检查本节点硬件和驱动是否被"frozen"。如果一个节 点"frozen"足够长的时间,其他节点就会把这个节点从集群中踢出,这个节点的oprocd进程就会使用c代码重启本节点。这个进程有两个启动参数, 这个两个启动参数控制时间间隔
-t : 超时时间,缺省1000,单位毫秒 (OPROCD_DEFAULT_TIMEOUT=1000)
-m : 重启前可接受的延迟,单位毫秒,缺省500 (OPROCD_DEFAULT_MARGIN=500)
$ ps -efl | grep oprocd
0 S root 6444 3080 0 78 0 - 636 - Apr15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd oprocd
4 S root 7255 6444 0 -40 - - 516 - Apr15 ? 00:00:00 /u01/app/crs11g/bin/oprocd run -t 1000 -m 500 -f
这两个参数相加即之前所说的1.5s,在/etc/init.d/init.cssd用下面两个变量定义
OPROCD_DEFAULT_TIMEOUT=1000
OPROCD_DEFAULT_MARGIN=500
为了在重启前可接受的时间来把更多的日志信息写入磁盘。oracle推荐设置DIAGWAIT为13。设置了DIAGWAIT为13会默认增加-m的时间,下面显示设置DIAGWAIT为13后,-m参数值为10000
$ ps -efl | grep oprocd
0 S root 6444 3080 0 78 0 - 636 - Apr15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd oprocd
4 S root 7255 6444 0 -40 - - 516 - Apr15 ? 00:00:00 /u01/app/crs11g/bin/oprocd run -t 1000 -m 10000 -f
OPROCD和hangcheck-timer在linux平台下是同时运行并提供不同的检测机制的,当他们导致节点重启的话,在系统日志中记录的信息是不同的:
oprocd导致的重启会记录"SysRq: resetting"
Hangcheck-timer导致的重启会记录"Hangcheck: hangcheck is restarting the machine"
GSD (Global Services Daemon)
每个节点都会启动一个GSD进程,GSD接受来自客户端工具的请求,如果DBCA,EM,srvctl等执行管理工作。GSD不是后台管理进程,他以服务的方式创建和启动。从10g开始,GSD不再像8i,9i时那样是主要进程。
RACGIMON
RACGIMON这个进程负责检查数据库状态,负责Service的启动、停止、故障转移(Failover)。这个会建立到数据库的持久连接,定期检查SGA中的特点信息,该信息有PMON进程定时更新。
参考至:《大话Oracle RAC》张晓明著
http://lanying1982.blog.163.com/blog/static/23067748201091113730962/
http://docs.oracle.com/cd/B10500_01/rac.920/a96597/pssvarch.htm
http://t.askmaclean.com/viewthread.PHP?action=printable&tid=1271
http://docs.oracle.com/cd/B28359_01/rac.111/b28254/rac_glossary.htm
http://www.doc88.com/p-430722924797.html
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com