linux下使用chrony同步时间

chrony 是一个多功能的NTP(Network Time Protocol)实现. 它可以通过NTP服务或者类似GPS时钟接收器的硬件级参考时钟来同步系统时钟. 它同时可以作NTP服务器(NTPv4), 为其他其他设备提供服务.

chrony被设计用在各种苛刻的条件下; 例如间断, 拥堵的网络环境, 气温变化频繁的环境(气温变化会对系统时钟造成影响)等

通常情况下, 两台机器的同步精度在毫秒级, 在LAN环境下可以达到几十毫秒. 采用硬件级的参考时钟可以提高精度

chrony 包含两个程序

  • chronyd 开机自动启动的后台进程
  • chronyc 客户端, 用来更改配置, 查看chronyd的状态

在centos7.6的最小发行版中已经预装并开启了chrony, 本文基于3.2版讲解

使用说明

1. 配置/etc/chrony.conf

server hostname [option]…

server指令用于指定NTP服务器
例如:
server 0.centos.pool.ntp.org iburst

0.centos.pool.ntp.org 是NTP服务器的地址, 默认有四组官方的NTP服务器, 也可以修改为自定义. 例如time7.aliyun.com

iburst是参数, 一般用此参数即可. 含义是在头四次NTP请求以2s或者更短的间隔, 而不是minpoll x指定的最小间隔, 可以让chronyd启动时快速同步一次
其他的参数有minpoll x 默认值是6,代表64s; maxpoll x 默认值是9,代表512s.

driftfile file

driftfile /var/lib/chrony/drift chrony会根据实际时间计算修正值, 并将补偿参数记录在该指令指定的文件里. 与ntpd或者ntpdate最大的区别就是, chrony的修正是连续的,通过减慢时钟或者加快时钟的方式连续的修正. ntpd或者ntpupdat搭配crontab的校时工具是直接调整时间, 会出现间断, 并且相同时间可能会出现两次. 因此请放弃使用ntpd, ntpdate来校时

makestep threshold limit

例如 makestep 1.0 3, 当头三次校时如果时间相差1.0s, 则跳跃式校时

rtcsync

启用内核时间与RTC时间同步(自动写回硬件)

修改完成后的配置文件内容为:

1
2
3
4
5
6
7
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst

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

只修改了server中的NTP服务器, 如果网络环境良好可以使用默认配置
详细参考man手册或者官方文档

执行 systemctl restart chronyd 重新加载配置

2. chronyc

tracking

chronyc tracking 显示时钟的详细信息

1
2
3
4
5
6
7
8
9
10
11
12
13
Reference ID    : 78197314 (120.25.115.20)
Stratum : 3
Ref time (UTC) : Fri Jun 28 13:58:17 2019
System time : 0.000042858 seconds slow of NTP time
Last offset : -0.000187823 seconds
RMS offset : 0.001029734 seconds
Frequency : 17.614 ppm slow
Residual freq : +0.008 ppm
Skew : 5.552 ppm
Root delay : 0.034440458 seconds
Root dispersion : 0.002149768 seconds
Update interval : 64.1 seconds
Leap status : Normal

主要关注Update interval这个参数, 说明最后两次更新的时间间隔是64.1s

sources

chronyc sources -v 显示被chronyd加载的所有NTP源的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
210 Number of sources = 2

.-- 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
===============================================================================
^* 120.25.115.20 2 6 37 12 +85us[ -960us] +/- 20ms
^- 203.107.6.88 2 6 37 12 +262us[ +262us] +/- 21ms

需要注意的是第二个参数, *代表当前同步的源, - 代表通过组合算法计算后排除的源

activity

chronyc activity 查看NTP服务器的在线, 离线状态

查看日志

journalctl -u chronyd

NTP server

chrony可以作为NTP服务

修改/etc/chrony.conf文件, 添加如下配置

1
2
3
4
5
6
7
8
9
10
11
12
allow

# 或者限制具体的ip
allow 1.2.3.4
allow 1.2
allow 3.4.5
allow 6.7.8/22
allow 6.7.8.9/22
allow 2001:db8::/32
allow 0/0
allow ::/0
allow

然后重启chronyd服务, 查看udp 123端口是否为开启状态, 如果端口开启, 则服务配置成功

可通过chronyc accheck x.x.x.x测试某个客户端的IP地址是否有访问权限

其他的服务器可直接配置改服务器的IP作为NTP服务器

参考

官方文档

0%