雨云VPS时间老不准?用chrony把时钟钉死

用 chrony 把雨云VPS的时钟钉死,顺手解决证书、日志、数据库的一堆玄学故障
发布于 更新于
12

为什么雨云的机器时钟会自己跑偏

直接说结论:虚拟化环境下的时钟几乎都会漂,雨云的 KVM 实例也不例外。宿主把 CPU 时间片切给很多台虚拟机,guest 靠”数 tick”估时间,一旦宿主负载高,或者发生了热迁移、休眠恢复,guest 的时钟就会落后或超前。我手上几台香港、美国的雨云节点,刚重装完系统跑一两天,timedatectl 看就能差出几秒甚至十几秒。很多 VPS测评 只看 CPU 和带宽,这种底层时钟稳定性反而没人提,但它其实拖着后面一堆事。

时钟不准到底会捅什么篓子

这不是”显示不好看”的小事:

  • TLS 证书校验失败:证书本身有时间窗,机器时间慢了,Nginx 握手时可能直接报证书还没生效或已过期。那篇 HTTPS 证书自动续期里讲的 acme.sh,如果系统时间错了,续期请求也会被 CA 拒掉。
  • 日志对不上:多台机器收日志做集中排查时,时间不准就没法按真实先后排序,排障直接瞎。
  • 数据库主从乱序:MySQL、PostgreSQL 的复制依赖事务时间戳,时钟跳变可能让从库应用顺序错乱。
  • 二次验证失效:TOTP 动态码是按 30 秒窗口算的,差出 30 秒以上 Google Authenticator 就死活不对。
  • cron 跑错点:定时任务按本地时间触发,时间漂了,备份可能在业务高峰而不是凌晨跑。WordPress 的定时发布、登录限流也吃系统时间,漂了会诡异地发不出定时文章。

先确认你的机器到底在不在漂

别凭感觉。两条命令:

timedatectl status

System clock synchronizedyes 还是 no,以及 RTC 那一行。

chronyc tracking

Last offsetRMS offset 就是当前偏移量,单位秒。超过 0.1 秒我就认为该处理了;超过 1 秒基本已经在中招边缘。雨云默认有的镜像带 systemd-timesyncd,有的啥都没装,表现完全看运气,所以我习惯手动换成 chrony。

装 chrony 并把时钟钉死

Debian/Ubuntu:

apt update && apt install -y chrony

CentOS/Rocky:

dnf install -y chrony

配置文件一般在 /etc/chrony/chrony.conf,把 pool 行换成靠谱的公网源,加 iburst 让启动后快速对齐:

pool cn.pool.ntp.org iburst
pool time.google.com iburst

国内机房节点优先用 cn.pool.ntp.orgntp.tuna.tsinghua.edu.cn 这类境内源,延迟低也更稳;香港、美国这些免备案节点用 Google 或 Cloudflare 的源(time.cloudflare.com)连通性更好。改完重启:

systemctl enable --now chrony
chronyc tracking

等一两分钟,看 Last offset 收敛到接近 0。想让漂移彻底”钉死”而不是来回晃,可以加一行 makestep 1.0 3,意思是启动后前 3 次更新里允许一次性校正最大 1 秒,对付刚重装完差出十几秒的机器很管用。

它和你已经跑的服务怎么衔接

时钟准了,之前那些玄学问题会一起消失:

  • 集中日志:rsyslog 收上来的多台机器日志终于能按真实时间排,排障不再各说各话(详见那篇多台雨云VPS日志收拢)。
  • HTTPS 证书:acme.sh 续期不再因为时间窗错乱被拒(证书自动续期那篇的前提就是系统时间得对)。
  • 数据库:MySQL、PostgreSQL 的主从复制、备份时间点都不再错位(MySQL 安装备份调优那篇里的定时 dump 也依赖准确时钟)。
  • 宝塔 / 1Panel 面板:面板里显示的”系统时间”如果跟实际差很多,往往是底层时钟在漂,钉死后面板时间自动就对了,不用在面板里手动改。

几点实际的提醒

  • 别拿 VPS 当 NTP 服务器对外提供服务,chrony 默认只允许自己同步、不开放给外网,防火墙也别把 123/udp 放开。
  • 香港VPS、美国VPS 这些免备案VPS 节点虽然价格便宜、性价比高,但跨时区机器的时区要显式设对:timedatectl set-timezone Asia/Shanghai,否则日志和 cron 会按 UTC 跑,你本地看一脸懵。
  • 如果机器长期休眠或关机(比如按需起的测试机),重启后第一次同步偏移可能很大,靠 makestep 兜底即可,别手动物理改时间,容易把正在跑的数据库搞崩。

最后,如果你还没在雨云上开机器,香港VPS、美国VPS 这类免备案VPS 节点带宽稳,跑 WordPress、数据库和建站都合适,用雨云优惠码 admin01 五折新开一台小规格先把这套时钟校准跑通,比事后排障省事得多。

使用雨云云服务器及本文所述的时间同步配置,请遵守《网络安全法》《个人信息保护法》《数据安全法》等相关规定,仅对你拥有合法使用权的服务器进行运维操作,不将相关能力用于突破国家网络管控或任何违法违规用途。

常见问题(FAQ)

雨云VPS默认用的是 chrony 还是 systemd-timesyncd?
看镜像。雨云部分系统镜像自带 systemd-timesyncd,部分啥都没装,表现不稳定。我习惯手动装 chrony 统一接管,因为它对虚拟化环境的时钟漂移校正更主动,还带 tracking 命令能实时看偏移量。
时钟偏移多少算危险,需要马上处理?
用 chronyc tracking 看 Last offset,超过 0.1 秒就该处理,超过 1 秒基本已经会影响证书校验、TOTP 验证和数据库复制。虚拟化 VPS 漂到十几秒都很常见,别等出了玄学故障才回头查时间。
chrony 和 ntpd 有什么区别,家用 VPS 该装哪个?
chrony 专为不稳定网络和高漂移环境(比如虚拟机、笔记本)设计,启动快、校正狠;ntpd 更传统、收敛慢。普通雨云 VPS 直接上 chrony 就行,不需要 ntpd 那套复杂配置。
宝塔或 1Panel 面板显示的时间和实际不一致,是哪里的问题?
基本都是底层系统时钟在漂,面板只是如实读系统时间。在系统层用 chrony 把时钟钉死后,面板里的时间会自动跟着对,不用去面板里手动改。改面板时间只是治标。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600