惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LangChain Blog
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net
WordPress大学
WordPress大学
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
The Register - Security
The Register - Security
C
Check Point Blog
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
P
Proofpoint News Feed
IT之家
IT之家
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
V2EX
MyScale Blog
MyScale Blog
Y
Y Combinator Blog
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
Microsoft Security Blog
Microsoft Security Blog
S
Schneier on Security
G
Google Developers Blog
Hugging Face - Blog
Hugging Face - Blog
F
Full Disclosure
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - Franky
T
The Exploit Database - CXSecurity.com
罗磊的独立博客
Spread Privacy
Spread Privacy
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
Latest news
Latest news
GbyAI
GbyAI
P
Privacy International News Feed
Last Week in AI
Last Week in AI
T
The Blog of Author Tim Ferriss
H
Hacker News: Front Page
K
Kaspersky official blog

蛋蛋之家

SUMIFS和LET函数——让 Excel 自己动起来 Halo 博客晚间卡顿排查记:从"玄学卡顿"到"真凶落网" 我用这个开源项目,把 AI 绘画提示词变成了"代码"——awesome-gpt-image-2 深度体验报告 群晖部署 LX Music Server:浏览器就是你的音乐播放器【详细版】 500道Word题库太痛苦?于是我写了个智能学习平台 别用一个人的奔跑,耗尽两个人的余生——《你凭什么认为我会一直喜欢你呢》 博客评论自动填充新方案:兼容 Vue/React 响应式绑定与跨架构填充逻辑 2026 生产级指南:Halo 2.x + PostgreSQL 自动化部署与性能优化手册 - 蛋蛋之家 从 Typecho 转向 Halo 2.x:全能型 Nginx 架构与 SEO 无损迁移指南 - 蛋蛋之家 Typecho 迁移 Halo 完整教程:数据库视图解决表前缀 + 自动提取封面图 + 去重检测 - 蛋蛋之家 我的 CodeBuddy 装备库:218个技能全公开 + 使用心得 - 蛋蛋之家 为博客添加自定义评论表情 - 蛋蛋之家 - 一枚蛋蛋的自留地 Comment2Bark:Typecho评论推送到Bark插件 又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题 - 蛋蛋之家 手把手修复RSS 403:从PHP警告到Cloudflare拦截的全链路排查 - 蛋蛋之家 - 一枚蛋蛋的自留地 网站被镜像怎么办?2026年反镜像攻防实战指南 - 蛋蛋之家 - 一枚蛋蛋的自留地 VLESS + Reality + Vision:2026 极致隐蔽节点搭建全解析 - 蛋蛋之家 给OpenList和Alist加上液态玻璃效果,颜值直接拉满! - 蛋蛋之家 - 一枚蛋蛋的自留地 网页截图瞬间“赛博飞升”?手把手教你根治 Windows HDR 截图发白 - 蛋蛋之家 群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略 一个简洁高效的SVG图标库 - 蛋蛋之家 - 一枚蛋蛋的自留地 告别重复劳动!一键填充评论的神奇书签脚本 - 蛋蛋之家 - 一枚蛋蛋的自留地 解锁思源笔记的隐藏力量:siyuan-patch 深度体验与技术实现 - 蛋蛋之家 - 一枚蛋蛋的自留地 Oracle Cloud 自救指南:旧手机丢失后如何绕过 MFA 重新登录【更新2026年最新政策】 - 蛋蛋之家 本站已加入“萌国ICP备案”联萌!😄 - 蛋蛋之家 - 一枚蛋蛋的自留地 Excel 月报自动化指南:告别重复劳动,让数据主动为你服务 - 蛋蛋之家 - 一枚蛋蛋的自留地 梦呓:为异地女友准备的2周年惊喜礼物 - 蛋蛋之家 - 一枚蛋蛋的自留地 Typecho 多吉云插件优化:更灵活的存储目录配置 - 蛋蛋之家 - 一枚蛋蛋的自留地 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能 华为鸿蒙6.0回退4.2记录 最近小公主情绪不佳 劳动节的家乡景色 烟台山公园一游 群晖搭建ChatGPT Web 推荐脚本:ChatGPT - 提示选择器 Activation Method for JetBrains Products (English version) JetBrains 系列产品激活方法 疫情三年后再进校园 修复searchEngineJump在谷歌搜索页面不生效问题 事情既然发生了,可以是遗憾,不要去后悔。 侄女的试唱会比赛 新一代图片编码格式测试 省科技馆之行 Typora Windows版破解补丁及主题推荐 在Typora中使用PicList上传图片 域名ICP备案之变更网站 Ubuntu 系统如何使用 root 用户登录 中国联通——让一切自由连不通 如何选购适合的口罩? 今天移动营业厅遇到一个小姐姐,真的好美 它不乐意 如何解决Typecho文章不是Markdown语法创建问题 探手抓住这一天的尾巴,为自己庆生 收到腾讯云自媒体分享计划2月份礼品 尝试百度Spider抓取异常问题 甲骨文DD重装系统及失联救砖教程 终于MrDoc升级v0.8.7成功了 Windows 端口查询及杀死进程 甲骨文实例开通与X-UI安装 国艺花鸟市场的悠闲 在思源笔记中使用群晖Synology C2对象存储服务 MrDoc升级v0.8.7失败 居居的手工作品 Linux系统时间同步命令小结 AList安装指南 宝塔面板降级 v7.7.0 及解除强制绑定手机、免费安装专业版插件的方法 修复群晖Synology Drive client右键菜单缺失问题 Windows11 展开折叠的右键菜单为传统模式 在 Windows 下批量将 Markdown 文档转为 Word 文档 Typecho的一些修改记录 Markdown语法——Mermaid 有两种新方案—CloudFlare官方免费CNAME接入教程 居居的新冠历程 群辉安装Transmission套件、增强汉化WebUI并备份做种列表 群晖 docker 部署思源笔记 Office for Mac 2019 License Installer 公众号通过api发送小程序消息 Windows 10下 iTunes 备份默认存储路径修改 Excel查找返回多个值,并将返回的值放在同一个单元格里面 七牛云测试域名失效后如何下载空间中的文件 入手三星860 evo 500g SSD固态硬盘 分享一套耐看的鼠标指针 如何重置OmniFocus数据库 Office for Mac 2016 License Installer Mac下配置终端+iTerm 2主题 如何制作苹果系统安装U盘 LNMP部署typecho,开启SSL、强制开启https Stylish样式如何设置为特定网址不生效? Typecho插件错误号:42S01的解决方法 电动车被偷了 热火 R150 上手开箱 UltraMon 3.3.0 汉化+注册机 如何用 MWeb 发布 Typecho 文章 测试 Mweb 发布到印象笔记功能 忘记了iPhone访问限制的密码该怎么办? 新玩具KAREE电子烟,先试试 Mac mini 2011 开启Handoff方法 见微知著 浅谈手游创新 PhoneClean Pro授权注册激活码
⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实
吴蛋蛋 · 2026-01-19 · via 蛋蛋之家

沙漏

"在数字世界里,时间可以同步,但你的头发可能永远不会再同步了"


之前有过一篇简要的文章,大家可以先看看


📅 开篇:一个关于"时间旅行"的真实故事

  最近,公司遇到一个案例:"数据库主从同步延迟 10 分钟"。在大家努力排查半小时后,我们发现了一个令人哭笑不得的事实——从库服务器的时间比主库快了整整 10 分钟。是的,这台服务器正在 "穿越" 到未来,而我们的数据还在过去徘徊。

graph LR A[主库] -->|数据同步| B[从库] C[现实时间] -->|时间流| A C -->|时间流| B B-.->|时间快10分钟| C style B fill:#ff9999

  这让我想一句经典名言:"服务器的时间可以不准,但你的排查思路必须准"。

  今天,我们就来聊聊甲骨文云(Oracle Cloud)Ubuntu 系统的时间同步——这个看似简单,却能让无数运维人深夜加班的 "小问题"。


🎯 一、为什么时间同步如此重要?(不只是"对个表"那么简单)

  在分布式系统中,时间同步不是 "可有可无" 的装饰品,而是基础设施的基石。想象一下:

  • 🔄 数据库主从复制:时间不同步可能导致数据冲突、复制中断
  • 📊 日志分析:跨服务器日志时间戳错乱,排查问题如同大海捞针
  • 🔐 证书验证:SSL/TLS 证书依赖时间,偏差过大直接导致服务不可用
  • 🚨 监控告警:告警时间错乱,你永远不知道问题到底发生在"昨天"还是"明天"

💡 真实案例:某电商公司 "双 11" 大促期间,由于负载均衡器时间偏差 5 分钟,导致大量用户会话提前失效,直接损失订单数百万元。

  用一句话总结:时间不同步,系统就变成了 "薛定谔的猫"——你永远不知道它现在处于什么状态


🧰 二、甲骨文 Ubuntu 的时间同步"工具箱"

2.1 默认配置:systemd-timesyncd(你的"贴心小助手")

  Ubuntu 16.04 之后,systemd-timesyncd 成为默认的时间同步服务。它就像那个 "默默无闻但很靠谱" 的同事——平时不声不响,但工作从不掉链子。

# 检查状态(看看这位同事今天状态如何)
timedatectl status

  输出示例:

Local time: 一 2026-01-19 10:30:00 CST
           Universal time: 一 2026-01-19 02:30:00 UTC
                 RTC time: 一 2026-01-19 02:30:00
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes     ← 关键指标:同步状态
              NTP service: active  ← 关键指标:服务状态
          RTC in local TZ: no

  如果看到 System clock synchronized: no ,别慌,先问问它:"兄弟,你还好吗?"

# 查看详细服务状态
systemctl status systemd-timesyncd

2.2 进阶选择:chrony(时间同步界的"瑞士军刀")

  如果你对时间精度有 "强迫症"(比如金融交易系统要求毫秒级同步),或者 systemd-timesyncd"罢工" 了,chrony 是你的不二之选。

graph TD A[选择时间同步方案] --> B{对精度要求高?} B -->|是| C[使用chrony] B -->|否| D[使用systemd-timesyncd] C --> E[安装并配置chrony] D --> F[检查systemd-timesyncd状态] E --> G[chronyc tracking检查同步] F --> H[timedatectl status检查同步]

  安装 chrony(给系统换个 "时间管家"):

sudo apt update && sudo apt install chrony

  配置 NTP 服务器(告诉 chrony 该找谁对表):

sudo nano /etc/chrony/chrony.conf

  在甲骨文云中,有个 "秘密武器"——实例元数据服务(169.254.169.254),这是云平台内部的高精度时间源:

# 添加这行到配置文件
server 169.254.169.254 iburst prefer

🎯 专业提示iburst 参数表示初始同步时会发送多个请求快速同步,prefer 表示优先使用这个服务器。

  重启并检查(看看新管家工作得怎么样):

sudo systemctl restart chrony
chronyc sources -v

  输出中的 ^* 标记表示当前同步的源。如果没有看到 ^*,嗯... 可能需要请这位 "管家" 喝杯咖啡(重启服务)或者换个 "管家"(检查配置)。


🔧 三、甲骨文云的特殊"彩蛋"与坑点

3.1 默认时间源:169.254.169.254(不是 IP,是"爱的号码牌")

  甲骨文云实例默认从 169.254.169.254 获取时间。这个 IP 是实例元数据服务的地址,不是公网 NTP 服务器。好处多多:

特性 优势 说明
⏱️ 延迟低 云内网络,延迟通常在毫秒级 公网 NTP 通常 10-50ms,这个<1ms
🎯 精度高 云平台统一时间源 避免网络抖动影响
💰 免费 不消耗公网流量 省钱就是硬道理
🔒 安全 内部网络,更安全 避免 NTP 放大攻击

  但要注意:这个服务只在云实例内部可用。如果你在本地环境测试,或者需要其他 NTP 服务器,需要手动配置。

3.2 防火墙:别让"门卫"拦住了时间

  时间同步使用 UDP 123 端口。如果发现时间不同步,先检查这三道 "门":

# 第一道门:系统防火墙
sudo ufw status
# 如果启用了ufw,确保有:
# 123/udp                     ALLOW       Anywhere

# 第二道门:安全组规则(甲骨文云控制台)
# 检查出站规则:是否允许UDP 123端口

# 第三道门:网络ACL
# 甲骨文云网络ACL:确保出站流量允许

  记住:时间同步是 "单向" 的——客户端主动请求服务器,所以只需要出站规则。别把防火墙配置成 "只进不出",那样时间就真的 "停滞" 了。


🚑 四、实战:当时间开始"穿越"时,如何优雅地修复

🆘 场景 1:时间偏差过大(超过 5 分钟)

  症状timedatectl status 显示 System clock synchronized: no

  修复步骤(急救三部曲):

flowchart TD A[时间不同步告警] --> B[检查timedatectl status] B --> C{System clock synchronized?} C -->|是| D[正常 ✅] C -->|否| E[第一步: 临时手动同步] E --> F[第二步: 检查服务状态和日志] F --> G{问题解决?} G -->|是| D G -->|否| H[第三步: 切换到chrony] H --> I[重新检查同步状态] I --> D

  1. 🚨 临时同步(先救急):
# 先停用自动同步
sudo timedatectl set-ntp false

# 手动同步(紧急止血)
sudo ntpdate -u pool.ntp.org

# 重新启用自动同步
sudo timedatectl set-ntp true
  1. 🔍 检查服务状态
# 查看服务状态
systemctl status systemd-timesyncd

# 查看最近日志(重点看错误信息)
journalctl -u systemd-timesyncd --since "5 minutes ago" | tail -20
  1. 🔄 如果持续不同步,考虑切换到 chrony:
# 优雅切换:先停用旧的,再启用新的
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd

sudo apt install chrony -y
sudo systemctl enable --now chrony

# 配置甲骨文云专用NTP
echo "server 169.254.169.254 iburst prefer" | sudo tee -a /etc/chrony/chrony.conf
sudo systemctl restart chrony

🕐 场景 2:时区设置错误(人在上海,心在 UTC)

  症状:时间显示正确,但时区是 UTC 或其他时区,日志时间戳让人困惑。

  修复

# 查看所有可用时区(找找你所在的城市)
timedatectl list-timezones | grep -i shanghai

# 设置时区(以上海为例)
sudo timedatectl set-timezone Asia/Shanghai

# 验证设置
date

💡 小贴士:生产环境建议统一使用 UTC 时区,避免时区转换带来的混乱。应用层根据业务需求显示本地时间。这样做的优点:

  1. 避免夏令时问题
  2. 日志时间统一
  3. 跨时区协作更方便

🧪 五、高级话题:chrony 的"黑科技"调优

  如果你对时间同步有极致追求,chrony 提供了更多 "调优" 选项:

5.1 调整同步策略("温柔"还是"强硬",你说了算)

  在 /etc/chrony/chrony.conf 中,可以配置不同的同步策略:

# 方案A:更激进的同步策略(适合网络不稳定的环境)
maxchange 1000 0  # 允许更大的时间跳变
makestep 1 3      # 如果偏差超过1秒,立即步进调整

# 方案B:更保守的策略(适合对时间敏感的应用)
maxpoll 12        # 最大轮询间隔(4096秒)
minpoll 6         # 最小轮询间隔(64秒)

  参数解释

  • maxchange:允许的最大时间调整量
  • makestep:时间偏差超过阈值时是否"跳变"
  • maxpoll/minpoll:轮询间隔,值越大同步频率越低

5.2 监控和诊断("把脉"时间同步)

# 查看详细的同步状态
chronyc tracking

  输出示例:

Reference ID    : C0A80101 (169.254.169.254)
Stratum         : 3
Ref time (UTC)  : Mon Jan 19 02:30:00 2026
System time     : 0.000123 seconds fast of NTP time
Last offset     : +0.000045 seconds
RMS offset      : 0.000078 seconds
Frequency       : 1.234 ppm fast
Residual freq   : +0.001 ppm
Skew            : 0.123 ppm
Root delay      : 0.012345 seconds
Root dispersion : 0.023456 seconds
Update interval : 64.2 seconds
Leap status     : Normal

📊 看懂关键指标

  • System time:正数表示系统时间快了,负数表示慢了
  • Last offset:最近一次同步的偏移量
  • Stratum:时间源层级,数字越小越接近源头
  • 理想状态:offset < 1ms,stratum ≤ 5

5.3 可视化监控(Grafana 看板)

  如果需要更直观的监控,可以配置 Prometheus+Grafana 监控时间偏移:

# node_exporter的textfile收集器配置
# 创建收集脚本
cat > /usr/local/bin/ntp_offset.sh << 'EOF'
#!/bin/bash
offset=$(chronyc tracking | grep 'System time' | awk '{print $4}')
echo "ntp_offset" $offset
EOF

# 添加到crontab每分钟执行
echo "* * * * * /usr/local/bin/ntp_offset.sh > /var/lib/node_exporter/ntp_offset.prom" | sudo tee -a /etc/crontab

Grafana 中的 NTP 监控看板示例


🎓 六、总结:时间同步的"哲学"与最佳实践

  时间同步看似简单,实则暗藏玄机。经过多年的 "血泪教训",我总结了几个关键点:

🏆 最佳实践清单

  1. ✅ 默认配置通常够用:甲骨文 Ubuntu 的 systemd-timesyncd + 169.254.169.254,99% 的场景无需折腾
  2. ✅ 问题排查有顺序:先检查服务状态 → 查看日志 → 检查网络 → 考虑切换服务
  3. ✅ 时区设置要统一:生产环境建议 UTC,避免"时区地狱"
  4. ✅ 监控不能少:配置监控告警,及时发现时间偏差
  5. ✅ 文档要记录:记录每台服务器的时间同步配置,便于排查

📈 性能指标参考

指标 优秀 良好 需要关注 紧急
时间偏移 <1ms 1-10ms 10-100ms >100ms
stratum 层级 1-2 3-4 5-6 >6
同步间隔 稳定 偶尔抖动 频繁重连 不同步

📚 运维箴言

"时间是相对的,但服务 SLA 是绝对的。别让你的服务器在' 时间旅行 '中迷失方向。"

"好的时间同步,用户无感知;坏的时间同步,运维跑断腿。"

"配置时间同步只需要 5 分钟,排查时间不同步可能需要 5 小时。你选哪个?"


📋 附录:运维老司机的"生存工具包"

常用命令速查表

# 基础检查
timedatectl status                    # 查看时间同步状态(首选)
timedatectl show-timesync            # 显示详细时间同步信息
timedatectl set-ntp true             # 启用自动时间同步

# systemd-timesyncd相关
systemctl status systemd-timesyncd    # 检查服务状态
journalctl -u systemd-timesyncd       # 查看服务日志
systemctl restart systemd-timesyncd  # 重启服务

# chrony相关(如使用)
chronyc tracking                     # 查看同步状态
chronyc sources -v                   # 查看NTP源详情
chronyc sourcestats                  # 查看统计信息
chronyc activity                     # 查看活动状态

# 网络诊断
ss -tuln | grep :123                 # 检查NTP端口监听
ping 169.254.169.254 -c 3            # 测试元数据服务连通性
sudo tcpdump -i any port 123 -c 10   # 抓包分析NTP流量

# 时区管理
timedatectl list-timezones           # 列出所有时区
timedatectl set-timezone Asia/Shanghai # 设置时区
cat /etc/timezone                    # 查看当前时区文件

配置文件位置速查

服务 主配置文件 日志位置 状态文件
systemd-timesyncd /etc/systemd/timesyncd.conf journalctl -u systemd-timesyncd
chrony /etc/chrony/chrony.conf /var/log/chrony/ /var/lib/chrony/
ntp (传统) /etc/ntp.conf /var/log/ntp.log /var/lib/ntp/

紧急恢复脚本

#!/bin/bash
# 文件名: fix_time_sync.sh
# 描述: 时间同步紧急恢复脚本
# 用法: sudo bash fix_time_sync.sh

set -e

echo "🕐 开始检查时间同步状态..."
echo "========================================"

# 检查当前时间
echo "当前系统时间: $(date)"
echo "UTC时间: $(date -u)"
timedatectl status

echo ""
echo "🔧 尝试修复..."
echo "========================================"

# 停止自动同步
sudo timedatectl set-ntp false
echo "✅ 已停止自动时间同步"

# 安装ntpdate(如未安装)
if ! command -v ntpdate &> /dev/null; then
    echo "📦 安装ntpdate..."
    sudo apt update && sudo apt install -y ntpdate
fi

# 手动同步
echo "⏰ 手动同步时间..."
sudo ntpdate -u pool.ntp.org

# 重新启用自动同步
echo "🔄 重新启用自动同步..."
sudo timedatectl set-ntp true

# 检查结果
echo ""
echo "✅ 修复完成,检查状态:"
sleep 2
timedatectl status

if timedatectl status | grep -q "System clock synchronized: yes"; then
    echo "🎉 时间同步已恢复!"
else
    echo "⚠️  时间同步仍存在问题,建议检查日志: journalctl -u systemd-timesyncd"
fi

  ‍

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻: