oracle rac时间偏差超1秒即危险,≥3秒触发crs-1604警告,≥10秒强制节点驱逐;ntpdate硬跳变致命,必须用ntpd -x渐进校正;ctss与ntp不可共存,/etc/ntp.conf存在即致ctss降为observer模式。
因为时间不一致会直接触发节点驱逐(node eviction)或集群重启,不是“可能出问题”,而是“一定会出故障”。
Oracle RAC 时间偏差超过 1 秒就危险
Clusterware 和 ASM 的心跳、缓存融合(Cache Fusion)、SCN 推进都依赖精确时间戳。实测表明:
- 当两个节点时间差 > 1 秒,
crsctl check ctss就会报告非零Offset (in msec) - 差值 ≥ 3 秒时,
ocssd.bin日志开始频繁写入CRS-1604: Node number string is not consistent with the time on node - 差值 ≥ 10 秒,极大概率触发自动节点驱逐 —— 不是警告,是强制踢出节点
ntpdate 一次性跳变比慢 5 分钟更致命
很多人以为“只要最终对齐就行”,但 Oracle 对“怎么对齐”极其敏感:
-
ntpdate是硬跳变:比如把系统时间从2026-06-23 19:50直接设为2026-06-23 19:45,Clusterware 会认为该节点“挂起”并 fencing - 正确做法必须用
ntpd -x:它只通过微调系统时钟频率(slewing)来渐进校正,避免任何跳跃 -
-x模式下,600 秒以内偏差可安全 slewing;超过 600 秒且没加-g,ntpd直接退出,同步失败
CTSS 和 NTP 不能共存,选错模式等于没配
Oracle 11.2+ 默认同时启动 CTSS 和 NTP,但实际只生效一个:
- 只要
/etc/ntp.conf存在或ntpd进程运行,CTSS 自动降级为Observer mode—— 它只记录日志,不干预时间 - 想用 CTSS 主动同步,必须彻底停掉
ntpd:systemctl stop ntpd && systemctl disable ntpd,再删掉/etc/ntp.conf和/var/run/ntpd.pid - 验证是否生效,只看
crsctl check ctss输出是否含Active mode,而不是看进程是否存在
最常被忽略的点:硬件时钟(RTC)和系统时钟不同步也会引发连锁反应。哪怕 ntpq -p 显示同步成功,如果 hwclock --show 和 date 差几秒,重启后时间仍会错乱 —— 所以 SYNC_HWCLOCK=yes 必须配置,且每次手动调时后要执行 hwclock --systohc。











