前言

在实际项目部署中,时间同步很重要,必须确保服务器集群时间一致,不然会导致很多问题出现。

NTP(Network Time Protocol)网络时间协议基于UDP,用于网络时间同步的协议,使网络中的计算机时钟同步到UTC(世界统一时间),再配合各个时区的偏移调整就能实现精准同步对时功能。在Linux系统中,该NTP协议由运行在用户空间中的守护程序实现。

用户空间守护程序更新内核中运行的系统时钟。系统时钟可以通过使用各种时钟源来节省时间。通常,使用时间戳计数器(TSC)。TSC是一个CPU寄存器,用于计数自上次复位以来的周期数。它非常快,具有高分辨率并且没有中断。

chrony简介

Chrony是网络时间协议(NTP)的实现。您可以使用Chrony:

  • 使系统时钟与NTP服务器同步,
  • 使系统时钟与参考时钟(例如GPS接收器)同步,要将系统时钟与手动时间输入同步,
  • 作为NTPv4(RFC 5905)服务器或对等方以向网络中的其他计算机提供时间服务。
  • Chrony在各种条件下都表现良好,包括间歇性网络连接,网络严重拥塞,温度变化(普通计算机时钟对温度敏感)以及无法连续运行或在虚拟机上运行的系统。

通过Internet同步的两台计算机之间的典型精度在几毫秒内,而在LAN上的计算机则在几十微秒内。硬件时间戳或硬件参考时钟可以提高同步到亚微秒级别的两台计算机之间的准确性。

Chrony包含chronyd一个在用户空间中运行的守护程序,以及chronyc一个命令行程序,可用于监视其性能chronyd并在运行时更改各种操作参数。chronyd可以监测和由命令行实用程序来控制chronyc。该实用程序提供了一个命令提示符,该命令提示符允许输入许多命令来查询其当前状态chronyd并对其配置进行更改。默认情况下,chronyd仅接受chronyc本地实例的命令,但可以将其配置为也接受来自远程主机的监视命令。远程访问应受到限制。

安装

# Cneos7默认已安装,chrony守护程序 的默认位置是/usr/sbin/chronyd。命令行实用程序将安装到/usr/bin/chronyc
yum install chrony
# 启动命令
systemctl start chronyd
systemctl status chronyd
systemctl enable chronyd

配置文件

/etc/chrony.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 配置NTP服务器
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.

# 记录系统时钟获得/丢失时间的速率至drift文件中
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通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。这种方法叫做步进时钟(时间跳变)。
# 此处表示如果调整值大于1000秒,则这将使系统时钟步进,但仅在前十个时钟更新中。
makestep 1000 10

# Enable kernel synchronization of the real-time clock (RTC).
# 启用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.
# 只允许192.168.网段的客户端进行时间同步
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
# NTP服务器不可用时,采用本地时间作为同步标准
#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.
# 将对系统增益或损耗率的估计值以及所做的任何转换记录的更改记录到名为的文件中tracking.log。
#log measurements statistics tracking

# 其他未在默认配置文件的配置项
# 在第一次时钟更新之后,chronyd将检查每次时钟更新的偏移量,它将忽略两次大于1000秒的调整,并退出另一个调整。
maxchange 1000 1 2
# 该rtcfile指令定义中的文件名chronyd可以保存跟踪系统的实时时钟(RTC)的精度相关的参数。
rtcfile /var/lib/chrony/rtc

相关操作

  1. 检查时间是否同步
chronyc tracking

在这里插入图片描述

字段说明
Reference ID参考编号:这是IP计算机当前同步到的服务器的参考ID和名称(或地址)(如果有)。参考ID是一个十六进制数,以避免与IPv4地址混淆。
Stratum层次:表示带有附加参考时钟的计算机距计算机的跳数。这样的计算机是第1层计算机,因此示例中的计算机距离两跳(也就是说,abc是第2层,并且与第1层同步)。
Ref time (UTC)这是处理来自参考源的最后一次测量的时间(UTC)。
System time在正常操作中,chronyd步进系统时钟,因为时标的任何跳跃都可能对某些应用程序产生不利影响。取而代之的是,通过稍微加快或降低系统时钟的速度来纠正系统时钟中的任何错误,直到错误被消除,然后恢复到系统时钟的正常速度
Last offset最后偏移:上次时钟更新时本地偏移量
RMS offset偏移值的长期平均值
Frequency“频率”是如果chronyd不对其进行校正,则系统时钟出错的速率。用ppm(百万分之一)表示。例如,值1 ppm表示当系统时钟认为它已提前1秒时,它实际上已相对于真实时间提前了1.000001秒。
Residual freq显示了当前选定参考源的“剩余频率”。这反映了来自参考源的测量结果表明该频率应与当前使用的频率之间的任何差异
Skew频率上的估计误差范围
Root delay这是到第1层计算机的网络路径延迟的总和,该计算机最终从该第1层计算机同步。根延迟值以纳秒分辨率打印。在某些极端情况下,该值可以为负。(这可能发生在对称的对等方排列中,其中计算机的频率彼此不跟踪,并且相对于每台计算机的周转时间,网络延迟非常短。)
Root dispersion根扩散:这是通过所有计算机累积到第1层计算机的总色散,最终从第1层计算机对其进行同步。色散是由于系统时钟分辨率,统计测量变化等引起的。根色散值以纳秒分辨率打印
Leap statusl这是飞跃状态,可以是“正常”,“插入第二”,“删除第二”或“未同步
Update interval更新间隔
  1. 检查时间来源
chronyc sources

在这里插入图片描述

字段说明
M这表示信号源的模式。^表示服务器,=表示对等方,并#指示本地连接的参考时钟
S此列指示源的状态。“ *”表示chronyd当前同步到的源。“ +”表示可接受的来源,已与所选来源合并。“-”表示组合算法排除的可接受源。“?” 指示已失去连接性或其数据包未通过所有测试的源。“ x”表示一个时钟,它chronyd认为是虚假行情(其时间与大多数其他来源不一致)。“〜”表示时间似乎变化太大的来源。“?” 启动时也会显示条件,直到从中至少收集了3个样本为止
Name/IP address这显示了IP源的名称或地址
Stratum这显示了来源的层次,如其最近收到的样本中所报告的那样。层1表示具有本地连接的参考时钟的计算机。与第1层计算机同步的计算机位于第2层。与第2层计算机同步的计算机位于第3层,依此类推。
Poll这显示轮询源的速率,以秒为单位的间隔的以2为底的对数。因此,值为6表示每64秒进行一次测量。chronyd 根据当前情况自动更改轮询速率
Reach这显示了源的范围寄存器以八进制数字打印。该寄存器有8位,并在从源接收或丢失的每个数据包上进行更新。值377表示已收到所有最后八次传输的有效回复。
LastRx此列显示多久以前从源接收到最后一个样本。通常以秒为单位。这些信件m,h,d或y表示分钟,小时,天或数年。10年的值表示尚未从此来源接收到任何样本。
Last sample此列显示上次测量时本地时钟与源之间的偏移。方括号中的数字表示实际测得的偏移量。这可以以ns(表示纳秒),us(表示微秒),ms(表示毫秒)或s(表示秒)作为后缀。方括号左侧的数字表示原始测量值,已调整为允许此后施加于本地时钟的任何摆度。+/-指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前。
  1. 检查时间来源统计,-v可以指定 可选参数,表示冗长。在这种情况下,将显示额外的标题行,以提醒各列的含义。
chronyc sourcestats

在这里插入图片描述

字段说明
Name/IP address这是该行其余部分所涉及IP的NTP服务器(或对等方)的名称或地址或参考时钟的参考ID。
NP这是当前为服务器保留的采样点数。通过对这些点进行线性回归可以估算漂移率和电流偏移。
NR这是在最后一次回归后具有相同符号的残差游程数。如果此数字相对于样本数开始变得太小,则表明直线不再适合数据。如果运行次数太少,则chronyd丢弃较旧的样本,然后重新运行回归,直到运行次数变得可接受为止。
Span这是最旧和最新样本之间的间隔。如果未显示单位,则该值以秒为单位。在示例中,间隔为46分钟。
Frequency这是服务器的估计剩余频率,以百万分之一为单位。在这种情况下,计算机的时钟估计中所运行1份10 9相对于服务器慢。
Freq Skew这是Freq的估计误差范围(再次以百万分之一为单位)。
Offset这是源的估计偏移量
Std Dev这是估计的样品标准偏差。
  1. 手动调整系统时钟,要立即步进系统时钟,以通过回转来绕过正在进行的任何调整,如果使用该rtcfile指令,则不应手动调整实时时钟。随机调整会干扰chrony需要测量实时时钟漂移的速率。
chronyc makestep

案例

需求:搭建一台NTP服务器,同步阿里云时间,当阿里云可不用时,使用本地时间,其他服务器同步这台服务器上的时间,确保时间一致。

  1. 搭建服务端
# Centos7.6已默认安装,查看状态
systemctl status  chronyd
# 注释其他server开头的配置,添加阿里云NTP公共时间同步服务器
vim /etc/chrony.conf
添加内容
server ntp.aliyun.com iburst
allow 0.0.0.0/0
local stratum 10
# 重启chronyd
systemctl restart   chronyd
# 查看时间同步源,查看时间同步进度
chronyc sources –v
  1. 配置客户端
# Centos7.6已默认安装,查看状态
systemctl status  chronyd
# # 注释其他server开头的配置,添加本地NTP公共时间同步服务器
vim /etc/chrony.conf
server 192.168.58.201 iburst
# 重启chronyd
systemctl restart   chronyd
# 查看时间同步源,查看时间同步进度
chronyc sources –v
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐