Linux(CentOS)同步服务器时间之~chrony

2024-09-01 13:28

本文主要是介绍Linux(CentOS)同步服务器时间之~chrony,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

Chrony 是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpdChrony 提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony 的几个关键特性和使用场景:

Chrony的组成

  • chronyd:这是一个后台守护进程,负责与时间服务器通信,根据网络条件和系统时钟特性动态调整内核中的系统时钟,以最小化时间和频率误差。它能够智能地应对网络延迟、间歇性连接、时钟漂移以及虚拟环境中的不稳定性。
  • chronyc:这是一个命令行工具,为用户提供了一个界面来监控Chrony的性能、查看同步状态、调整配置参数以及手动执行某些操作,如立即同步或查看时间源的状态。

Chrony 的特点:

  1. 快速同步Chrony 使用特殊算法能快速减少系统时钟的偏移和频率误差,非常适合那些非24小时运行的系统,如虚拟机。
  2. 频率调整:能够更有效地应对时钟频率的快速变化,适合于拥有不稳定时钟的虚拟环境或受节能技术影响的系统。
  3. 节能技术兼容性:即使在节能技术导致CPU频率变化的系统中也能保持良好的时间同步。
  4. 灵活配置:支持多种同步源,包括NTP服务器、GPS接收器或其他参考时钟,以及手动时间输入。

Chrony 使用场景:

  1. 企业服务器:确保数据中心内的所有服务器保持时间同步,这对于日志记录、交易时间戳、数据一致性等至关重要。
  2. 桌面系统:提高个人电脑的时间精度,尤其是对于依赖精确时间的应用,如开发环境、金融交易软件或科学计算。
  3. 嵌入式系统和物联网设备:在资源有限的设备上,Chrony的低资源消耗特性使其成为理想的选择。
  4. 虚拟环境:在云服务器或虚拟机中,Chrony能有效应对由于虚拟化带来的时钟漂移问题。
  5. 高精度应用:科研机构、天文观测、卫星通信等领域,需要高度精确时间同步的应用场景。

综上,Chrony是一个强大且灵活的时间同步工具,适用于各种需要精确时间同步的环境,尤其在面对现代计算挑战如虚拟化、节能技术和网络波动时表现出色。

yum命令查看Chrony是否安装

要使用 yum 命令查看 Chrony 是否已经安装,可以执行以下命令:

yum list installed chrony

这条命令会列出所有已安装的软件包,并在结果中查找是否有 chrony。如果 chrony 出现在输出列表中,那么就意味着 Chrony 已经安装在你的系统上。如果没有找到 chrony,则表示它尚未安装。

yum命令安装 Chrony

对于 CentOS 7 及更高版本,Chrony 很可能是预装的。如果不是,或者你需要在较旧的 CentOS 版本上安装,可以使用 YUM 包管理器来安装 Chrony

sudo yum install chrony -y

对于 CentOS 8 及更高版本,使用 DNF(DNF 是 YUM 的替代品):

sudo dnf install chrony -y

Chrony常用命令

启动 Chrony 服务
sudo systemctl start chronyd

对于较老的系统,可能需要使用 service 命令:

sudo service chronyd start
停止 Chrony 服务
sudo systemctl stop chronyd
重启 Chrony服务
sudo systemctl restart chronyd
设置 Chrony 开机启动
sudo systemctl enable chronyd
禁用 Chrony开机启动
sudo systemctl disable chronyd
查看 Chrony 状态
sudo systemctl status chronyd
查看 Chrony 日志

默认的日志路径可能在 /var/log/chrony/chronyd.log,你可以使用如下命令查看:

sudo cat /var/log/chrony/chronyd.log

或使用 journalctl 查看实时日志:

sudo journalctl -u chronyd -f

Chronyc命令行工具

chronycChrony 的用户界面,用于监视和控制 Chrony 守护进程。一些常用的 chronyc 命令包括:

查看源状态
chronyc sources -v
命令返回内容
  .-- 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               
===============================================================================
返回参数解析
  1. Source mode:
    • ^: 表示此源是作为服务器(server)模式工作,意味着它是一个上游时间服务器。
    • =: 表示此源是作为对等体(peer)模式工作,意味着它与其他NTP服务器相互同步。
    • #: 表示本地时钟,即系统自身的时钟。
  2. Source state:
    • *: 当前已同步(current synced),表明此源正在被用来同步系统时间。
    • +: 组合使用(combined),意味着虽然此源未直接用于同步,但它对最终的时间调整有贡献。
    • -: 未组合使用(not combined),此源的信息未被合并进系统时间的计算中。
    • ?: 不可达(unreachable),表示网络不可达或通信失败。
    • x: 时间可能有误(time may be in error),可能是因为多次连续的测量不一致。
    • ~: 时间变化过大(time too variable),源的时间跳跃或变动太大,不适宜作为同步源。
  3. Reachability register (octal): 到达性寄存器,用八进制表示,反映了Chrony与时间源之间连接的稳定性。
  4. Log2(Polling interval): 轮询间隔的对数(以2为底)。这个值表示Chrony与时间源之间通信的频率,值越大表示轮询间隔越长。

接下来,具体到每行数据的结构:

  • MS: Mode and State,模式和状态,结合上述的Source mode和Source state。

  • Name/IP address: 时间源的名称或IP地址。

  • Stratum: 层级,表示此源在NTP层次结构中的位置。

  • Poll: 当前的轮询间隔,单位为秒。

  • Reach: 到达性,八进制表示的位图,展示了最近八次轮询的成功情况。

  • LastRx: 最后一次接收到响应的时间。

  • Last sample: 最后一个样本的时间戳及偏移量信息,格式为:

    • .xxxx [yyyy] +/- zzzz
      
      • xxxx: 调整后的偏移量(offset),即系统时钟调整后与该源的差异,单位为毫秒。
      • [yyyy]: 测量到的偏移量,未经过Chrony调整的原始偏移量。
      • +/- zzzz: 估算的误差范围,即系统时钟与该源时间的可能偏差范围,单位为毫秒。

根据以上信息,你可以判断每个时间源的健康状况、系统与之同步的情况,以及时间同步的整体质量。

立即同步时间

(使系统时钟尽快与参考时间源同步,而非平滑调整):

chronyc makestep
列出跟踪记录
chronyc tracking
命令返回内容
Reference ID    : CA701FC5 (dns2.synet.edu.cn)
Stratum         : 2
Ref time (UTC)  : Sat Jun 01 08:28:26 2024
System time     : 0.000122217 seconds fast of NTP time
Last offset     : +0.000072612 seconds
RMS offset      : 212.469070435 seconds
Frequency       : 3.279 ppm slow
Residual freq   : +0.003 ppm
Skew            : 0.157 ppm
Root delay      : 0.016848214 seconds
Root dispersion : 0.001658257 seconds
Update interval : 1026.4 seconds
Leap status     : Normal
返回参数解析
  1. Reference ID: 这是跟踪的参考时钟标识符,通常是一个IP地址或域名的一部分,这里是 CA701FC5 (dns2.synet.edu.cn),表明您的系统通过DNS名为 dns2.synet.edu.cn 的服务器进行时间同步。
  2. Stratum: 表示系统的NTP层级,这里是2,意味着您的系统是第二层时钟,直接与第一层(通常是原子钟或GPS时钟作为参考源的服务器)同步。
  3. Ref time (UTC): 参考时间,即Chrony最后一次成功同步时参考时钟的时间,这里是 “Sat Jun 01 08:28:26 2024”(注意:日期可能不正确,需确认)。
  4. System time: 系统时间与NTP时间的偏差,这里是 “+0.000122217 seconds fast”,表明系统时间比NTP标准时间快了约0.000122秒。
  5. Last offset: 上一次测量的偏移量,这里是 “+0.000072612 seconds”,即上次检查时系统时间比NTP时间快了约0.000073秒。
  6. RMS offset: 偏移量的均方根(Root Mean Square),长时间内的平均偏移量的波动大小,这里是 “212.469070435 seconds”,这个值异常大,通常应接近0且远小于1秒,表明之前可能存在严重的时间同步问题或配置不当。
  7. Frequency: 频率偏差,这里是 “3.279 ppm slow”,表示系统时钟比理想频率慢了3.279 parts per million(每百万分之3.279),通常Chrony会自动调整此频率。
  8. Residual freq: 残余频率偏差,即最近的频率调整后剩余的偏差,这里是 “+0.003 ppm”,意味着最近调整后略有加速。
  9. Skew: 频率偏差的趋势,这里是 “0.157 ppm”,若此值接近0表示系统时钟频率相对稳定。
  10. Root delay: 到参考时钟的总往返延迟,这里是 “0.016848214 seconds”,表明网络延迟较小。
  11. Root dispersion: 时间分散度,即参考时钟不确定性加上网络传输过程中的不确定度,这里是 “0.001658257 seconds”,也相对较低,表示时间同步质量较好。
  12. Update interval: Chrony与参考源更新时间间隔,这里是 “1026.4 seconds”,表示大约每17分钟轮询一次时间源。
  13. Leap status: 跳秒状态,这里是 “Normal”,表明没有即将发生的闰秒调整。

从上述输出看,特别需要注意的是 RMS offset 值异常大,这通常意味着在过去有一段时间系统时间与NTP时间之间存在巨大差异,或者可能是测量误差。如果这个问题持续存在,应检查网络连接、时间源的可靠性以及Chrony的配置。

查看帮助信息
chronyc help

以上就是 ChronyCentOS 上的基本安装方法和一些常用命令。根据实际情况和需求,可能还需要对 /etc/chrony.conf 配置文件进行适当的调整。

内网环境下的Chrony 服务配置

在无法联网的服务器集群中,要使集群中的机器通过一台中心节点进行时间同步,这样只需要定期更新中心节点的服务器时间,即可完成整个集群的时间同步,可以采用如下步骤,设置Chrony来实现内部时间同步:

设置中心节点(时间服务器)

首先确保在充当时间服务器的中心节点上安装Chrony

配置Chrony

编辑Chrony的配置文件 /etc/chrony.conf,使其作为本地时间源而非外部NTP服务器。可以注释掉所有外部时间服务器的行,并添加本地作为时间源的声明。

server 127.127.1.0         # Local clock
fudge 127.127.1.0 stratum 10

这里,127.127.1.0 是本地时钟的表示,fudge 命令设置了该时钟的层级为10,意味着它是不太可靠的时间源,但在没有其他外部源的情况下是必要的。

启动并启用Chrony服务
sudo systemctl start chronyd
sudo systemctl enable chronyd
手动校准时间

如果中心节点的时间不准确,首先需要手动将其调整到尽可能准确的时间,可以使用 date 命令或 ntpdate(如果安装了)从一个已知准确的时间源临时同步。

设置集群中其他节点
  1. 安装Chrony:在集群中的每台机器上安装Chrony

  2. 配置Chrony:编辑每台机器上的 /etc/chrony.conf 文件,添加中心节点作为时间源,假设中心节点的IP地址为 192.168.1.100,则添加:

    server 192.168.1.100 iburst
    

    iburst 参数告诉Chrony在启动时迅速进行多次查询以快速同步时间。

  3. 重启Chrony服务:在每台机器上重启Chrony服务以应用配置。

    sudo systemctl restart chronyd
    
验证时间同步

在所有节点上,使用 chronyc sources -v 查看时间源状态,确保它们都指向了中心节点,并且状态为 * 表示已同步。

注意事项

  • 确保集群内网络通信畅通,防火墙规则允许NTP(UDP 123端口)通信。
  • 定期手动检查中心节点的时间准确性,并必要时进行调整,因为所有集群节点都将依赖于此时间源。
  • 在高度敏感的环境中,可能还需要考虑物理时钟源(如GPS接收器)接入中心节点,以提高时间同步的准确性。

这篇关于Linux(CentOS)同步服务器时间之~chrony的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127062

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动