在现代计算机系统中,时间同步是至关重要的。无论是分布式系统、数据库集群,还是日志记录,时间不一致都可能导致严重的问题。而 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 服务器
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst # 允许本地网络访问
allow 192.168.1.0/24 # 当时间偏差超过 1 秒时,立即调整
makestep 1.0 3 # 使用本地时钟作为备用源
local stratum 10

配置完成后,启动 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:谁更适合你?

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

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


总结

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

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

Chrony:让你的服务器时间精准到微秒级的神器!的更多相关文章

  1. 通过自定义特性,使用EF6拦截器完成创建人、创建时间、更新人、更新时间的统一赋值(使用数据库服务器时间赋值,接上一篇)

    目录: 前言 设计(完成扩展) 实现效果 扩展设计方案 扩展后代码结构 集思广益(问题) 前言: 在上一篇文章我写了如何重建IDbCommandTreeInterceptor来实现创建人.创建时间.更 ...

  2. javascript小技巧:同步服务器时间、同步倒计时

    之前在网上看到有人提问,如何在页面上同步显示服务器的时间,其实实现方法有几种,可能一般人立马就想到可以使用Ajax每隔一秒去请求服务器,然后将服务器获取到时间显示在页面上,这样虽然能够实现,但存在一个 ...

  3. JS根据服务器时间倒计时

    原文链接:http://caibaojian.com/daojishi-2.html //获取服务器时间 function getSevertime(){ var xmlHttp = new XMLH ...

  4. JS实现Ajax---例:获取服务器时间

    Ajax在本质上是一个浏览器端的技术 XMLHttpRequest XMLHttpRequest对象 XMLHttpRequest对象在IE浏览器和非IE浏览器中创建的方法不同. 简而言之:它可以异步 ...

  5. php获取服务器时间的代码

    php获取服务器时间的代码. 用php的date函数即可来获取服务器上的时间:  <?php //将时区设置为中国 date_default_timezone_set("PRC&quo ...

  6. svn服务器时间与本地时间不同步解决

    在用svn的时候,由于svn的时间与本地不同步,导致每次看log总是需要对时间. 今天修改了svn服务器时间与本地同步.只需要修改svn服务器时间与本地时间相同即可,但要主要修改时区,不然会出现时间又 ...

  7. Unity 获取服务器时间 HTTP请求方式

    在写每日签到的时候,我居然使用的是本地时间...被项目经理笑哭了...., 如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法. 方法总结: 1. 使用HTTP请求获取服务器 ...

  8. 用 PS 调整服务器时间

    用 PS 调整服务器时间 Powershell 有一个命令用来调整计算机的时间, Set-Date -Adjust,但是,只能调整本地时间,不能调整远程的计算机时间. function AdjustD ...

  9. Linux服务器时间设置命令

    hwclock -r       # 读取BIOS 时间 hwclock -w     # 将当前系统时间写入BIOS date -s 2010/10/02   # 设置年月日 date -s 15: ...

  10. Javascript获取服务器时间

    //获取服务器时间 var getServerDate = function () {     var xmlHttpRequest = null,     serverDate = new Date ...

随机推荐

  1. .NET Core 泛型底层原理浅谈

    简介 泛型参考资料烂大街,基本资料不再赘述,比如泛型接口/委托/方法的使用,逆变与协变. 泛型好处有如下几点 代码重用 算法重用,只需要预先定义好算法,排序,搜索,交换,比较等.任何类型都可以用同一套 ...

  2. 1.Kubernetes简介

    Kubernetes简介 来源 bilibili尚硅谷K8S视频:https://www.bilibili.com/video/BV1GT4y1A756 中文官网:https://kubernetes ...

  3. .NET 9使用Scalar替代Swagger

    背景 .NET 9刚刚正式发布了,如果你创建一个空的Asp.Net Core 9.0的Web API项目,启动之后,你会惊讶地发现陪伴你多年的Swagger没有了!--这是因为ASP.NET Core ...

  4. SPI接口,如何对W25Q64进行读写操作?深度解析

    ​ 一.SPI概述 SPI(SerialPeripheralInterface)是一种同步串行通信协议,广泛应用于微控制器和外围设备之间的数据传输.它由摩托罗拉公司开发,具有全双工通信能力,即可以同时 ...

  5. Lua语法基础教程(上篇)

    今天我们来学习Lua语法基础教程.由于篇幅过长,将分为上中下三篇进行讲解,本篇为上篇. 一.初识Lua Lua 是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放.这意味着什么呢?这意味着 ...

  6. 解码OutOfMemoryError:PermGen Space

    本文由 ImportNew - Peter Pan 翻译自 javacodegeeks.如需转载本文,请先参见文章末尾处的转载要求. ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加 ...

  7. pyc文件花指令

    pyc花指令 常见的python花指令形式有两种:单重叠指令和多重叠指令. 以下以python3.8为例,指令长度为2字节. 单重叠指令: 例如pyc经过反编译后得到的东西为 0 JUMP_ABSOL ...

  8. PM2部署DotNet应用程序

    pm2简介 PM2是一个Node.js的进程管理工具,可以帮助开发者简化Node.js应用的部署和运维.它提供了进程守护.负载均衡.日志管理等功能,可以监控应用程序的运行状态,并在发生意外情况时自动重 ...

  9. Typroa主题替换

    Typroa主题替换 从这里下载主题 1.解压后: 2.拷贝到typroa的主题目录下(打开typroa -> 偏好设置 -> 外观 -> 打开主题文件夹) 3.拷贝后: 4.重新打 ...

  10. 【字符串哈希+二分】AcWing3508 最长公共子串

    题解 首先思考暴力枚举长度为 \(len∈[1, min(strlen(s), strlen(t))]\),最差情况下为字符串 \(s\) 和字符串 \(t\) 全为长度为 \(10000\) 的全英 ...