同步时间,为什么我选 chrony 而不是 NTP ?

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 同步时间,为什么我选 chrony 而不是 NTP ?

初识 chrony

chrony 是网络时间协议(Network Time Protocol )的通用实现

它不但可以提供保持系统时间与 NTP 时钟服务器同步的服务,还能作为 NTP 服务器对其他服务器提供时间同步服务

chrony 特点:

  1. 任何情况下都能稳定良好运行(例如不稳定的网络中、不稳定的系统中或者虚拟机环境中)
  2. 精度高(精度通常以几十微秒为单位)
  3. 开源(白嫖多香

官方文档:chrony – Introduction

chronyc & chronyd

chrony 有两个核心组件:

  • chronyd

    • 守护进程,主要用于调整内核中运行的系统时间和时间服务器同步
  • chronyc

    • 命令行界面程序,让用户能够对 chronyd 的性能进行监控以及改变各种参数

安装

从 Centos 7.x 开始的最小发行版中都已经预装并开启了 Chrony,如果你的系统没有安装,可以用下面命令进行安装

#以 CentOS 为例
yum -y install chrony

安装完毕后,使用下面命令来查看运行状态

systemctl status chronyd.service 

设置开机自启动

systemctl enable chronyd.service 

chronyc 命令

#语法
chronyc [OPTION]… [COMMAND]…
  • 常见 OPTION
参数· 含义
-4 / -6 主机名将仅解析为IPv4地址 / 主机名将仅解析为IPv6地址
-n 不进行 dns 解析
-c 以 csv 格式显示(逗号为分隔符),时间以距离纪元(epoch)以来的秒数显示出来
-h 指定 chronyc 连接的主机(主机名、ip地址或本地套接字)<br/>默认值是/var/run/chrony/chronyd.sock、127.0.0.1、::1
-p 允许用户指定 chronyd 用于监视的 UDP 端口号<br/>默认端口号是323
  • 常见 COMMAND

显示系统时钟性能的参数

[root@root ~]# chronyc tracking

Reference ID    : CA760151 (time.neu.edu.cn)
Stratum         : 2
Ref time (UTC)  : Mon Mar 13 01:48:07 2023
System time     : 0.000041359 seconds fast of NTP time
Last offset     : +0.000075069 seconds
RMS offset      : 0.000059860 seconds
Frequency       : 2.723 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.016 ppm
Root delay      : 0.048390869 seconds
Root dispersion : 0.001822128 seconds
Update interval : 1028.3 seconds
Leap status     : Normal

显示时间同步源

[root@root ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp1.ams1.nl.leaseweb.net     2  10   367   706    +12ms[  +12ms] +/-  215ms
^- ntp.wdc2.us.leaseweb.net      2  10   367   235   +689us[ +689us] +/-  235ms
^+ 119.28.206.193                2  10   377   684   -435us[ -435us] +/-   25ms
^* time.neu.edu.cn               1  10   377   866    +15ms[  +15ms] +/-   42ms
#输出详细信息
[root@root ~]# chronyc sources -v
210 Number of sources = 4

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- ntp1.ams1.nl.leaseweb.net     2  10   367   828    +12ms[  +12ms] +/-  215ms
^- ntp.wdc2.us.leaseweb.net      2  10   367   357   +689us[ +689us] +/-  235ms
^+ 119.28.206.193                2  10   377   806   -435us[ -435us] +/-   25ms
^* time.neu.edu.cn               1  10   377   988    +15ms[  +15ms] +/-   42ms

查看当前系统的时间同步源状态信息(例如漂移率和偏移估算过程)

# -v 详细输出
[root@root ~]# chronyc sourcestats
210 Number of sources = 4
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
ntp1.ams1.nl.leaseweb.net  64  38   21h     -0.190      0.183  +8465us  9119us
ntp.wdc2.us.leaseweb.net   64  29   20h     -0.046      0.070   +552us  3320us
119.28.206.193             64  39   19h     +0.003      0.016  -1147us   734us
time.neu.edu.cn            64  36   18h     -0.006      0.040  +1203us  1699us

查看时间同步源的状态

[root@minion2 ~]# chronyc activity
200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

chrony 配置

配置文件路径:/etc/chrony.conf

一些常用的配置项

server

假设你的 NTP 服务器名字为:haha.example.net、hehe.example.net

那么在配置文件里内容如下:

server haha.example.net iburst prefer
server hehe.example.net iburst

iburst:在头四次 NTP 请求以 2s 或者更短的间隔;minpoll x 指定最小的轮询间隔,默认值是 6,代表 64s;maxpoll x 默认值是 9,代表 512s

prefer,表示优先级最高,客户端会优先与添加了 prefer 字段的 时间同步源进行时间同步

driftfile

driftfile /var/lib/chrony/drift

chrony 会根据实际时间来修正系统时间,而这个修正的值(即系统时钟相对于实时时间获得或失去时间的速率)会存放在一个指定文件里面,由 driftfile指定文件路径

#默认路径为:/var/lib/chrony/drift
[root@root ~]# cat /var/lib/chrony/drift
           -2.722292             0.016005

rtcsync

rtcsync 表示启动内核实时时钟同步(RTC)

在 Linux 系统中,内核每 11 分钟执行一次 RTC 拷贝来同步时钟

makestep

通常情况下,chrony 会通过减缓或加快时钟来逐渐调整系统时间

但是 chrony 首次启动的时候,发现系统时间与实际时间偏差很大,以至于需要花费很长时间来纠正系统时间

makestep 字段可以使 chrony 跳跃式调整系统时间

makestep 1.0 3

表示在头三次校正时间的时候,如果发现时间偏差超过 1.0 s,就跳跃式校正,而非逐渐式

logdir

指定 chrony 日志文件路径

logdir /var/log/chrony

Why chrony and not NTP

我们知道,chrony 和 ntpd 都是网络时间协议的两种不同实现方式

在简单介绍完 chrony 的相关内容之后,我们回到文章题目:为什么用 chrony 而不是 NTP?

首先看下它们时间同步的准确性

以下是 chrony 官网中 chronyd 和 ntpd 的时间同步准确性详细对比

其他维度对比详情请到官网上查看
image-20230313131011647.png
image-20230313131033945.png
image-20230313131042037.png
可以看到,chrony 具有更精确的时间准确性,精度更高

除此之外,我们来看下其他比较
image-20230313133116402.png
image-20230313134443120.png
可以看到,chrony 可以随机间歇性校准时间,而 NTP 需要定期轮询才能正常工作

而且 由于有更小的时间轮询间隔,chrony 可以更快的同步时钟

总结:

  1. chrony 具有更精确的时间准确性,精度更高,同步时间的速度更快,从而最大程度的减少时间和频率误差
  2. chrony 可以随机间歇性校准时间,而 NTP 需要定期轮询才能正常工作,因此 chrony 具备间歇性网络连接的系统仍然可以快速同步时钟
  3. chrony 对时间的校准是连续的,通过从而最大程度的减少时间和频率误差;而 ntp 需要搭配 crontab 来定时调整时间,会出现间断
  4. chrony 能够快速适应时钟速率的突然变化(例如,晶体振荡器的温度变化)。而 NTP可能需要很长时间才能再次稳定下来
  5. chrony 能够在网络拥堵的情况很好地执行
  6. chrony 占更小的内存,更加的轻量,而且只在必要时唤醒 CPU
相关文章
|
弹性计算 Windows
同步服务器时间NTP
在秒杀、抢券等高并发的活动中,一点点的时间延迟,也会让自己后悔莫及……
1756 0
同步服务器时间NTP
|
网络协议 Linux 数据安全/隐私保护
|
3月前
|
网络安全
构建 NTP 时间服务器
构建 NTP 时间服务器
149 2
|
6月前
蓝易云 - 如何在Debian中同步系统时间?Debian系统时间配置(NTP服务)
以上就是在Debian系统中同步系统时间的步骤。通过以上步骤,你可以确保你的系统时间始终与NTP服务器保持同步,从而确保系统时间的准确性。
366 3
NTP服务器时间配置
NTP服务器时间配置
228 0
|
Linux
LINUX chrony同步服务器时间
LINUX chrony同步服务器时间
306 0
LINUX chrony同步服务器时间
|
Unix Linux
Linux 使用 chrony 进行 NTP 时间同步及自建方法
chrony是网络时间协议的实现。它可以替代ntpd,后者是NTP的参考实现。它在类Unix操作系统上运行,并在GNU GPL v2下发布。
554 0
|
Linux 网络协议 网络安全