时钟偏差 / NTP 问题
症状
集群节点之间存在时钟差异;复制/选举不一致,出现 'certificate not yet valid',日志中时间跳变。
1. 识别症状
时钟偏差很隐蔽:Mongo/Redis Sentinel 选举反复切换、TLS 'not yet valid/expired' 错误、Kerberos 错误、日志中时间戳倒退。在分布式系统中,它是大多数“无法解释”的怪异现象的根源。
2. 测量差异
在每个节点上比较时间源和偏移量:timedatectl、chronyc tracking(或 ntpq -p),并在各节点之间比较 date -u。它们相差多少 ms/s?
3. 修复 NTP/chrony
chronyd/ntpd 是否在运行,能否访问其时间源,是否已同步?启动服务并修复时间源;对于较大的偏移量,要谨慎地逐步调整(突然跳变可能触发某些数据库的问题)。
4. 验证受影响的组件
时钟修复后,检查:MongoDB 副本集选举是否稳定,Redis Sentinel/Cluster 是否健康,TLS 握手是否成功,复制延迟指标是否已恢复?
5. 永久措施
在所有节点上强制启用 NTP 并监控偏移量(告警:>100ms)。在虚拟机上,明确宿主机与客户机的时间同步设置;最好使用单一、可靠的时间源层级。