Chrony:让你的服务器时间精准到微秒级的神器!

在现代计算机系统中,时间同步是至关重要的。无论是分布式系统、数据库集群,还是日志记录,时间不一致都可能导致严重的问题。而 Chrony,作为一款高性能的时间同步工具,正在成为越来越多系统管理员的首选。它不仅比传统的 ntpd 更快、更精准,还能在网络不稳定的情况下保持出色的表现。今天,我们就来深入探讨 Chrony 的强大功能,以及如何用它来让你的服务器时间精准到微秒级!


为什么需要 Chrony?

在分布式系统中,时间同步的重要性不言而喻。如果服务器之间的时间不一致,可能会导致以下问题:

  • 日志时间错乱,难以排查问题。
  • 数据库事务冲突,数据一致性被破坏。
  • 分布式锁失效,系统出现不可预知的错误。

而 Chrony 正是为了解决这些问题而生的。它通过以下特性脱颖而出:

  • 快速同步:在网络条件良好的情况下,Chrony 可以在几秒内完成时间同步。
  • 高精度:支持微秒级的时间同步,满足高精度需求。
  • 适应性强:即使在网络波动或高延迟的环境中,Chrony 也能保持稳定同步。
  • 低资源占用:适合资源受限的设备,如嵌入式系统或虚拟机。

Chrony 的核心优势

1. 比 ntpd 更快、更精准

Chrony 的设计目标之一就是比传统的 ntpd 更快地完成时间同步。它通过智能算法和 iburst 选项,在初始同步时发送多个请求,从而大幅缩短同步时间。

2. 适应网络波动

如果你的服务器位于网络不稳定的环境中(比如云服务器或移动设备),Chrony 的表现会更加出色。它能够动态调整同步策略,减少网络波动对时间同步的影响。

3. 支持离线模式

即使在没有网络连接的情况下,Chrony 也能依靠本地时钟的漂移率来保持时间的准确性。这对于需要离线运行的系统来说非常实用。

4. 低资源占用

Chrony 的资源占用非常低,适合在嵌入式设备或虚拟机中运行。它不会对系统性能造成明显影响。


如何配置 Chrony?

Chrony 的配置文件通常位于 /etc/chrony.conf,以下是一个简单的配置示例:

# 使用阿里云的NTP服务器作为时间源
# `iburst` 选项表示在初始同步时发送多个请求,加快同步速度
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst

# 使用本地时钟作为备用时间源
# `stratum 10` 表示本地时钟的层级为10(层级越高,优先级越低)
local stratum 10

# 允许192.168.1.0/24网段的主机访问chrony服务
# 可以用于允许内网设备同步时间
allow 192.168.1.0/24

# 拒绝所有其他主机访问chrony服务
# 这是一个安全措施,确保只有允许的网段可以访问
deny all

# 启用RTC(硬件时钟)同步
# 这会将系统时间同步到硬件时钟,确保重启后时间仍然准确
rtcsync

# 设置时间步进调整
# 如果时间偏差超过1.0秒,chrony会立即调整时间
# 在前3次调整中允许步进调整
makestep 1.0 3

# 指定时钟漂移文件的路径
# 该文件用于记录系统时钟的漂移率,帮助chrony更准确地调整时间
driftfile /var/lib/chrony/drift

# 指定日志文件的存储目录
# chrony会将日志文件(如measurements.log、statistics.log等)存储在此目录
logdir /var/log/chrony

# 配置日志记录行为
# `measurements`:记录时间测量的日志
# `statistics`:记录统计信息的日志
# `tracking`:记录时间跟踪信息的日志
log measurements statistics tracking

# 指定NTP认证密钥文件的路径
# 如果需要使用NTP认证功能,可以在此指定密钥文件
keyfile /etc/chrony.keys

# 允许本地主机通过chronyc命令行工具管理chrony
# 这是一个安全措施,确保只有本地用户可以管理chrony
cmdallow 127.0.0.1

# 设置NTP服务器的轮询间隔
# `minpoll 6` 表示最小轮询间隔为2^6=64秒
# `maxpoll 8` 表示最大轮询间隔为2^8=256秒
server ntp2.aliyun.com minpoll 6 maxpoll 8

# 设置NTP服务器的优先级
# `prefer` 表示优先使用该服务器
server ntp3.aliyun.com prefer

配置完成后,启动 Chrony 服务:

sudo systemctl start chronyd
sudo systemctl enable chronyd

Chrony 的常用命令

Chrony 提供了一个强大的命令行工具 chronyc,用于监控和管理时间同步。以下是一些常用命令:

1. 查看时间服务器状态

chronyc sources -v
  • 显示当前配置的时间服务器及其状态。
  • ^* 表示当前正在使用的服务器。
  • ^+ 表示可用的备用服务器。

示例输出:

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.aliyun.com                2   6   377    46    +12us[-123us] +/-   23ms
^+ ntp1.aliyun.com               2   6   377    45    -10us[-145us] +/-   25ms

2. 查看同步状态

chronyc tracking
  • 显示当前系统的时钟同步状态,包括时间偏差、频率偏移等。

示例输出:

Reference ID    : 123.456.789.101 (ntp.aliyun.com)
Stratum         : 3
Ref time (UTC)  : Tue Jan 16 12:34:56 2025
System time     : 0.000123 seconds slow of NTP time
Last offset     : +0.000045 seconds
RMS offset      : 0.000012 seconds
Frequency       : 1.234 ppm slow
Residual freq   : +0.001 ppm
Skew            : 0.012 ppm
Root delay      : 0.023456 seconds
Root dispersion : 0.001234 seconds
Update interval : 64.2 seconds
Leap status     : Normal

3. 手动同步时间

chronyc makestep
  • 强制立即同步系统时间,适用于时间偏差较大的情况。

4. 检查客户端访问

chronyc clients
  • 显示当前连接到 Chrony 的客户端信息。

示例输出:

Hostname                      NTP   Drop Int IntL Last
===============================================================================
192.168.1.100                 2      0   6   -    45
192.168.1.101                 2      0   6   -    50

5. 查看时间服务器的详细信息

chronyc sourcestats -v
  • 显示时间服务器的统计信息,包括延迟、偏差等。

示例输出:

Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
===============================================================================
ntp.aliyun.com             12   7   100     +0.001      0.012    +45us    12us
ntp1.aliyun.com            10   6   100     -0.002      0.015    -30us    15us

6. 添加或删除时间服务器

  • 添加时间服务器:
    chronyc add server ntp2.aliyun.com
    
  • 删除时间服务器:
    chronyc delete ntp2.aliyun.com
    

7. 检查 Chrony 的活动状态

chronyc activity
  • 显示当前 Chrony 的活动状态,包括正在使用的服务器数量。

示例输出:

200 OK
4 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

8. 手动调整时间

chronyc settime "2025-1-16 12:34:56"
  • 手动设置系统时间(需谨慎使用)。

9. 检查 Chrony 的版本

chronyc -v
  • 显示 Chrony 的版本信息。

10. 重启 Chrony 服务

sudo systemctl restart chronyd
  • 重启 Chrony 服务以应用配置更改。

Chrony vs. ntpd:谁更适合你?

特性Chronyntpd
同步速度更快较慢
网络适应性适应网络波动对网络稳定性要求较高
资源占用较高
配置复杂度简单较复杂
离线模式支持支持不支持

如果你的系统需要快速、精准的时间同步,并且可能面临网络不稳定的情况,那么 Chrony 无疑是更好的选择。


总结

Chrony 是一款强大而灵活的时间同步工具,能够为你的服务器提供高精度的时间同步服务。无论是数据中心、云服务器,还是嵌入式设备,Chrony 都能轻松应对。通过简单的配置和管理,你可以让系统时间精准到微秒级,彻底告别时间不一致带来的烦恼!

如果你还没有尝试过 Chrony,现在就动手安装吧!相信它会成为你系统管理工具箱中的又一利器。

原创作者: ydswin 转载于: https://www.cnblogs.com/ydswin/p/18675228
本程式 (NTPClock) 之功能最主要是透过网路读取 NTP 时间伺服器之标準时间,於电脑萤幕上显示标準时间,并可立即更新系统时鐘,以同步於标準时间。 程式主要外观说明 1.1. 具标题列及选单列之应用程式外观:若接上网路,所显示為标準时间而非个人电脑上之时间 1.2. 不具标题列及选单列之应用程式外观 请注意: 1.2.1. 左下角 N 代表前一次网路连线时网路及伺服器一切正常 1.2.2. 使用者可以滑鼠左键双击显示区域即可切换此两种显示模式 或是在"显示"选单(或是滑鼠右键选单)中可以勾选"显示标题列" 基本选单内容 (由选单列进入) (各项选单之功能将於下一节起陆续介绍) 2.1. "校时" 选项 2.2. "显示" 选项 2.3. "关於…" 选项: 显示关於对话盒 2.4. "最小化" 选项: 桌面上不显示此应用程式缩小為工作列状态区的图示 右键快速选单内容 (在视窗内按滑鼠右键显示选单) 系统工作列 (Task bar) 显示及选单:工作列中不显示任何项目,但是状态列中将显示一图示如下图 以滑鼠左键点选图示()可开啟或关闭应用程式视窗 以滑鼠右键点选图示,在放开右键时可看到简易功能选单如下图 校时设定对话盒说明:点选选单中 "网路校时设定…" 选项如下 可开啟如下图之对话盒以设定所有网路校正标準时间之相关参数 5.1 选取网路通讯协定 SNTP (Simple Network Time Protocol): RFC 1769,考虑网路传输延迟,并用以修正校时结果可显示至毫秒。 Time (TCP/UDP) : RFC868,不考虑网路传输延迟,以秒為单位。 5.2 NTP 标準时间伺服器网址设定 使用者可以如下图右按 "向下箭号" 直接由列示主机网址挑选,也可以直接在栏位中键入主机网路位址 (例如:time.stdtime.gov.tw) 或是 IP 位址 (例如:210.59.157.10),如果希望将键入之主机位址存入主机网址列示中请按 "增加" 按键如下图 要将某一网址由列示盒中删除则请先选取此网址然后按 "删除" 按键即可,要将全部使用者设定之网址清除请按 "预设" 按键 要透过全球资讯网查询可用之 NTP 标準时间伺服器位址请按 "线上查询" 按键 5.3 "立即查询主机时间" 按键 按下 "立即查询主机时间" 按键会依照目前校时主机栏位设定之网址查询该时间伺服器之时间,回应之标準时间显示在本应用程式视窗画面中,并且如下图所示在选单中显示目前系统时间与标準时间之误差 (例如:系统超前标準时间 1.363 秒),如果更改系统时间方式设定為每次查询后自动更改系统时间则按下 "立即查询主机时间" 按键后程式在得到标準时间后会一併更改系统时间為标準时间。如果更改系统时间方式设定為每次查询后手动更改系统时间,则系统只会显示标準时间但是不设定系统之时间。 5.4 时间校正讯息区: 讯息栏所显示之时间為列印此讯息时之系统时间 (并不是标準时间) 5.5 查询主机时间方式设定区 本应用程式可以让使用者设定週期性自动查询主机标準时间,使用者需要利用上图中横向卷动轴选择一自动校正时间之查询间隔,范围可由 20 秒至 10 日。选取手动查询主机标準时间则使用者必须经由 "立即查询主机时间" 按钮来查询。 5.6 更改系统时间方式 选取 "每次查询后自动更改系统时间",如此程式在每次查询完毕后自动修改系统时间,使用者不需要手动修改系统时间 请注意: 每当使用者选取 "每次自动更改系统时间" 选项后有两个系统选项会因此而稍微变化 1. 快速选单及标準选单中选项 "更改系统时间(x.xxx 秒)" 无法手动运作,校时及更改系统时间一个动作全部完成。 2. 由於每次透过网路校正时间后立即修正系统时鐘,因此系统与标準时间误差基本上為一很小之数值, "以校正时差更改系统时间" 不具太大意义,因此取消此功能按键 5.7 "重设校时界面" 按钮: 本按钮使用之时机在於当本机器传送出去的校时网路讯号遗失或是当校时主机回应之讯号遗失时,使用者可以按此按键重设网路界面。另外当使用者指定之标準时间伺服器网址错误时 (Domain Name 伺服器无法查得其 IP 位址时),或是无网路连接时使用者也可以按此按键重设网路界面。 5.8 "结束设定" 按钮: 使用者按下此按钮可结束此网路校时设定对话盒并储存所有更改之设定值 5.9 本栏位显示目前系统设定之时区资料,时区设定错误将导致校时的结果有数小时之偏差,可使用 "更改系统时间及时区…" 按键更改之 5.10 "目前系统时间" 显示的是个人电脑系统 CMOS 内所维持的时间 (仅显示至秒),其与标準时间之差异显示於其上一栏位资料 (例如:下图中显示系统落后 24.140 秒,也就是标準时间约為11:31:44 秒) 如要修改系统时间為标準时间使用者需按下 "以校正时差更改系统时间"按键,若是时区设定错误或是希望手动修改系统日期或是时间,使用者需按下 "更改系统时间及时区…" 按键,即可显示下面画面 5.11 如下图所示,使用者仅需将滑鼠置於本对话盒中任一按键或是选项上静止 0.5 秒以上程式会自动提示此按键之功能,例如下图中 "选择 SNTP 為校时通讯协定" 程式主选单功能说明 6.1 "校时" 功能选项:按下后显示下图之选单 6.1.1 "查询标準时间" 功能选项:本功能与 5.3 中 "立即查询主机时间" 具相同之功能,啟动系统查询网路时间之动作 6.1.2 "更改系统时间(系统超前/落后xxxxx秒)" 功能选项:与 5.9 "以校正时差更改系统时间"按键功能相同,利用上一次查询校正之标準时间来修正本机器之系统时间 6.1.3 "网路校时设定" 功能选项:本选项啟动网路校时设定对话盒 (五),使用者可设定网路校时之参数 6.1.4 "设定系统时区…" 功能选项:与 5.9 "更改系统时间及时区…" 按键功能相同,可啟动系统提供之设定程式 (见 5.9) 6.1.5 "结束" 功能选项:结束本应用程式 6.2 "显示" 功能选项:按下后显示下图之选单 6.2.1 "日期与时间格式设定…" 对话盒 6.2.2 "字型选取…" 对话盒 6.2.3 "显示标题列" 功能选项:与滑鼠左键在显示区内双击有相同功能 6.2.4 "桌面最上层" 功能选项:选取后视窗将永远保持在桌面的最上层,不会被别的应用程式遮盖掉 6.2.5 "置於 左上/左下/右上/右下 角" 功能选项:可将显示视窗移至萤幕的四个角落,保持视窗之显示大小 6.3 "关於…" 功能选项:按下后显示下图之关於对话盒 6.4. "最小化" 选项:桌面上不显示此应用程式缩小為工作列状态区的图示 滑鼠右键快速选单功能说明 7.1 "查询标準时间" 选项:如 6.1.1 说明 7.2 "更改系统时间 (系统时间落后/超前xxx秒)" 选项:如 6.1.2 说明 7.3 "网路校时设定…" 选项:如 6.1.3 说明 7.4 "设定系统时区…" 选项:如 6.1.4 说明 7.5 "显示设定…" 选项:如 6.2 说明 7.6 "最小化" 选项:如 6.4 说明 7.7 "关於…" 选项:如 6.3.1 说明 7.8 "结束" 选项:结束本应用程式 工作列图示右键快速功能选单说明 8.1 "查询标準时间" 选项:如 6.1.1 说明 8.2 "更改系统时间 (系统时间落后/超前xxx秒)" 选项:如 6.1.2 说明 8.3 "结束" 选项:结束本应用程式 网路校时程序说明 9.1 网路校时时序简介 透过网路 (区域网路或是广域网路) 与 NTP 伺服器连结读取标準时间基本上有几个简单的步骤: 首先程式会进行 "查询 (Query)"的动作,向 Domain Name 伺服器主机查询使用者所指定主机 (例: clock.stdtime.gov.tw) 之 IP 位址 (例:210.59.157.30); 如果是使用 TCP 通讯协定的话会进行 "连结 (Connect)" 的动作以与校时主机建立连线; "送出讯息 (Send)":此步骤中程式準备一个网路讯息封包包含了要求传回时间的讯息,然后程式开始等待远端伺服器的回应; "读取回应讯息 (Receive)":由所回应的讯息封包内读取所要求的时间讯息。 9.2 程式状态显示 在视窗左侧我们以 Q 代表 "查询主机位址中" C代表 "连结中" (Time/TCP 才有此步骤) S 代表 "送出讯息中" W 代表 "等待回应中" 通常比较容易在 Q, C 以及 W 三个状态下耽搁,若是在 Q 中耽搁的话,常常是因為无法联络 Domain Name 伺服器,或是在 DNS 上查无所指定的时间伺服器之 IP 位址资讯,此时您必须耐心等候,大约两分鐘左右 DNS 查询会自动结束,请查明主机之网址或是检查网路连线及设定后重试。若是在 C 或是 W 中耽搁的话,可能是时间伺服器太忙碌了或是网路交通太拥挤而遗失了通讯封包,此时使用者可以稍待大约 25 秒若是仍无回应,程式会自动重设通讯界面,不管在任何状况下耽搁,使用者都可以直接按 "重设通讯界面" 按键来强迫系统结束目前所进行的动作并且重设通讯界面。 程式若是无法正常由网路校正时间,就会显示 F 在视窗的左下角 (如下图所示),因此画面上闪动显示的 F 代表上一次查询失败,程式没有得到标準时间。 若是透过网路校时成功的话视窗内会显示 N 如下图,若是看到 N 的话代表前一次透过网路校时顺利完成。 校正时间操作范例 10.1 设定全自动网路校时且修正系统时间 10.1.1 选取"网路校时设定…"功能选项 10.1.2 利用卷动轴设定自动查询间隔,如上图设為30分鐘 10.1.3 选取每次查询后自动更改系统时间 10.1.4 设定时间校正主机位址,如上图 clock.stdtime.gov.tw 10.1.5 查询主机时间方式选取週期性自动查询主机标準时间 10.1.6 按下 "结束设定" 按钮 10.2 手动校正时间并由程式自动修改系统时间 10.2.1 选取 "网路校时设定…" 功能选项 10.2.2 选取每次查询后自动更改系统时间 10.2.3 设定时间校正主机位址 10.2.4 查询主机时间方式选取手动查询主机标準时间 10.2.5 按下 "结束设定" 按钮 10.2.6 在系统选单中或右键选单中点选"查询标準时间"功能选项 程式设定值 请以 Windows 系统提供之登录 (Registry) 编辑程式 regedit 进行查询或修改,如下图中所示本程式之设定值储存於机码 HKEY_CURRENT_USER / Software / ChungHua Telecom Co., Ltd / NTPCLOCK / Settings 其内容如下图所示,第一次执行 NTPClock 时程式会自动做基本的设定,以后每次在程式对话盒中所做的修改都会自动储存於此。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值