MISSING HEARTBEAT本质是CSSD因voting disk IO阻塞主动停发心跳,非网络故障;典型表现为clssnmDiskPing中断先于clssnmvDHBValidateNCopy消失,伴随iostat await>50ms或%util>95%,且HAIP未启用或udev权限错误亦可触发。
ocssd.log里出现MISSING HEARTBEAT不是网络断了,而是CSSD主动停发
oracle rac节点被驱逐时日志里写“missing heartbeat”,很多人第一反应是私网不通。但实际绝大多数情况,cssd进程根本没尝试发包——它已因底层阻塞主动放弃发送。关键线索不在“没收到”,而在“没发出”。
典型触发路径是:voting disk IO卡住 → cssd调用IOCTL超时(受_asm_hbeatiowait控制)→ ASM标记该磁盘为MISSING → cssd判定无法维持法定票数,立即停止网络心跳发送,日志输出node X has a disk HB, but no network HB。
- 这个状态和物理网络是否连通无关,
ping通、ethtool显示链路UP都无效 - 查
/oracle/11.2.0/grid/log/<hostname>/cssd/ocssd.log</hostname>,重点搜clssnmvDHBValidateNCopy(网络心跳校验)和clssnmDiskPing(磁盘心跳探测),看哪个先中断 - 若
clssnmDiskPing报错或长时间无日志,而clssnmvDHBValidateNCopy突然消失,基本锁定存储IO问题
为什么MISSING HEARTBEAT常伴随CRS-1611却不是网络丢包
CRS-1611报错(“75%心跳在X秒内未收到”)看起来像网络丢包,但当它和MISSING HEARTBEAT同时密集出现,大概率是假象——对端节点根本没发包,所以“收不到”只是结果,不是原因。
此时ethtool -S eth2可能显示rx_missed_errors=0、rx_over_errors=0,ping -c 100 -i 0.1延迟也正常,但ocssd.log里就是反复报CRS-1611。这是因为本节点还在等心跳,而对端已因IO卡死停发。
- 别急着改
misscount或调大_gc_affinity_time,这些参数对IO阻塞无效 - 真正要查的是voting disk所在LUN的
iostat -x 1输出:await > 50ms或%util > 95%即为硬指标 - UDEV规则中ASM磁盘权限不对(如
MODE="0660"缺失)也会导致cssd读/dev/asm-vote01失败,同样触发停发
HAIP没起来会掩盖MISSING HEARTBEAT的真实来源
很多DBA看到LMON failed to connect to CSS就猛查物理网线和交换机,却漏掉一个关键检查点:HAIP子接口是否生成。HAIP(High Availability IP)是RAC私网通信的基础载体,它不依赖外部DHCP,由ohasd动态分配。
执行ifconfig -a | grep 169.254,若无eth1:1类条目,说明HAIP根本没起来。此时ocssd.log里即使有MISSING HEARTBEAT,也不是存储或网络问题,而是集群初始化阶段就失败了。
- HAIP失败常见于:
udev规则未生效、网卡名在重启后变更(如ens33变enp0s3)、GRID_HOME下crsconfig_params中私网配置与实际不符 - 查
$GRID_HOME/log/<hostname>/cssd/ocssd.log</hostname>开头部分,找clssscmain或clssgsnmevent相关错误,比查驱逐日志更早暴露HAIP问题 - 修复后必须验证:所有节点
ifconfig都能看到同一网段的169.254.x.x地址,且彼此ping通
诊断时最容易忽略的三个交叉证据
单看ocssd.log容易误判。真正定位MISSING HEARTBEAT根因,必须交叉比对三类日志,缺一不可:
-
dmesg | tail -50:找kernel: INFO: task cssd.bin blocked for more than 120 seconds这类IO卡死痕迹,或HBA timeout、resetting link等存储链路异常 -
/var/log/messages:搜索ocssd启动失败、udev权限拒绝、SELinux阻止访问/dev/asm*的记录 - 存储侧日志(如SAN交换机
show log、阵列控制器告警):FC重路由、双控切换、缓存满等事件时间点,必须和ocssd.log中第一个MISSING HEARTBEAT时间对齐
复杂点在于,这些日志分散在不同系统、不同时间精度(毫秒级ocssd.log vs 秒级messages),对齐需要手动换算;更麻烦的是,有些存储厂商日志只保留7天,等你想到要查时可能已被覆盖。











