当前位置: 首页 > news >正文

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软件)

linux下NTP服务器实战(chrony软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用chrony软件包安装部署。相比ntp服务&#xff0c;Chrony服务适用于更高精度、更高稳定性、自动化等场景。 1. 安装 chrony 在大多数Linux发行版上&#xff0c;chrony可以通过包管理…...

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…...

Leetcode面试经典150题-74.搜索二维矩阵

解法都在代码里&#xff0c;不懂就留言或者私信 二分查找&#xff0c;比较简单 class Solution {/**解题思路&#xff1a;每一行有序、每一列也有序&#xff0c;只是整体不是严格有序的&#xff0c;那我们需要找一个点&#xff0c;只能往两个方向走&#xff0c;往一个方向走是…...

【数字集成电路与系统设计】基本的组合逻辑电路

目录 一、简单例子引入 1.1 端口声明 1.1.2 Verilog实现 1.1.3 Chisel实现 逐行解释 1.2 内部逻辑实现 1.2.1 Verilog实现 1.2.2 Chisel实现 Chisel 关键点解释 1.3 常用的硬件原语 二、Chisel主要数据类型介绍 2.1 数据类型 2.2 数据宽度 2.3 数据转换 2.4 运算…...

11. 建立你的第一个Web3项目

11. 建立你的第一个Web3项目 在这一部分&#xff0c;我们将带你一步步地建立一个简单的Web3项目&#xff0c;从环境搭建到智能合约的创建与部署&#xff0c;再到开发一个去中心化应用&#xff08;dApp&#xff09;并与智能合约交互。这是你迈向Web3开发的第一步。 1. 环境搭建…...

衡石分析平台使用手册-容器部署

容器部署​ 本文介绍如何在容器上部署 HENGSHI SENSE&#xff0c;以及部署后如何进行版本升级和数据备份。 部署前准备工作​ 单机部署前&#xff0c;请完成如下准备工作。 1.检查 docker 的环境。需要满足 Docker 版本 > 17.09安装 docker-compose。 2.获取并导入离线…...

静态库,动态库以及makefile基础

一.静态&#xff08;链接&#xff09;库 libfun.a 静态链接进可执行程序 可执行程序偏大 运行时只需要可执行程序即可 生成静态库步骤 gcc -c fun.c -o fun.o ar rcv libfun.a fun.o //需要用.o文件生成数据库 运行 gcc main.c libfun.a 二.动态库 libfun.so 动…...

Python基础语法(1)上

常量和表达式 我们可以把 Python 当成一个计算器&#xff0c;来进行一些算术运算。 print(1 2 - 3) print(1 2 * 3) print(1 2 / 3) 这里我们可能会有疑问&#xff0c;为什么不是1.6666666666666667呢&#xff1f; 其实在编程中&#xff0c;一般没有“四舍五入”这样的规则…...

使用 Python/java/go做一个微信机器人

E云是一套完整的的第三方服务平台&#xff0c;包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块&#xff0c;本文档主要讲述个微API服务相关&#xff0c;以下简称API&#xff0c;它能处理用户微信中的各种事件&#xff0c;提供了开发者与个微对…...

【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译

可根据用户需求更换&#xff0c;百变定制&#xff0c;高端产品无忧&#xff01; 迅为IMX6Q兼容四核商业级 、双核商业级、四核工业级 、更可提供i.MX6Q家族PLUS版本核心板。 核心板采用十层PCB沉金盲埋设计&#xff0c;更能保证电磁兼容与系统稳定。 公众号&#xff1a;迅为电…...

测评造假?Mistral首个多模态模型Pixtral 12B发布

测评造假&#xff1f;Mistral首个多模态模型Pixtral 12B发布&#xff01; 近日&#xff0c;法国人工智能&#xff08;AI&#xff09;初创公司Mistral于9月11日宣布推出其首款多模态AI大模型——Pixtral 12B&#xff0c;成功吸引了全球科技界的广泛关注。这款集图像与文本处理能…...

【Java-简单练习题】

1.”AABBBCCC“>>"A2B3C3" public class Test6 {public static void main(String[] args) {String ns "AABBBCCCC";String retcompress(ns);System.out.println(ret);}public static String compress(String str) {StringBuilder ret new StringB…...

Notepad++ 下载安装教程

目录 1.下教程 2.安装教程 1.下教程 Downloads | Notepad (notepad-plus-plus.org) 进入下载地址后选择最新版点击连接 点击链接后&#xff0c;向下滑动&#xff0c;下载适合自己电脑版本的安装包 这里大家没有梯子可能打不开页面&#xff0c;可以直接从本文开头下载。 2.安…...

shader 案例学习笔记之smoothstep函数

参考&#xff1a;smoothstep 用来生成0-1的平滑过渡值 smoothstep函数源码实现&#xff1a; float smoothstep(float t1, float t2, float x) {// Scale, bias and saturate x to 0..1 rangex clamp((x - t1) / (t2 - t1), 0.0, 1.0); // Evaluate polynomialreturn x * x *…...

大模型的第一个杀手级应用场景出来了

大家终于都意识到大模型首先改变的是软件行业自己&#xff0c;而软件的根基是代码生成。代码生成第一波就是AI辅助开发&#xff0c;这个会是大模型第一个杀手级应用。大家苦苦逼问自己的大模型杀手级应用&#xff0c;为什么会是辅助编程&#xff0c;这里说下什么&#xff1a; 必…...

不允许有程序员不知道这款AI代码扩写工具

01CodeGeeX编程大模型 在介绍什么是codeGeeX之前&#xff0c;先上图。 想象一下&#xff0c;自己写代码的时候旁边有个专家助手&#xff0c;随时跟你解释前面别人写的代码是什么意思&#xff0c;有什么缺陷。在你自己写的时候也可以每一步进行代码提示和代码扩写&#xff0c;是…...

java 的list集合排序自定义元素

在 Java 中&#xff0c;可以对包含自定义元素的List集合进行排序。通常可以使用Collections.sort()方法结合自定义的比较器来实现。 一、定义包含自定义元素的类 假设我们有一个表示学生的类Student&#xff1a; class Student {private int id;private String name;private …...

【数学建模】2024数学建模国赛经验分享

文章目录 一、关于我二、我的数模历程三、经验总结&#xff1a; 一、关于我 我的CSDN主页&#xff1a;https://gxdxyl.blog.csdn.net/ 2020年7月&#xff08;大二结束的暑假&#xff09;开始在CSDN写作&#xff1a; 阿里云博客专家&#xff1a; 接触的领域挺多的&#xff…...

Scala尾递归解决爆栈问题

引言 我在上篇中详细的讲了递归的一系列问题&#xff0c;多路递归&#xff0c;爆栈问题&#xff0c;尾递归优化等&#xff0c;今天就实际演示一下尾递归是如何解决爆栈问题的&#xff0c;以及它的原理是什么&#xff1f; 支持尾递归优化的语言 尾递归是一种特殊的递归形式,如果…...

【观察者】设计模式:构建灵活且响应式的软件系统

引言 在软件开发中&#xff0c;我们经常面临需要在多个对象之间进行通信的挑战。特别是当一个对象的状态发生变化时&#xff0c;我们希望所有依赖于这个状态的对象都能自动更新。这就是观察者设计模式大显身手的地方。 简介 观察者模式是一种行为设计模式&#xff0c;它定义…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...