YaoYan

Blog

欢迎来到YaoYan的Blog~


chrony服务时间同步实验

Chrony是一个ntp协议的实现程序,可当服务端,也可当客户端;Chrony有三个时间参考:硬件时钟、实时时钟以及手动同步。Chrony是NTP客户端的替代品,能更精确的时间和更快的速度同步时钟。占用系统资源少,只有被唤起时才占用少部分CPU。chrony也兼容ntpdate。

Redhat手册认为除了不支持和不适用chrony的地方,都应该使用chrony。

Chrony should be preferred for all systems except for the systems that are managed or monitored by tools that do not support chrony, or the systems that have a hardware reference clock which cannot be used with chrony.

Redhat参考:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-configuring_ntp_using_the_chrony_suite

1、安装

yum install -y chrony

2、修改配置

配置文件位置: /etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# 使用 pool.ntp.org 项目提供的公共服务器
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 请认真考虑加入这个池。(最后的iburst表示立即同步)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
# 记录系统时钟增益/损耗时间的速率。
# driftfile指令允许指定一个文件,chronyd会在该文件中存储速率信息。
# 文件中记录了两个参数。第一个是系统时钟增加或减少时间的速率,用百万分之一表示,增益为正。
# 因此,值为100.0表示当系统时钟向前推进一秒时,它实际上已经增加了100微秒(所以真正的时间只向前推进了999900微秒)。
# 第二个是对第一个值的误差范围的估计,这个值是真实的比率。
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启动的前三次同步时,当要调整的时间超过1秒时,允许系统时钟跳跃式调整。
# 其他时间如发现时钟要调整的频率超过1秒,系统会逐渐校准时间,不会跳跃调整。
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
# rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)
rtcsync

# Enable hardware timestamping on all interfaces that support it.
# 在所有支持的接口启用硬件时间戳。
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
# 需要调整系统时钟时,增加最小可选源的数量。
# minisources指令设置在本地时钟更新之前需要在源选择算法中被认为是可选择的源的最小数量。缺省值为1。
# 该设置可提高可靠性。修改本地时钟需要多个源一起判断同意,如果可用源的数量低于设置的值,则时间不会更新。
#minsources 2

# Allow NTP client access from local network.
# 可以向哪些本地网络的客户端提供NTP服务。
# 此设置为白名单设置,如果不设置,则相当于没有对外提供NTP服务。
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
# 在无法与一个时间服务器同步时仍对外提供时间服务。
# 作为时间服务器的话,如果担心上游时间服务器关闭,为独立提供时间服务,需要开启该设置。
# stratum表示该服务器的层级,取值范围1~15,缺省为10。
# 1表示直接与之相连的服务器有可靠的真实时钟,比如GPS、原子钟。层级越小别是离真实时间越近。
# 值为10表示时钟与参考时钟的距离太大,它的时间可能相当不可靠。
#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

官方配置说明文档:https://chrony.tuxfamily.org/doc/3.5/chrony.conf.html

3、启动服务

systemctl enable chronyd
systemctl start chronyd

4、时间同步实验

主机名 IP地址 角色
test1 192.168.203.101 chrony NTP server
test2 192.168.203.102 chrony NTP client

test1配置文件:

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.203.0/24
local stratum 10
logdir /var/log/chrony
log measurements statistics tracking

第一次同步外网时间后,把所有server都注释掉了,用于test1做时间服务器,便于修改时间让test2来同步。

test2配置文件:

server 192.168.203.101 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

将test1时间调快几分钟。

然后在test2使用命令 chronyc sources -v 检查时间来源信息,有430秒误差:

[root@test2 chrony]# chronyc sources -v
210 Number of sources = 1

  .-- 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
===============================================================================
^~ 192.168.203.101              10   6   361    19  -430.3s[-430.3s] +/-  716us

使用命令 chronyc tracking 显示系统时间信息,比NTP时间慢413秒:

[root@test2 chrony]# chronyc tracking
Reference ID    : C0A8CB65 (192.168.203.101)
Stratum         : 11
Ref time (UTC)  : Tue Mar 02 10:07:07 2021
System time     : 413.132141113 seconds slow of NTP time
Last offset     : +0.000298148 seconds
RMS offset      : 116.185462952 seconds
Frequency       : 7.234 ppm fast
Residual freq   : +0.699 ppm
Skew            : 0.485 ppm
Root delay      : 0.000372343 seconds
Root dispersion : 0.000115817 seconds
Update interval : 59.9 seconds
Leap status     : Normal

每秒追踪看时间差值:

[root@test2 chrony]# while [ 1 ]
> do
> chronyc tracking | grep "^System time"
> sleep 1
> done
System time     : 299.694335938 seconds slow of NTP time
System time     : 299.615417480 seconds slow of NTP time
System time     : 299.536712646 seconds slow of NTP time
System time     : 299.457763672 seconds slow of NTP time
System time     : 299.378936768 seconds slow of NTP time
System time     : 299.300354004 seconds slow of NTP time
System time     : 299.222351074 seconds slow of NTP time
System time     : 299.142791748 seconds slow of NTP time
System time     : 299.064147949 seconds slow of NTP time
System time     : 298.985229492 seconds slow of NTP time
System time     : 298.906250000 seconds slow of NTP time
System time     : 298.827728271 seconds slow of NTP time
System time     : 298.747314453 seconds slow of NTP time
System time     : 298.669250488 seconds slow of NTP time
System time     : 298.590911865 seconds slow of NTP time
System time     : 298.513031006 seconds slow of NTP time
System time     : 298.435638428 seconds slow of NTP time
System time     : 298.356842041 seconds slow of NTP time
System time     : 298.279235840 seconds slow of NTP time
System time     : 298.200805664 seconds slow of NTP time
System time     : 298.123077393 seconds slow of NTP time
System time     : 298.042083740 seconds slow of NTP time

由上可以看出,chrony服务每秒都在慢慢得调整时间,与NTP时间差距是逐渐变小。