linux下NTP服务器实战(chrony软件)

2024-09-06 15:44

本文主要是介绍linux下NTP服务器实战(chrony软件),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux下NTP服务器实战(chrony软件)

记录linux下NTP服务器搭建及相关管理操作,使用chrony软件包安装部署。相比ntp服务,Chrony服务适用于更高精度、更高稳定性、自动化等场景。

1. 安装 chrony

在大多数Linux发行版上,chrony可以通过包管理器直接安装。

  • CentOS/RHEL:

    sudo yum install chrony   # CentOS 7 及之前的版本
    sudo dnf install chrony   # CentOS 8 和 Fedora
    
  • Ubuntu/Debian:

    sudo apt install chrony
    

chrony 守护进程的默认位置为 /usr/sbin/chronyd。命令行工具将安装到 /usr/bin/chronyc

2. 配置chrony

chrony的配置文件通常位于/etc/chrony.conf。要将机器配置为NTP服务器,需进行如下修改:

编辑 /etc/chrony.conf 文件:

sudo vim /etc/chrony.conf
  1. 允许网络客户端访问:
    找到并修改或添加以下配置,允许特定网段或所有网络客户端访问:

    allow 192.168.0.0/24   # 允许指定网段访问
    allow all              # 允许所有客户端访问
    
  2. 选择上游时间源:
    可以设置NTP服务器来同步本地时间。以下是一些常用的NTP服务器:

    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    
  3. 设置NTP服务器为本地时间主机:
    如果此NTP服务器在不与外界同步的情况下应保持提供时间服务,可以启用本地时间作为时间源:

    local stratum 10
    

    这里设置的stratum值较高,以避免本地时间被优先用于其他时间服务器。

配置文件示例:

[root@ntp ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 10.210.10.220 iburst
# 指定了一个 NTP 服务器的地址(10.210.10.220)。iburst 选项使得当客户端第一次与服务器进行通信时,如果无法立即建立连接,客户端会发送一组加速的请求(通常为 4 个包),以加快与时间服务器的同步速度。# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# driftfile 参数指定了存储系统时钟漂移数据的文件。系统定期测量其内部时钟的漂移(增快或减慢的速率)并记录到该文件中,这可以帮助 chrony 更好地调整系统时钟。# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# 允许在前 3 次时间更新时,如果系统时钟的偏差超过 1 秒,chrony 可以直接调整系统时钟,而不是渐进调整。这在系统启动后可以快速纠正较大的时间偏差。# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# 启用内核的 RTC(实时时钟)同步。当系统时钟与 NTP 服务器同步时,内核会自动同步硬件时钟(通常是 BIOS 中的时钟)与系统时钟,以确保即使系统关机,硬件时钟也能保持准确。# 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
# 如果启用,将设置系统调整时钟时所需的最少可用时间源数目为 2。这有助于确保同步的时间更为可靠。# Allow NTP client access from local network.
# allow 192.168.0.0/16	# 允许特定的网络范围(如 192.168.0.0/16)内的客户端访问本地 NTP 服务。
# 默认情况下,远程的 NTP 客户端是无法与该 chrony 服务器进行时间同步的。需要通过 allow 指令明确地允许特定的网络范围或 IP 地址进行时间同步。
allow all  # 允许所有客户端同步时间。
# Serve time even if not synchronized to a time source.
#local stratum 10
# 如果启用,即使本机没有与外部时间源同步,也会向网络上的其他设备提供时间服务,并将本地服务器的 stratum 设置为 10(即优先级较低的时间源)。# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys
# 如果启用,它会指定一个包含 NTP 身份验证密钥的文件。这用于在服务器和客户端之间进行身份验证,确保同步时间的安全性。# Specify directory for log files.
logdir /var/log/chrony
# logdir 参数指定了 chrony 写日志的目录路径。在这里,日志文件将存储在 /var/log/chrony 目录下。 	# Select which information is logged.
#log measurements statistics tracking
# 如果启用,chrony 会记录测量值、统计信息以及时间跟踪等详细日志信息。

3. 启动chrony服务

保存配置文件后,启动并启用chrony服务:

sudo systemctl start chronyd
sudo systemctl enable chronyd

4. 检查NTP服务状态

确认chrony正在运行并同步时间:

chronyc tracking

此命令会显示本地系统与NTP服务器的同步状态。

5. 客户端配置

在客户端机器上,确保chronyntpd安装完成并且配置好指向你的NTP服务器:

编辑客户端的/etc/chrony.conf/etc/ntp.conf,添加你的NTP服务器IP地址:

server <NTP服务器的IP地址> iburst

保存后,重启客户端的chronydntpd服务:

sudo systemctl restart chronyd  # 或 ntpd

6. 验证同步

在客户端上,可以通过以下命令检查是否与服务器同步:

chronyc sources

这会列出当前的时间源,确保NTP服务器显示为活动时间源。

示例输出:

210 Number of sources = 4
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- time1.google.com              1   6    377    48   -176us[ -199us] +/-  15ms
^* time2.google.com              1   6    377    47   +245us[ +220us] +/-  13ms
^- time3.google.com              1   6    377    47   -310us[ -332us] +/-  16ms
^+ time4.google.com              1   6    377    48   +129us[ +105us] +/-  14ms
[root@dns ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 10.210.10.45                  5   6    37    15    +18us[+1062us] +/-   11ms

字段解释:

  • MS: 这列表示当前时间源的状态标记。

    • ^ 表示该时间源是NTP服务器。
    • * 表示当前使用的时间源(同步的主源)。
    • + 表示备用时间源,可能被选为候选同步源。
    • - 表示被排除的时间源,当前不会同步该时间源。
    • = 表示该时间源是peer节点。
    • ?:表示该服务器的状态未知,可能无法到达或正在等待响应。
    • x:表示该时间源的时间可能有错误,因此不能被信任。
    • ~:表示该时间源的时间变化太大,波动性过高,无法稳定同步。
  • Name/IP address:

    这是时间源的主机名或IP地址。它显示的是你系统上配置的时间源。

  • Stratum:

    NTP层级值,表示时间源的层次。stratum越低,时间源越靠近参考时钟(例如原子钟)。本地时钟通常会被设置为较高的stratum值(如15),表示优先级较低。

  • Poll:

    表示轮询间隔,单位是秒的对数(2^Poll)。在这个示例中,值6表示当前的轮询间隔是2^6 = 64秒。

  • Reach:

    这是一个八位的二进制数值,表示最近的查询是否成功。377的十六进制表示是11111111,表示最近8次查询全部成功。

  • LastRx:

    上次接收到NTP服务器响应的时间,单位是秒。

  • Last sample:

    该列表示时间偏差(时间源与本地时钟的差异)和误差范围:

    • +245us[ +220us]:表示偏差为+245微秒,括号内表示的是过滤后的估计值+220微秒
    • +/- 13ms:这是该时间源的误差范围。

7. chronyc相关命令

  1. chronyc tracking

    • chronyc 跟踪,查看本地系统的时间同步状态,包括与时间源的偏差、同步源的 stratum 层级、本地时钟漂移等信息。
    • 输出示例:
      Reference ID    : 203.0.113.1 (ntp.example.com)
      Stratum         : 3
      Ref time (UTC)  : Tue Aug 29 12:00:00 2024
      System time     : 0.000000001 seconds fast of NTP time
      Last offset     : -0.000000002 seconds
      RMS offset      : 0.000000003 seconds
      Frequency       : 12.345 ppm slow
      Residual freq   : -0.001 ppm
      Skew            : 0.005 ppm
      
  2. chronyc sources

    • 显示当前配置的所有时间源的信息,包括其状态、stratum 层级、延迟、偏差等。
    • 输出示例:
      MS Name/IP address         Stratum Poll Reach LastRx Last sample
      ===============================================================================
      ^* ntp.example.com              2   6    377    30   -240us[ -310us] +/-  16ms
      ^+ ntp2.example.com             2   6    377    31   -124us[ -154us] +/-  12ms
      

    可以指定可选的 -v 参数来打印更详细的信息。在这种情况下,会输出额外的标头行显示字段含义的信息。

  3. chronyc sourcestats

    • 显示时间源的统计信息,包括标准偏差、延迟等。
    • 输出示例:
      Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
      ===============================================================================
      ntp.example.com            12   6   198    +0.000     0.005  +12ns    16us
      

    可以使用可选参数 -v 来包括详细信息。在这种情况下,会输出额外的标头行显示字段含义的信息。

  4. chronyc ntpdata

    • 查看与某个特定时间源的NTP数据,包括该源的stratum、延迟、偏差、抖动等详细信息。
    • 用法:
      chronyc ntpdata ntp.example.com
      
  5. chronyc sources -v

    • 以详细模式显示时间源的信息。
    • 输出示例:
      210 Number of sources = 2
      MS Name/IP address            Stratum Poll Reach LastRx Last sample
      ===============================================================================
      ^* ntp.example.com                 2   6   377   30    -240us[ -310us] +/-  16ms
      ^+ ntp2.example.com                2   6   377   31    -124us[ -154us] +/-  12ms
      
  6. chronyc activity

    • 显示当前chrony服务的活动状态,如使用的时间源数量、已处理的请求数量等。
    • 命令:
      chronyc activity
      
  7. chronyc makestep

    • 强制进行时间跳步校正。适用于时间偏差较大(通常大于 1 秒)的情况。
    • 命令:
      chronyc -a makestep
      
  8. chronyc waitsync

    • 等待本地系统与NTP源同步完成,通常用于系统启动时确保时间已同步。
    • 命令:
      chronyc waitsync
      
  9. chronyc clients

    • 显示已连接到此 NTP 服务器的客户端信息。
    • 命令:
      chronyc clients
      
  10. chronyc serverstats

    • 显示当前NTP服务器的统计信息,包括已处理的NTP请求数量、拒绝的请求数量等。
    • 命令:
      chronyc serverstats
      
  11. chronyc add server <server_ip>

    • 动态添加一个新的NTP服务器作为时间源。
    • 命令:
      chronyc add server ntp.example.com iburst
      
  12. chronyc delete server <server_ip>

    • 动态删除一个时间源。
    • 命令:
      chronyc delete server ntp.example.com
      

说明:

动态修改不会永久保存,重启 Chrony 后会丢失。要永久更改,请编辑配置文件。

8. ntp服务与chrony服务对比

Chrony服务和NTP服务对比:

时间同步服务使用场景时间同步精度稳定性简介
Chrony服务适用于高精度、高稳定性、自动化等场景。较高能够更好地适应高延迟和不稳定的网络环境。Chrony是一个实现网络时间协议(NTP)的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。更多信息,请参见Chrony。
NTP服务适用于大多数无需太高精度要求的普通场景。正常仅能适应一定程度的网络不稳定。NTP是一种经典的时间同步服务,是NTP协议的一个实现。NTP适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。更多信息,请参见NTP。

ntp服务文件和chrony服务文件对比:

ntp namechrony name
/etc/ntp.conf/etc/chrony.conf
/etc/ntp/keys/etc/chrony.keys
ntpdchronyd
ntpqchronyc
ntpd.servicechronyd.service
ntp-wait.servicechrony-wait.service

将ntp服务器迁移到chrony服务器:

在chrony包(/usr/share/doc/chrony)的文档中,包含了一个名为ntp2chrony.py的Python脚本。该脚本用于自动将现有的NTP配置转换为chrony配置。详情参考下面链接:

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/configuring-time-synchronization_configuring-basic-system-settings#proc_migrating-to-chrony_using-chrony-to-configure-ntp

9. 相关资料

  1. Chapter 18. Configuring NTP Using the chrony Suite | Red Hat Product Documentation

这篇关于linux下NTP服务器实战(chrony软件)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

nginx配置多域名共用服务器80端口

《nginx配置多域名共用服务器80端口》本文主要介绍了配置Nginx.conf文件,使得同一台服务器上的服务程序能够根据域名分发到相应的端口进行处理,从而实现用户通过abc.com或xyz.com直... 多个域名,比如两个域名,这两个域名其实共用一台服务器(意味着域名解析到同一个IP),一个域名为abc