Oracle RAC 集群中某个节点突然重启,应用连接中断,随后在集群日志里看到 ocssd 反复报告 voting disk I/O timeout,这种场景并不少见。投票磁盘的每一次读写超时都可能被 CSS 判定为存储链路失效,从而触发节点隔离。要准确处理这个问题,需要先理解 CSS 的磁盘心跳机制与超时参数边界,再结合日志和存储指标逐层排查。

CSS 的投票盘心跳与超时判定机制
CSS(Cluster Synchronization Services)是 Oracle Clusterware 的核心进程,负责维护节点成员关系和脑裂防护。voting disk 是集群配置时指定的共享磁盘或 ASM 磁盘组,CSS 会以固定频率向其中写入节点心跳信息。当节点出现故障或网络隔离时,剩余节点会通过投票盘仲裁哪些节点可以继续存活。若某个节点迟迟无法完成投票盘 I/O,就相当于它无法表达自己的存活状态,CSS 会将其标记为不可用。disktimeout 参数正是用来控制等待投票盘 I/O 完成的最长时间。默认情况下该值为 200 秒,表示如果 200 秒内没有完成一次投票盘读写,CSS 就会记录超时并可能执行节点驱逐。
与 disktimeout 容易混淆的是 misscount。misscount 是节点间网络心跳的超时阈值,默认 30 秒,主要影响私网通信故障的检测速度。而 disktimeout 只针对投票盘 I/O,属于磁盘心跳范畴。两者共同决定节点故障的检测速度,但触发路径完全不同。实践中,网络抖动可能导致 misscount 超时,但 voting disk I/O timeout 一定与存储链路、多路径、磁盘性能或 HBA 卡异常有关。
可以通过以下命令快速查看当前投票盘状态和相关超时参数:
crsctl query css votedisk crsctl get css disktimeout crsctl get css misscount
正常情况下 votedisk 的每个盘都应显示为 ONLINE,disktimeout 返回 200,misscount 返回 30。如果 votedisk 状态为 OFFLINE 或 UNKNOWN,说明存储访问已经出现严重问题。
从 ocssd 日志与存储指标定位超时原因
当发生 voting disk I/O timeout 时,最直接的证据位于 $GRID_HOME/log/<hostname>/cssd/ocssd.log。登录问题节点,查看该日志,搜索 voting file 或 I/O timeout 关键字。通常可以看到类似 clssnmvDiskPing: voting file I/O timeout 的记录,同时伴随存储访问延迟上升。有时日志中会出现 vote disk access latency 或 disk ping 超时,这些信息能帮助判断是单次偶发还是持续失败。
典型的 ocssd 日志片段如下:
2025-06-18 10:24:33.123 : CSSD[12345]: clssnmvDiskPing: voting file I/O timeout 2025-06-18 10:24:35.456 : CSSD[12345]: clssnmvDiskKick: node 2 must be rebooted
日志中时间、进程 PID 在不同环境会有差异,但核心关键字 voting file I/O timeout 非常明确。一旦看到第二条 clssnmvDiskKick 信息,说明该节点已经被 CSS 判定为需要重启,此时应用连接必然中断。
存储层面的排查要并行展开。使用 iostat -x 1 观察投票盘所在设备的 await、svctm、util 等指标,如果 await 持续超过几十毫秒甚至几秒,说明存储响应已经异常。如果使用了多路径软件,需要检查 multipath -ll 的输出,确认所有路径是否健康,是否存在 failover 或 path down。同时查看系统日志中的 HBA 报错、链路光衰告警,以及 SAN 交换机端口错误计数。这些都可能直接导致投票盘 I/O 超时。
处理措施与参数调优边界
恢复集群可用性通常需要先恢复存储链路。如果是路径故障,切换或修复路径后,CSS 会自动重新访问投票盘。若节点已被驱逐,需要重启该节点并等待 CRS 自动加入集群。在确认存储恢复后,可以用 crsctl query css votedisk 再次检查投票盘状态,确保每个盘都显示 ONLINE。不要急于修改 CSS 超时参数,因为超时时间设置过大,会让集群在真正的存储故障面前反应迟钝,增加脑裂风险;设置过小,则可能因为短暂的性能抖动误驱逐节点。
如果确认环境中存在较慢但可恢复的存储延迟,可以根据 Oracle 官方建议小幅调整 disktimeout。修改命令如下:
crsctl set css disktimeout 300 crsctl get css disktimeout
注意:disktimeout 的单位是秒,默认 200。调整后需要重启对应节点的 CRS 才能完全生效。在任何生产环境调整前,应在测试环境模拟存储抖动,观察 CSS 日志和节点行为,避免因参数修改引入新的不稳定因素。
长期预防方面,建议对投票盘所在磁盘组设置独立的存储 QoS 或优先级,避免与大并发备份、批量查询争抢资源。同时监控磁盘响应时间和多路径状态,当延迟接近 disktimeout 的 50% 时触发告警。定期检查 HBA 固件和存储阵列微码版本,保持多路径配置与操作系统补丁一致。这些工作能显著减少 voting disk I/O timeout 的发生概率。
Oracle RACCSSvoting disk修改时间:2026-09-28 10:21:47