Bootstrap

【Linux系列】Chrony时间同步服务器搭建完整指南

1. 简介

Chrony是一个用于Linux系统的高效、精准的时间同步工具,通常用于替代传统的NTP(Network Time Protocol)服务。Chrony不仅在系统启动时提供快速的时间同步,还能在时钟漂移较大的情况下进行及时调整,因此广泛应用于生产环境中。尤其是在虚拟化环境、高负载服务器和高精度要求的场景下,Chrony具有较大的优势。
在这里插入图片描述

2. 有了NTP,为什么还需要用Chrony?

NTP(Network Time Protocol)是一种经典的时间同步协议,用于保持计算机时钟与UTC(世界协调时间)同步。虽然NTP在大多数情况下表现良好,但在某些特殊情况下(如频繁重启的服务器、虚拟化环境、低网络带宽等),它的同步速度较慢,且在处理时钟漂移方面的精度和效率较低。

Chrony是NTP的一个现代化替代品,它可以:

  • 在启动时快速同步时间。
  • 在系统时钟漂移较大时进行修正。
  • 在离线环境中仍然能够提供本地时间同步。
  • 高效地处理虚拟化环境中的时间同步。

因此,Chrony在现代化的运维环境中,尤其是在高负载和虚拟化场景下,提供了更高的同步精度和更优的性能。

3. Chrony服务器端安装与配置

在CentOS 7及以上版本中,Chrony默认已经安装,且作为系统的默认时间同步工具。你可以通过以下命令确认是否已安装:

rpm -qa | grep chrony

如果没有安装,可以通过以下命令安装:

yum install chrony

配置文件

Chrony的主要配置文件是/etc/chrony.conf,我们可以对其进行优化配置,以确保系统的时间同步更加精准、可靠。

以下是一个默认的chrony.conf配置文件示例:

# Use public servers from the pool.ntp.org project.
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 /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (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.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

主要配置说明

  • server:指定NTP服务器地址,iburst选项用于首次同步时快速发送多个请求。
  • driftfile:保存系统时钟漂移信息,用于后续时钟校正。
  • makestep:当时钟偏差较大时,允许跳跃式校正,1.0 3表示偏差大于1秒时,最多进行三次修正。
  • rtcsync:确保系统时钟与硬件实时时钟(RTC)同步。
  • hwtimestamp:启用硬件时间戳功能(可选)。
  • minsources:指定最少需要多少个同步源进行时间校正(可选)。
  • logdir:指定日志文件存放路径,便于后续监控和分析。

配置优化建议

为了提高Chrony的时间同步精度和稳定性,可以做如下优化:

1. 优化时间源选择

选择多个高质量的NTP服务器进行时间同步,并确保这些服务器的稳定性和低延迟。

# CentOS NTP Servers
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

# Apple NTP Servers
server time1.apple.com iburst
server time2.apple.com iburst
server time3.apple.com iburst
server time4.apple.com iburst
server time5.apple.com iburst

# Google NTP Servers
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst

# Pool.ntp.org NTP Servers (Global)
server pool.ntp.org iburst

# China NTP Servers (Local)
server cn.pool.ntp.org iburst

# Aliyun NTP Servers
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server time1.aliyun.com iburst
server time2.aliyun.com iburst
  • 使用多个时间源以确保同步的可靠性。
  • iburst选项能在首次连接时发送多个请求,加速同步。
2. 减少时钟漂移影响

Chrony会记录时钟漂移并根据漂移数据进行同步。确保driftfile配置项设置正确,并定期检查漂移文件。

driftfile /var/lib/chrony/drift
3. 优化makestep参数

makestep参数允许Chrony在时钟偏差较大时进行修正,可以根据实际需求调整该值:

makestep 1.0 3
  • 1.0表示允许1秒以内的修正,3表示最多进行三次修正。
4. 启用硬件时间戳

如果硬件支持,可以启用硬件时间戳功能,进一步提高同步精度。

hwtimestamp *
5. 设置最小源数量

可以设置minsources来确保同步的准确性和可靠性,要求至少需要多个同步源。

minsources 2
6. 本地时钟作为备用源

当没有可用的NTP源时,可以回退到本地时钟进行同步。你可以设置local stratum来指定备用时钟的优先级。

local stratum 10
7. 限制访问范围

如果需要限制哪些网络可以访问Chrony进行时间同步,可以配置allow选项。

allow 192.168.1.0/24
8. 启用日志记录

可以启用详细的日志记录,以便后续跟踪和诊断同步问题。

logdir /var/log/chrony
log measurements statistics tracking
9. 启用NTP认证(可选)

如果需要更高的安全性,可以启用NTP认证,确保同步的时间数据未被篡改。

keyfile /etc/chrony.keys

配置文件示例

# 使用多个时间源进行同步
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

# 记录时钟漂移文件
driftfile /var/lib/chrony/drift

# 设置最大偏差为1秒,允许最多三次步进修正
makestep 1.0 3

# 启用系统时钟与硬件实时时钟同步
rtcsync

# 启用硬件时间戳功能
hwtimestamp *

# 最少需要两个同步源进行时间校正
minsources 2

# 如果没有可用的时间源,使用本地时钟作为备用
local stratum 10

# 允许本地网络访问Chrony服务
allow 192.168.1.0/24

# 配置日志存储路径并启用日志记录
logdir /var/log/chrony
log measurements statistics tracking

# 启用NTP认证(如果需要)
# keyfile /etc/chrony.keys

3. 启动Chrony服务(Server端)

systemctl start chronyd
systemctl enable chronyd

4. Chrony客户端安装与配置

如果你需要将Chrony作为客户端进行时间同步,请按照以下步骤配置:

1. 安装Chrony(如果未安装)

yum install chrony

2. 编辑配置文件/etc/chrony.conf,并设置服务器配置为您自己的Chrony服务器:

server chrony1.xxx.com iburst
server chrony2.xxx.com iburst

确保至少配置两个Chrony服务器节点,以保证高可用性。

3. 启动Chrony服务(Client端)

systemctl start chronyd
systemctl enable chronyd

4. 检查同步状态:

chronyc tracking

5. 监控与告警

Chrony提供了丰富的命令和日志功能,可以用来监控时间同步状态,并进行必要的告警配置。通过这些工具,管理员能够实时了解系统时钟的同步情况以及潜在的时间同步问题。

5.1 使用Chrony命令监控同步状态

chronyc tracking
该命令可以查看系统当前的时间同步状态,包括当前时钟偏差、上次同步时间、偏差稳定性等信息。常用来检查Chrony服务是否正常同步系统时间。

chronyc tracking

输出示例:

Reference ID    : C0A89693 (chrony1.xxx.com)
Stratum         : 4
Ref time (UTC)  : Thu Nov 28 04:59:55 2024
System time     : 0.000000084 seconds fast of NTP time
Last offset     : -0.000120594 seconds
RMS offset      : 0.000120594 seconds
Frequency       : 7.614 ppm slow
Residual freq   : -29.260 ppm
Skew            : 1.438 ppm
Root delay      : 0.019204240 seconds
Root dispersion : 0.007626829 seconds
Update interval : 2.0 seconds
Leap status     : Normal
  • System time:表示系统时间与NTP时间的偏差。
  • RMS offset:表示时间同步的精度。
  • Update interval:表示时间同步的间隔。

chronyc sources该命令可以查看Chrony当前使用的时间源状态,包括每个源的延迟、偏差和质量等信息。

chronyc sources

输出示例:

210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ chrony2.xxx.com             1   7   377    28   +946us[ +946us] +/-   30ms
^* chrony1.xxx.com             1   6    37    26   +516us[-1728us] +/-   30ms
  • MS:表示源的状态,*表示当前正在使用的时间源,+表示备用源。
  • Last sample:表示最后一次获取到的时间样本。

5.2 配置日志记录与告警

Chrony通过logdir配置项启用了日志记录功能。可以通过监控日志文件并结合现有的监控平台(如Prometheus、Zabbix、Nagios等)设置告警。以下是Chrony日志记录配置的示例:

logdir /var/log/chrony
log measurements statistics tracking
  • log measurements:记录时间同步的测量数据。
  • log statistics:记录时间源的统计数据。
  • log tracking:记录系统时钟的跟踪信息。

日志记录后,可以通过设置监控工具,定期检查/var/log/chrony目录中的日志文件,若发现系统时钟偏差较大或时间同步异常,可以触发告警。

举例: 如果你使用Zabbix作为监控工具,可以创建一个基于Chrony日志的触发器,来监控时钟同步的状态。例如,配置一个告警,当chronyc tracking中的RMS offset值超过某个阈值时触发告警。

5.3 使用Prometheus监控Chrony状态

Chrony服务对于关键业务系统尤为重要,尤其是在金融等行业,时间不同步可能导致日终结算异常、交易错误等问题。因此,必须对Chrony同步进行监控。
在这里插入图片描述

1. 监控业务服务器与监控服务器的时间差

为避免Chrony同步异常,可以设置监控项,确保业务服务器与监控服务器的时间差在合理范围内。如果超过500毫秒,应该触发告警。

2. 监控Chronyd服务是否正常运行

对于监控Chrony服务的稳定性,可以通过Chrony exporter等监控工具来实时监控Chrony服务。如果发现Chronyd服务停止运行,及时发出告警,避免对业务造成影响。

3. 独立配置监控服务器与业务服务器的Chrony同步

为了避免因单一Chrony服务器故障而导致的同步问题,建议分别为监控服务器和业务服务器配置不同的Chrony服务器。即使共享同一Chrony服务器,也应保证服务的高可用性。

5.4 配置告警

结合上述日志监控和Prometheus的收集,可以在系统中设置告警规则。常见的告警场景包括:

时钟偏差超过阈值:例如,chronyc tracking中的System time偏差大于0.1秒时。
同步源不可用:如果chronyc sources显示同步源不可达,系统应发出警报。
告警可以配置为短信、邮件或通过企业微信等消息平台发送,确保运维人员能及时处理时间同步问题。

6. Chrony常用命令

Chrony提供了多个有用的命令,可以帮助管理员检查时间同步状态、管理时间源、调试问题等。

6.1 chronyc tracking

查看当前的时间同步状态,包括时钟偏差、更新时间间隔、同步质量等信息。

chronyc tracking

6.2 chronyc sources

查看当前系统使用的NTP时间源的状态,包括延迟、同步质量等。

chronyc sources

6.3 chronyc sourcestats

查看NTP源的详细统计信息。

chronyc sourcestats

6.4 chronyc makestep

强制Chrony立即对系统时钟进行步进修正,通常用于在时钟偏差过大的情况下。

chronyc makestep

7. 总结

Chrony是一个现代化的时间同步工具,比传统的NTP更适合高负载、虚拟化环境以及对时间同步精度要求较高的场景。通过合理配置Chrony,可以大大提高系统时钟的同步精度,减少时钟漂移,并确保在网络不稳定的情况下仍能维持准确的系统时间。

本文介绍了如何在CentOS环境下安装和配置Chrony,包括常见的优化配置、客户端配置、监控与告警方法以及常用命令。通过结合日志记录、Prometheus等工具,可以对Chrony的状态进行实时监控,确保系统时间的高精度与高可用性。

希望这篇文章能帮助你更好地理解和使用Chrony,在运维中保持精准的时间同步,确保系统的稳定运行。

;