暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

chrony时间同步服务

原创 islandstar 2023-02-23
1519

当前环境

Rocky Linux 9.1 x86-64
chrony version 4.2

chrony 是网络时间协议 NTP (Network Time Protocol) 的改进,提供更快、更精准的时钟同步服务且兼容ntp,自RHEL7开始提供,从 RHEL8 开始,NTP 协议由 chronyd 守护进程实现,不再支持ntpdate。

chrony 包括 chronyd(一个在用户空间运行的守护进程)和 chronyc(可用来监控 chronyd 性能并在运行时更改各种操作参数的命令行程序)。

chrony 守护进程(chronyd) 可以由命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,允许输入大量命令来查询 chronyd 的当前状态并修改其配置。在默认情况下,chronyd 只接受来自本地 chronyc 实例的命令,但它也可以被配置为接受来自远程主机的监控命令。应该限制远程访问。

chronyd 运行于 UDP323 端口,ntp运行于 UDP123 端口,使用chrony服务可以同时为chrony客户端和ntp客户端提供服务。

服务unit文件: /usr/lib/systemd/system/chronyd.service

相关命令

查看日期时间、时区及 NTP 状态

# timedatectl 
               Local time: Tue 2023-01-31 10:08:26 CST
           Universal time: Tue 2023-01-31 02:08:26 UTC
                 RTC time: Tue 2023-01-31 02:08:29
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Local time: 本地时间,初始值来自于RTC,由内核维护,系统启动之后和RTC就没有关系,通常等于RTC+时区值(如本地时间= RTC + 8小时)
Universal time: 系统时间永远是UTC,在应用程序使用的时候转换为本地时间
RTC(real-time clock)time: 指硬件时间,一般是主板上的特殊电路,专用于记录时间,有电池供电,不受服务器和操作系统的开启关闭影响。也称作BIOS时间。
Time zone: 本地时区,即服务器所在的时区,在中国通常使用 Asia/Shanghai

RTC in local TZ: 设置RTC时间,为"no"表示未设置

# 默认情况下,系统配置为使用UTC,也可使用本地时间 timedatectl set-local-rtc true # 将RTC设置为本地时间 timedatectl set-local-rtc false # 将RTC设置为UTC

NTP service: active 状态为“active”,表示开启系统时钟与远程ntp服务器同步,相关命令(打开/关闭):
timedatectl set-ntp true/flase

System clock synchronized: yes 为“yes”,表示同步外部NTP服务时间完成。

使用 chronyc 命令行工具控制 chronyd

使用 chronyc 所做的更改会在 chronyd 重启后丢失。要永久更改,请修改 /etc/chrony.conf

查看帮助
chronyc help

检查是否同步 chrony

检查 chrony 跟踪
chronyc tracking

查看服务器时间和NTP server偏差

# chronyc tracking |grep System
System time     : 0.000116025 seconds slow of NTP time

查看时间同步源,使用可选参数 -v 来包括详细信息。
chronyc sources
chronyc sources -v

检查的每个源的偏移率和误差估算过程的信息。要检查 chrony 源的统计信息,请运行以下命令:
chronyc sourcestats
chronyc sourcestats -v

显示有多少NTP源在线/离线
chronyc activity

立即手动同步时间(需要chronyd服务运行)
chronyc makestep

chronyc -a makestep

像 ntpdate 一样手动同步时间
使用参数 -q (运行服务执行后停止服务)
chronyd -q 'pool time.windows.com iburst'

临时添加一台时间同步服务地址(不会写入配置中),chronyc sources
chronyc add server time.windows.com

最后一步,将当前时间和日期写入BIOS,避免重启后失效
hwclock -w

显示 BIOS 中实际的时间
hwclock --localtime

设置时区

查看时区列表
timedatectl list-timezones
timedatectl list-timezones | grep -E “Asia/Sh.*”

修改时区为上海
timedatectl set-timezone Asia/Shanghai

修改日期时间(可以只修改其中一个)
timedatectl set-time “2023-01-31 10:00:20”

更改当前日期 timedatectl set-time YYYY-MM-DD
更改当前时间 timedatectl set-time HH:MM:SS

启动chrony服务

systemctl start chronyd.service

设置开机启动
systemctl enable chronyd.service

如果需要作为NTP Server提供给其它服务器作为时间同步务,则需要开放123/UDP端口。如:

firewall-cmd --add-service=ntp --permanent firewall-cmd --reload # 如果需要从远程系统连接,开启端口 323 firewall-cmd --permanent --add-port=323/udp

查看已访问本机NTP服务的客户端列表
chronyc clients

chrony 配置说明

server :指明时间服务器地址,可以添加多个

ibust 会在 chrony 启动的2秒内,去快速poll服务器4次来快速矫正当前系统时间。 prefer 优先使用指定的服务器 minpoll 6,缺省是6,意思是2的6次方,也就是64秒,最小轮询时间服务器的时间间隔是64秒 maxpoll 10,缺省是10,同上,2的10次方,也就是1024秒,最大轮询时间间隔是1024秒 通常情况下一过minpoll的时间周期,就会触发一次时间同步询问。

pool :新版本出现,可能是代表一组 server 的意思,就是不用写多个server配置。 by jetlam 理解补充

rtcsync :把系统时钟同步到主板的硬件时钟(RTC)去,缺省情况下是11分钟同步一次。

makestep : 正常情况下如果系统时钟跟时间服务器不一致,chrony调整的方式是慢慢增加,或慢慢减少,不会一步到位,直接去跟时间服务器对齐。
例如:makestep 1.0 3,意思就是如果时间服务器跟系统时间相差1秒,那么就在下3个时钟更新中追上时间服务器。
这样就会立刻快速追平了,这样会带来时间跳跃。

logchange
例如:logchange 0.5,意思是如果chrony调整的系统时间,超过了0.5秒的时长,就会发一条消息到syslog,这样我们就能在/var/log/messages里看到这条消息了。

driftfile : 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿。 allow NETADD/NETMASK 自己作为ntp服务器,让客户端来同步自己的时间。 allow all:允许所有客户端主机; deny NETADDR/NETMASK deny all:拒绝所有客户端; cmdallow / cmddeny : 可以指定哪台主机可以通过chronyd使用控制命令。 bindcmdaddress : 允许chronyd监听哪个接口来接收由chronyc执行的命令。 local stratum 10 :即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端。

配置示例:/etc/chrony.conf

## 例如:添加两个时间源,分别是阿里云和东北大学、微软的时间同步服务器,iburst表示加急 server time1.aliyun.com iburst prefer minpoll 6 maxpoll 10 server time.neu.edu.cn iburst server time.windows.com iburst # Record the rate at which the system clock gains/losses time. ## 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。 driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. # chronyd根据需求减慢或加速时间调整, # 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。 # 该指令强制chronyd调整时期,大于某个阀值时(例如1秒)步进调整系统时钟。 # 只有在因chronyd启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。 makestep 1.0 3 # Enable kernel synchronization of the real-time clock (RTC). # 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。 rtcsync # Enable hardware timestamping on all interfaces that support it. # 通过使用hwtimestamp指令启用硬件时间戳 #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # the system clock. #minsources 2 # Allow NTP client access from local network. # 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器 #allow 192.168.0.0/16 allow all # Serve time even if not synchronized to a time source. #local stratum 10 # Specify file containing keys for NTP authentication. # 指定包含NTP验证密钥的文件。 #keyfile /etc/chrony.keys # Specify directory for log files. # 指定日志文件的目录。 logdir /var/log/chrony # Select which information is logged. # 选择日志文件要记录的信息 #log measurements statistics tracking

如果chrony仅是作为NTP client,那最小配置 chrony.conf 只需要配置如下:

What is the minimum recommended configuration for an NTP client?

如仅配置为NTP client方式,同步外部NTP Server。

pool 2.rocky.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync

一些解释:

示例: chronyc sourcestats -v

# chronyc sourcestats -v
                             .- Number of sample points in measurement set.
                            /    .- Number of residual runs with same sign.
                           |    /    .- Length of measurement set (time).
                           |   |    /      .- Est. clock freq error (ppm).
                           |   |   |      /           .- Est. error in freq.
                           |   |   |     |           /         .- Est. offset.
                           |   |   |     |          |          |   On the -.
                           |   |   |     |          |          |   samples. \
                           |   |   |     |          |          |             |
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
stratum2-1.ntp.mow01.ru.>   4   3     7   +109.899   2154.711  +4293us   233us
ntp.wdc2.us.leaseweb.net    4   4     9  +1351.895  55584.047    +64ms  9147us
sv1.ggsrv.de                4   3     7   +633.265  15331.828  -1639us  1955us
119.28.206.193              4   3     6   +965.101  32095.979    +51ms  4542us
  1. Name/IP address 时间源的域名、IP地址或Refernce ID。
  2. NP 服务器当前保留的样本点的数量。偏移率和偏移值是通过这些样本点进行线性回归计算预估的。
  3. NR 这是最后一次回归计算后,具有相同符号的残差的运行次数。如果这个数字相对于样本的数量开始变得太小,则表明直线不再适合数据。如果运行的次数过低,那么chronyd将丢弃旧的样本并重新运行回归计算,直到运行的次数可以接受为止。
  4. Span 表示最老的样本与最新的样本之前的时间间隔。如果没有显示单位,则单位是s(秒)。
  5. Frequency 估计的时间源的residual frequency。以ppm(百万分之一)为单位。‘+’表示本地时间比时间源快,‘-’表示比时间源慢。
  6. Freq Skew 这是频率的估计误差范围,以ppm(百万分之一)为单位。
  7. Offset 这是估计的时间源的偏移量。
  8. Std Dev 这是估计的样本标准差。

示例:chronyc tracking

# chronyc tracking
Reference ID    : 78197314 (120.25.115.20)
Stratum         : 3
Ref time (UTC)  : Fri Feb 03 03:07:49 2023
System time     : 0.000027453 seconds slow of NTP time
Last offset     : -0.000000803 seconds
RMS offset      : 0.000131008 seconds
Frequency       : 3.193 ppm slow
Residual freq   : -0.000 ppm
Skew            : 0.034 ppm
Root delay      : 0.005342438 seconds
Root dispersion : 0.001951937 seconds
Update interval : 1027.7 seconds
Leap status     : Normal
  1. Reference ID: 与之进行同步的ntp服务器的参考ID(一串16进制数字)和名称(或ip地址)
  2. Stratum: 与附加硬件参考时钟的计算机(stratum-1)的距离。本机是stratum-3,也就是说139.199.215.251是stratum-2。
  3. Ref time (UTC): 来自参考时间源的最后测量的UTC时间
  4. System time: 正常情况下,chronyd默认不会步进调整时钟,因为时间的跳跃会有对某些应用程序造成不良后果的风险。相反,系统时钟的偏差是通过略微加快或减慢系统时钟的方式来调整,知道消除偏差,然后返回系统时钟的正常速度。这样做的结果是,将会有一段时间,系统时钟(由其他程序读取的)会和chronyd估计的当前真实时间(当chronyd作为ntp服务器时,报告给其他ntp客户端的时间)不一样。这一行显示的值是这两个时间的差值。
  5. Last offset: 最后一次时钟更新时估计的本地偏移量
  6. RMS offset: 偏移量的长期平均值
  7. Frequency: 如果chronyd不进行校正,系统时钟出错的频率。它以ppm表示(百万分之几)。例如:1ppm表示当系统时钟认为前进了1秒时,它实际上相对于真实时间前进了1.000001秒。
  8. Residual freq: 当前选择的参考时间源的‘residual frequency’。表示从参考时间源测量到的频率与当前使用的频率之间的差值。
  9. Skew: 频率上的估计误差范围
  10. Root delay: 本计算机到最终同步的stratum-1计算机的网络路径延迟的总和。
  11. Root dispersion: 通过所有经过的计算机,回到最终同步的stratum-1计算机累积的总弥散。
  12. Update interval: 最后两次时钟更新的时间间隔
  13. Leap status: 可能值为Normal、Insert second、Delete second、Not synchronized

  • UTC
    整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。
  • GMT
    格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同)
  • CST
    中国标准时间 (China Standard Time)
  • DST
    夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用)
  • RTC
    (Real-Time Clock)或CMOS时间,硬件时间,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。
最后修改时间:2023-02-23 16:14:19
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论