根本原因是ntpd启动缺-x参数导致时钟跳变,触发CTSS退为observer模式;应先执行crsctl check ctss确认是否显示“CTSS is in observer mode”,再检查/etc/sysconfig/ntpd中OPTIONS="-x"及ntp.conf中tinker stepout 0和disable kernel是否齐备。
oracle 11g rac集群时间同步报错,根本原因不是ntp没启动,而是ntpd启动时缺了-x参数——它导致时钟跳变,触发ctss退为observer模式,进而引发ora-00600 [kgxgncv1]、实例拒绝启动等连锁故障。
crsctl check ctss 显示 observer mode 就是核心信号
这是最该先看的诊断动作,不是看date差几秒,而是确认同步机制是否已失效:
- 执行
crsctl check ctss,返回CTSS is in observer mode→ CTSS已放弃控制权,正“旁观”NTP工作 - 同时在所有节点跑
date对比,差值超±500ms属高风险;超1s极可能触发ORA-00600: internal error code, arguments: [kgxgncv1] - 查日志:
tail -20 $GRID_HOME/log/`hostname`/ctssd/ctssd.log,出现Switching to observer mode或Failed to communicate with reference node就坐实问题
ntpdate强制校时和没加-x的ntpd都是“时间炸弹”
手动执行ntpdate或让ntpd不带-x运行,都会造成系统时钟大步跳变(jump),而RAC对时间跳变极度敏感:
-
ntpdate是单次强制修正,会直接踢出CTSS,且不可用于生产环境(Oracle明确禁止) - 默认
ntpd启动不带-x,遇到较大offset时会用step方式跳变,而非slewing(渐进拉齐),这等于向集群宣告“节点疑似挂起”,触发fencing或实例重启 - 即使所有节点都开了
ntpd,只要有一个没配-x,CTSS就会全局fallback到observer模式
/etc/sysconfig/ntpd 中必须显式写入 OPTIONS="-x"
这个配置项不是可选优化,而是Oracle要求的硬性条件。很多修复失败,是因为只改了/etc/ntp.conf,却漏掉了这里:
- 检查:
cat /etc/sysconfig/ntpd,确认OPTIONS字段含-x,例如:OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid" - 若无
-x,编辑该文件补上,注意不要保留-g(它允许首次大步校准,同样危险) - 改完必须重启服务:
systemctl restart ntpd或service ntpd restart - 验证:
ntpq -p看offset是否稳定在±5ms内;ps -ef | grep ntpd确认进程参数里真有-x
共存NTP与CTSS的三个死条件必须全满足
如果合规要求必须对接外部NTP服务器(如金融行业),CTSS可以保持observer模式,但NTP配置必须同时满足:
-
/etc/ntp.conf中必须有tinker stepout 0和disable kernel两行 -
/etc/sysconfig/ntpd中OPTIONS必须含-x,且不能含-g - 绝对禁用
ntpdate、hwclock --systohc等任何手动强制同步命令——它们会绕过slewing逻辑,直接跳变
哪怕只漏一条,CTSS就会持续处于observer状态,而一旦NTP上游抖动或中断,节点间时间差就会指数级扩大。真正难的不是配对,是确保所有节点、所有配置项、所有运行时参数长期一致——差一个字符,就等于没配。











