disktimeout不可随意调整,盲目增大将掩盖真实存储延迟问题并引发节点驱逐或集群分裂;仅在可控、可预期的短暂i/o挂起且无法从底层解决时,才可微调,并须同步调整misscount与reboottime。

disktimeout不是随便能调的参数
直接改 disktimeout 极大概率导致节点驱逐甚至集群分裂,这不是配置优化,是主动触发CSS仲裁失败。它和 misscount 不同:后者控制网络心跳容忍窗口,而 disktimeout 是磁盘心跳的I/O超时阈值——一旦投票盘(Voting Disk)读写响应超过这个秒数,CSSD会认为该节点已失去存储可达性,立刻启动驱逐流程。
真实场景中,disktimeout 异常升高往往意味着底层存储延迟恶化(如VMware未启用 disk.EnableUUID=true、多路径错乱、LUN队列深度过载),而不是参数本身需要调大。盲目加到60秒,等于把“心跳停跳”判定从“疑似故障”降级为“等死”,反而掩盖真实IO问题。
改之前必须确认三件事
没做完这三项检查就执行 crsctl set css disktimeout,等于在没查清病因时给病人加大剂量止痛药:
- OCR和Voting Disk所在ASM磁盘组的I/O延迟是否稳定?用
asmcmd afd_lsdsk -v和iostat -x 1 5对比各节点的await、svctm、%util - 所有节点是否使用完全相同的存储路径识别机制?比如在VMware中,
/dev/sdc在节点1和节点2上是否真的指向同一块RDM LUN(需验证/usr/lib/udev/scsi_id -g -u -d /dev/sdc输出一致) - 是否存在跨节点时间漂移?用
ntpq -p检查所有节点的offset是否均小于50ms;若任一节点显示time drift detected,先解决NTP同步,再碰disktimeout
真正需要调整disktimeout的唯一场景
只有当你的存储链路存在**可控、可预期、短暂但必然发生**的I/O挂起,且无法从硬件或虚拟化层消除时,才考虑微调。典型例子:
- 使用旧款SAN交换机,固件bug导致每24小时出现一次3~4秒的端口冻结
- VMware中启用了Storage vMotion,且迁移期间投票盘LUN被临时断开(注意:这本身就是错误配置,应禁用)
- 物理服务器BIOS中启用了Legacy USB Support,导致USB控制器偶尔抢占SCSI中断(极少见,但有客户实锤)
此时调整逻辑是:取实测最大单次I/O hang时长 + 1秒,且必须同时调高 misscount 至 ≥ disktimeout × 1.5,否则网络心跳会先于磁盘心跳超时,造成误驱逐。例如实测hang为3.2秒,则设 disktimeout=5,misscount=8。
操作步骤与致命细节
即使满足上述条件,也必须严格按顺序执行,漏掉任何一步都可能引发静默脑裂:
- 停掉除一个节点外的所有CRS:
crsctl stop crs -f(所有其他节点) - 在唯一运行节点上执行:
crsctl set css disktimeout 5(示例值) - 立即验证:
crsctl get css disktimeout确认返回5,且ocssd.log中无ERROR级别报错 - 重启该节点(关键!不重启,新值不生效)
- 逐个启动其余节点,**每启一个,等30秒再启下一个**,观察各节点
crsctl check cluster -all是否全部显示CRS-4537: Cluster Ready Services is online
最容易被忽略的是:修改后必须检查 reboottime 参数是否仍匹配。默认3秒,但如果 disktimeout 调到10秒以上,而节点重启耗时实际达8秒(如带大量ASM磁盘扫描),则CSS会在节点还没起来时就判定“evict后未按时重启”,触发二次驱逐。此时需同步执行 crsctl set css reboottime 12。











