最近时间,一从事系统运维的同事问我,说,因为需要调整网络,需要对一套生产中的RAC的期中一台主机的网络心跳线插拨一次,因为走停机检修手续流程太长,想利用oracle的心跳可延迟时间内插拨完成,所以想搞清楚心跳的延时时间。
遇到这个问题,首先,我们要知道ORACLE是由OCSSD守护进程在负责心跳机制的,并且OCSSD维护的是网络和磁盘两种心跳同步机制。以及,不能对上述问题一概而论,因为在不同OS平台,不同cluster版本,采用的不同集群软件一环境下,默认的最大延时时间是不同的。并且,该时间是可以调整的,并不能确保他要操作的系统使用的就是默认值,在cluster上决定节点分离的参数主要有misscount(简称MC,定义网络心跳的最大缺失时间)、disktimeout(简称DTO,定义磁盘心跳的最大缺失时间)、reboottime(重启时间)三个参数所决定,三个参数的单位均为秒,并且具有关联性,期中参数值的修改会关联影响整体的节点分离重启时间。
对于因为网络心跳和磁盘心跳超时最经典的日志信息如下:
网络心跳:
CRS-1612:node XXdb1 (1) at 50% heartbeat fatal, eviction in 29.118 seconds |
--上面这条信息,看到缺失约30秒时,超时的比例是50%,就可以猜出,在这台机器上,网络心跳的最大缺失时间应该是60秒,该机器是linux平台oracle10gR2.
磁盘心跳:
[cssd(7361)]CRS-1613:No I/O has completed after 90% of the maximum interval. Voting file /dev/asm-ocr will be considered not functional in 19270 milliseconds |
对于网络心跳与磁盘心跳最大缺失时间的权威说明,在metalink上,有一篇文档 ID 294430.1 的文章,详细的说出了上面的问题。