从oracle9.2.0.2.0开始到最近的11.1,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。系统应该重启但没有重启。
二、oprocd
linux平台上的Oracle Clusterware 10.2.0.4和以后版本引入了一个新的Oracle Clusterware Process Monitor Daemon (OPROCD)进程来监控系统状态和集群中的每个节点的健康状态,就象已经在不使用第三方的cluster软件的UNIX系统中提供的那样,下面来看看OPROCD到底是何方神圣。
OPROCD在linux平台上的10.2.0.4版本中和hangcheck-timer一起运行,它和hangcheck-timer模块没有联系和依赖关系,它由init.ccsd进程产生出来并用root用户运行。OPROCD进程被锁定在内存中来监控集群中的每个它自己运行的节点,来检测机器上的硬件或者驱动的freezes,并且提供I/O的fencing功能(这和SCSI提供的中断的fencing功能不同)。如果一个机器被冻结了足够长的时间后,它被会集群驱逐出节点,它自己需要强制重启自己来阻止集群从失败的节点上的锁资源被重新组织后,失败的节点仍然访问共享的数据文件上的有疑问的I/O操作。为了提供这样的功能,OPROCD执行检查,然后停止运行(休眠),然后如果在期望的时间内不能被唤醒,OPROCD将重启本机的节点。
注意:OPROCD在第三方实现的集群环境中是不存在的,因为在LINUX平台下没有通过验证的第三方的集群解决方案,所以linux平台下的0.2.0.4版本中OPROCD将总是会存在的。
OPROCD启动的时候有两个参数:
-t : 超时时间,缺省1000,单位毫秒 (OPROCD_DEFAULT_TIMEOUT=1000)
-m : 重启前可接受的延迟,单位毫秒,缺省500 (OPROCD_DEFAULT_MARGIN=500)
推荐设置DIAGWAIT为13来增加重启前可接受的时间来把更多的日志信息写入磁盘。
缺省的话,-m的间隔为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
设置了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"
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。