Oracle 19c RAC节点无法加入集群,90%以上因时间不同步:节点间date -u +%s.%N差值超500ms或CTSS处于observer模式且NTP未真正生效;必须验证chronyc tracking Offset±5ms内、sources有且仅一个^*主源、UDP 123端口双向连通,并禁用宿主机时间同步。
oracle 19c rac节点无法加入集群,90%以上是时间不同步直接导致的——不是“偶尔不准”,而是节点间date -u +%s.%n输出差值超过500ms,或ctss退为observer mode后ntp未真正生效。
runcluvfy.sh报PRVF-7532:节点时间差超500ms
这个错误不是提示“NTP没开”,而是runcluvfy.sh实测各节点系统时间戳差值 > 500ms 后强制拒绝。哪怕chronyd正在运行、systemctl status chronyd显示active,只要chronyc tracking里Offset绝对值 > 0.5,或者date -u +%s.%N在所有节点跑三次取最大差值 > 0.5,就必然触发。
常见误操作:
- 只改了
/etc/chrony.conf但漏掉某个节点,或改完没systemctl restart chronyd - 配置里留着
pool行,实际连的是不可靠公网NTP源,同步延迟高、抖动大 - 没加
makestep 1.0 3,节点重启后大偏移只能slew(拖动),校正慢到安装脚本等不及 - 没配
rtcsync,服务器重启后硬件时钟没更新,系统时间倒退几秒
ctssd处于observer mode:NTP和CTSS冲突或配置失效
crsctl check ctss返回CTSS is in observer mode,说明Oracle的ctssd主动让权给了系统级NTP服务——但这不等于时间就准了。它只是“信任”你配的NTP,而一旦NTP本身没同步成功,各节点就会各自漂移。
必须验证的三件事:
-
ntpq -p或chronyc sources -v中,必须有且仅有一个source状态为^*(主源),且MS列为u(已同步) -
chronyc tracking中Offset长期稳定在±5ms内(CTSS observer模式下Oracle要求更严) - UDP 123端口在所有节点间双向可达:
nc -uz <ntp-server-ip> 123</ntp-server-ip>,防火墙或安全组常静默丢包
若确认NTP服务运行但CTSS仍为observer,检查是否启用了ntpd而非chronyd——Oracle 19c官方明确推荐chronyd,ntpd需额外加-x参数并配tinker stepout 0,否则CTSS持续fallback。
chronyd配置必须满足RAC最小安全集
默认/etc/chrony.conf几乎肯定不满足RAC要求。以下配置项必须全部存在、且所有节点严格一致:
-
server 192.168.10.1 iburst minpoll 4 maxpoll 6:禁用pool,只写可信内网NTP服务器;iburst加速收敛,minpoll 4 maxpoll 6缩短同步间隔至16–64秒 -
makestep 1.0 3:允许开机前3秒内阶跃校正最大1秒,解决冷启动大偏移 -
rtcsync:确保系统时间定期写入RTC,防重启倒退 -
driftfile /var/lib/chrony/drift和logdir /var/log/chrony:必须存在且chronyd有写权限
改完后不能只看systemctl status,必须立刻执行:
chronyc tracking chronyc sources -v date -u +%s.%N # 所有节点同时执行,算最大差值
虚拟机或云环境要额外关掉宿主机时间同步
VMware、KVM、阿里云ECS等环境,宿主机常默认开启时间同步(如VMware Tools里的syncTimeWithHost),会与guest OS的chronyd争抢时间控制权,造成时钟震荡、跳变甚至CTSS反复切换active/observer。
必须操作:
- VMware:关掉VM设置里
Options → VMware Tools → Sync time with host - KVM:
virsh edit <vm-name>中删掉<clock ...>块或设clock offset='none' - 云主机:查厂商文档禁用“主机时间同步”功能,再单独在OS层配
chronyd
最后提醒:别信ntpdate -u临时硬调——它会触发大步跳变,直接踢出CTSS;也别依赖hwclock -w手动写RTC,rtcsync才是chronyd自动保活的正确方式。时间同步不是“配完就完”,而是每次节点变更、网络调整、重启后都得重验date -u +%s.%N差值。


















