心跳(HeartBeat)最主要的目的就是为了检测群集中的节点状态,如果节点状态检测异常,则认为节点存在故障,需要对该节点做出相应的处理。在Oracle RAC中有三种心跳机制:

  • 网络心跳(Network Hearbeat):OCSSD进程会每秒向集群其它节点发送一个TCP网络心跳包,如果一个节点在15秒内都接收不到来自其它节点的心跳包,会在OCSSD日志中记录WARNING,直到30秒都无法接收,则认为心跳丢失,该节点会被踢出群集。可以通过crsctl get css misscount查看网络心跳
    [root@t-luhxdb1-v-szzb ~]# crsctl get css misscount;
    CRS-4678: Successful get misscount 30 for Cluster Synchronization Services.
  • 磁盘心跳(Disk HeartBeat):群集中每个节点的OCSSD进程会每秒在voting disk上注册本节点的磁盘心跳信息,同时也会监控群集中其它节点OCSSD进程维护的磁盘心跳。当群集发生脑裂,通过voting disk仲裁哪个节点获得控制权,其它的节点被剔除,之后根据reboottime参数的设置重启失败的节点。可以通过crsctl get css disktimeout查看磁盘心跳
    [root@t-luhxdb1-v-szzb ~]# crsctl get css disktimeout;
    CRS-4678: Successful get disktimeout 200 for Cluster Synchronization Services.

    [root@t-luhxdb1-v-szzb ~]# crsctl get css reboottime
    CRS-4678: Successful get reboottime 3 for Cluster Synchronization Services
  • 本地心跳(Local HeartBeat):Oracle 11GR2中引入了本地心跳,本地心跳最主要的作用是监控OCSSD进程以及本地节点的状态。在10G中是通过oclsomon和oprocd实现,守护进程oclsomon.bin监控ocssd.bin进程的状态,oprocd.bin进程监控本节点状态。从11GR2开始引入了cssdagent和cssdmonitor,它们的功能就是监控本地节点的ocssd.bin进程状态和本地节点的状态。