Oracle RAC集群ctssd退为observer mode后时间差持续扩大,根本原因是CTSS放弃控制权而外部NTP/chronyd配置不一致或失效,导致各节点时间漂移速率不同;超过±500ms即高风险,超1秒可能触发实例拒绝启动或OCR异常。
ctssd退为observer mode后时间差持续扩大
oracle rac不直接因“ntp没跑”驱逐节点,而是因为ctssd服务降级后失去集群内自适应同步能力。一旦crsctl check ctss返回ctss is in observer mode,说明ctss已放弃控制权,转而依赖外部时间服务——但若该服务配置不一致、源不可达或未校准硬件时钟,各节点时间就会以不同速率漂移。超过±500ms即触发高风险告警,超1秒可能直接导致实例拒绝启动或ocr写入异常。
cssd心跳超时判定失联的底层机制
CSSD进程每秒向私网多播地址224.0.0.251:42422发送含时间戳的心跳包,同时监听其他节点响应。当连续misscount次(默认30次)未收到任一节点应答,就认为该路径不可达。而时间不同步会让两个关键判断失效:
• 本地date与心跳包里的时间戳比对失败,误判为“包延迟过大”而非“对方卡住”
• voting disk的IO超时阈值(disktimeout)和misscount存在耦合关系,时间偏差会导致磁盘心跳实际超时却被误认为网络问题
最终CSSD综合判定“关键路径持续不可达”,发起驱逐仲裁。
为什么单纯停掉ntpd/chronyd还不够
Oracle的判断逻辑非常死板:
• /etc/ntp.conf或/etc/chrony.conf文件存在 → 视为NTP启用 → ctssd必须退为observer
• 即使服务已systemctl stop ntpd,只要配置文件没删,状态就不会恢复active
• mv /etc/ntp.conf /etc/ntp.conf.bak仍会被识别为“存在”,必须rm -f /etc/ntp.conf
• 虚拟机环境还需检查vmware-tools或chrony是否在后台偷偷同步时间
残留PID文件(如/var/run/ntpd.pid)也可能干扰ctssd重启后的端口绑定。
修复后offset波动超过±10ms意味着什么
即使crsctl check ctss显示CTSS is in Active mode,也不能算修复完成:
• Offset (in msec): 7是理想值,但若watch -n 10 'crsctl check ctss'中数值频繁跳变(如2→15→3→22),说明参考节点选举不稳定或GIPC通信有丢包
• 波动大常源于私网bond接口CRC错误、交换机IGMP Snooping未开启、或节点间MTU不一致
• 若某节点offset长期偏高(如稳定在+80ms),需单独检查该节点的$GRID_HOME/log/`hostname`/ctssd/ctssd.log,搜索Failed to communicate with reference node类报错——这往往指向GIPC层通信故障,而非时间本身。


















