【Linux系列】Chrony时间同步服务器搭建完整指南

news2024/11/29 7:10:44

1. 简介

Chrony是一个用于Linux系统的高效、精准的时间同步工具,通常用于替代传统的NTP(Network Time Protocol)服务。Chrony不仅在系统启动时提供快速的时间同步,还能在时钟漂移较大的情况下进行及时调整,因此广泛应用于生产环境中。尤其是在虚拟化环境、高负载服务器和高精度要求的场景下,Chrony具有较大的优势。
在这里插入图片描述

2. 有了NTP,为什么还需要用Chrony?

NTP(Network Time Protocol)是一种经典的时间同步协议,用于保持计算机时钟与UTC(世界协调时间)同步。虽然NTP在大多数情况下表现良好,但在某些特殊情况下(如频繁重启的服务器、虚拟化环境、低网络带宽等),它的同步速度较慢,且在处理时钟漂移方面的精度和效率较低。

Chrony是NTP的一个现代化替代品,它可以:

  • 在启动时快速同步时间。
  • 在系统时钟漂移较大时进行修正。
  • 在离线环境中仍然能够提供本地时间同步。
  • 高效地处理虚拟化环境中的时间同步。

因此,Chrony在现代化的运维环境中,尤其是在高负载和虚拟化场景下,提供了更高的同步精度和更优的性能。

3. Chrony服务器端安装与配置

在CentOS 7及以上版本中,Chrony默认已经安装,且作为系统的默认时间同步工具。你可以通过以下命令确认是否已安装:

rpm -qa | grep chrony

如果没有安装,可以通过以下命令安装:

yum install chrony

配置文件

Chrony的主要配置文件是/etc/chrony.conf,我们可以对其进行优化配置,以确保系统的时间同步更加精准、可靠。

以下是一个默认的chrony.conf配置文件示例:

# Use public servers from the pool.ntp.org project.
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# 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

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking

主要配置说明

  • server:指定NTP服务器地址,iburst选项用于首次同步时快速发送多个请求。
  • driftfile:保存系统时钟漂移信息,用于后续时钟校正。
  • makestep:当时钟偏差较大时,允许跳跃式校正,1.0 3表示偏差大于1秒时,最多进行三次修正。
  • rtcsync:确保系统时钟与硬件实时时钟(RTC)同步。
  • hwtimestamp:启用硬件时间戳功能(可选)。
  • minsources:指定最少需要多少个同步源进行时间校正(可选)。
  • logdir:指定日志文件存放路径,便于后续监控和分析。

配置优化建议

为了提高Chrony的时间同步精度和稳定性,可以做如下优化:

1. 优化时间源选择

选择多个高质量的NTP服务器进行时间同步,并确保这些服务器的稳定性和低延迟。

# CentOS NTP Servers
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# Apple NTP Servers
server time1.apple.com iburst
server time2.apple.com iburst
server time3.apple.com iburst
server time4.apple.com iburst
server time5.apple.com iburst

# Google NTP Servers
server time1.google.com iburst
server time2.google.com iburst
server time3.google.com iburst
server time4.google.com iburst

# Pool.ntp.org NTP Servers (Global)
server pool.ntp.org iburst

# China NTP Servers (Local)
server cn.pool.ntp.org iburst

# Aliyun NTP Servers
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server time1.aliyun.com iburst
server time2.aliyun.com iburst
  • 使用多个时间源以确保同步的可靠性。
  • iburst选项能在首次连接时发送多个请求,加速同步。
2. 减少时钟漂移影响

Chrony会记录时钟漂移并根据漂移数据进行同步。确保driftfile配置项设置正确,并定期检查漂移文件。

driftfile /var/lib/chrony/drift
3. 优化makestep参数

makestep参数允许Chrony在时钟偏差较大时进行修正,可以根据实际需求调整该值:

makestep 1.0 3
  • 1.0表示允许1秒以内的修正,3表示最多进行三次修正。
4. 启用硬件时间戳

如果硬件支持,可以启用硬件时间戳功能,进一步提高同步精度。

hwtimestamp *
5. 设置最小源数量

可以设置minsources来确保同步的准确性和可靠性,要求至少需要多个同步源。

minsources 2
6. 本地时钟作为备用源

当没有可用的NTP源时,可以回退到本地时钟进行同步。你可以设置local stratum来指定备用时钟的优先级。

local stratum 10
7. 限制访问范围

如果需要限制哪些网络可以访问Chrony进行时间同步,可以配置allow选项。

allow 192.168.1.0/24
8. 启用日志记录

可以启用详细的日志记录,以便后续跟踪和诊断同步问题。

logdir /var/log/chrony
log measurements statistics tracking
9. 启用NTP认证(可选)

如果需要更高的安全性,可以启用NTP认证,确保同步的时间数据未被篡改。

keyfile /etc/chrony.keys

配置文件示例

# 使用多个时间源进行同步
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

# 记录时钟漂移文件
driftfile /var/lib/chrony/drift

# 设置最大偏差为1秒,允许最多三次步进修正
makestep 1.0 3

# 启用系统时钟与硬件实时时钟同步
rtcsync

# 启用硬件时间戳功能
hwtimestamp *

# 最少需要两个同步源进行时间校正
minsources 2

# 如果没有可用的时间源,使用本地时钟作为备用
local stratum 10

# 允许本地网络访问Chrony服务
allow 192.168.1.0/24

# 配置日志存储路径并启用日志记录
logdir /var/log/chrony
log measurements statistics tracking

# 启用NTP认证(如果需要)
# keyfile /etc/chrony.keys

3. 启动Chrony服务(Server端)

systemctl start chronyd
systemctl enable chronyd

4. Chrony客户端安装与配置

如果你需要将Chrony作为客户端进行时间同步,请按照以下步骤配置:

1. 安装Chrony(如果未安装)

yum install chrony

2. 编辑配置文件/etc/chrony.conf,并设置服务器配置为您自己的Chrony服务器:

server chrony1.xxx.com iburst
server chrony2.xxx.com iburst

确保至少配置两个Chrony服务器节点,以保证高可用性。

3. 启动Chrony服务(Client端)

systemctl start chronyd
systemctl enable chronyd

4. 检查同步状态:

chronyc tracking

5. 监控与告警

Chrony提供了丰富的命令和日志功能,可以用来监控时间同步状态,并进行必要的告警配置。通过这些工具,管理员能够实时了解系统时钟的同步情况以及潜在的时间同步问题。

5.1 使用Chrony命令监控同步状态

chronyc tracking
该命令可以查看系统当前的时间同步状态,包括当前时钟偏差、上次同步时间、偏差稳定性等信息。常用来检查Chrony服务是否正常同步系统时间。

chronyc tracking

输出示例:

Reference ID    : C0A89693 (chrony1.xxx.com)
Stratum         : 4
Ref time (UTC)  : Thu Nov 28 04:59:55 2024
System time     : 0.000000084 seconds fast of NTP time
Last offset     : -0.000120594 seconds
RMS offset      : 0.000120594 seconds
Frequency       : 7.614 ppm slow
Residual freq   : -29.260 ppm
Skew            : 1.438 ppm
Root delay      : 0.019204240 seconds
Root dispersion : 0.007626829 seconds
Update interval : 2.0 seconds
Leap status     : Normal
  • System time:表示系统时间与NTP时间的偏差。
  • RMS offset:表示时间同步的精度。
  • Update interval:表示时间同步的间隔。

chronyc sources该命令可以查看Chrony当前使用的时间源状态,包括每个源的延迟、偏差和质量等信息。

chronyc sources

输出示例:

210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^+ chrony2.xxx.com             1   7   377    28   +946us[ +946us] +/-   30ms
^* chrony1.xxx.com             1   6    37    26   +516us[-1728us] +/-   30ms
  • MS:表示源的状态,*表示当前正在使用的时间源,+表示备用源。
  • Last sample:表示最后一次获取到的时间样本。

5.2 配置日志记录与告警

Chrony通过logdir配置项启用了日志记录功能。可以通过监控日志文件并结合现有的监控平台(如Prometheus、Zabbix、Nagios等)设置告警。以下是Chrony日志记录配置的示例:

logdir /var/log/chrony
log measurements statistics tracking
  • log measurements:记录时间同步的测量数据。
  • log statistics:记录时间源的统计数据。
  • log tracking:记录系统时钟的跟踪信息。

日志记录后,可以通过设置监控工具,定期检查/var/log/chrony目录中的日志文件,若发现系统时钟偏差较大或时间同步异常,可以触发告警。

举例: 如果你使用Zabbix作为监控工具,可以创建一个基于Chrony日志的触发器,来监控时钟同步的状态。例如,配置一个告警,当chronyc tracking中的RMS offset值超过某个阈值时触发告警。

5.3 使用Prometheus监控Chrony状态

Chrony服务对于关键业务系统尤为重要,尤其是在金融等行业,时间不同步可能导致日终结算异常、交易错误等问题。因此,必须对Chrony同步进行监控。
在这里插入图片描述

1. 监控业务服务器与监控服务器的时间差

为避免Chrony同步异常,可以设置监控项,确保业务服务器与监控服务器的时间差在合理范围内。如果超过500毫秒,应该触发告警。

2. 监控Chronyd服务是否正常运行

对于监控Chrony服务的稳定性,可以通过Chrony exporter等监控工具来实时监控Chrony服务。如果发现Chronyd服务停止运行,及时发出告警,避免对业务造成影响。

3. 独立配置监控服务器与业务服务器的Chrony同步

为了避免因单一Chrony服务器故障而导致的同步问题,建议分别为监控服务器和业务服务器配置不同的Chrony服务器。即使共享同一Chrony服务器,也应保证服务的高可用性。

5.4 配置告警

结合上述日志监控和Prometheus的收集,可以在系统中设置告警规则。常见的告警场景包括:

时钟偏差超过阈值:例如,chronyc tracking中的System time偏差大于0.1秒时。
同步源不可用:如果chronyc sources显示同步源不可达,系统应发出警报。
告警可以配置为短信、邮件或通过企业微信等消息平台发送,确保运维人员能及时处理时间同步问题。

6. Chrony常用命令

Chrony提供了多个有用的命令,可以帮助管理员检查时间同步状态、管理时间源、调试问题等。

6.1 chronyc tracking

查看当前的时间同步状态,包括时钟偏差、更新时间间隔、同步质量等信息。

chronyc tracking

6.2 chronyc sources

查看当前系统使用的NTP时间源的状态,包括延迟、同步质量等。

chronyc sources

6.3 chronyc sourcestats

查看NTP源的详细统计信息。

chronyc sourcestats

6.4 chronyc makestep

强制Chrony立即对系统时钟进行步进修正,通常用于在时钟偏差过大的情况下。

chronyc makestep

7. 总结

Chrony是一个现代化的时间同步工具,比传统的NTP更适合高负载、虚拟化环境以及对时间同步精度要求较高的场景。通过合理配置Chrony,可以大大提高系统时钟的同步精度,减少时钟漂移,并确保在网络不稳定的情况下仍能维持准确的系统时间。

本文介绍了如何在CentOS环境下安装和配置Chrony,包括常见的优化配置、客户端配置、监控与告警方法以及常用命令。通过结合日志记录、Prometheus等工具,可以对Chrony的状态进行实时监控,确保系统时间的高精度与高可用性。

希望这篇文章能帮助你更好地理解和使用Chrony,在运维中保持精准的时间同步,确保系统的稳定运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2249585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库日志

MySQL中有哪些日志 1,redo log重做日志 redo log是物理机日志,因为它记录的是对数据页的物理修改,而不是SQL语句。 作用是确保事务的持久性,redo log日志记录事务执行后的状态,用来恢复未写入 data file的已提交事务…

【vue for beginner】Vue该怎么学?

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 vue2 和 vue3 Vue2现在正向vue3逐渐更新中,官方vue2已经不再更新。 这个历程和当时的pyt…

【Ubuntu 24.04】How to Install and Use NVM

参考 下载 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash激活 Activate NVM: Once the installation script completes, you need to either close and reopen the terminal or run the following command to use nvm immediately. exp…

SeggisV1.0 遥感影像分割软件【源代码】讲解

在此基础上进行二次开发,开发自己的软件,例如:【1】无人机及个人私有影像识别【2】离线使用【3】变化监测模型集成【4】个人私有分割模型集成等等,不管是您用来个人学习 还是公司研发需求,都相当合适,包您满…

Python轴承故障诊断 (21)基于VMD-CNN-BiTCN的创新诊断模型

往期精彩内容: Python-凯斯西储大学(CWRU)轴承数据解读与分类处理 Pytorch-LSTM轴承故障一维信号分类(一)-CSDN博客 Pytorch-CNN轴承故障一维信号分类(二)-CSDN博客 Pytorch-Transformer轴承故障一维信号分类(三)-CSDN博客 三十多个开源…

使用docker搭建hysteria2服务端

源链接:https://github.com/apernet/hysteria/discussions/1248 官网地址:https://v2.hysteria.network/zh/docs/getting-started/Installation/ 首选需要安装docker和docker compose 切换到合适的目录 cd /home创建文件夹 mkdir hysteria创建docke…

基于Java实现的潜艇大战游戏

基于Java实现的潜艇大战游戏 一.需求分析 1.1 设计任务 本次游戏课程设计小组成员团队合作的方式,通过游戏总体分析设计,场景画面的绘制,游戏事件的处理,游戏核心算法的分析实现,游戏的碰撞检测,游戏的反…

课题组自主发展了哪些CMAQ模式预报相关的改进技术?

空气污染问题日益受到各级政府以及社会公众的高度重视,从实时的数据监测公布到空气质量数值预报及预报产品的发布,我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

深入解析下oracle date底层存储方式

之前我们介绍了varchar2和char的数据库底层存储格式,今天我们介绍下date类型的数据存储格式,并通过测试程序快速获取一个日期。 一、环境搭建 1.1,创建表 我们还是创建一个测试表t_code,并插入数据: 1.2,…

【论文复现】SRGAN

1. 项目结构 如何生成文件夹的文件目录呢? 按住shift键,右击你要生成目录的文件夹,选择“在此处打开Powershell窗口” 在命令窗口里输入命令“tree”,按回车。就会显示出目录结构。 ├─.idea │ └─inspectionProfiles ├─benchmark_results ├─data │ ├─test …

Kubernetes 之 Ingress 和 Service 的异同点

1. 概念与作用 1.1 Ingress Ingress 是什么? Ingress主要负责七层负载,将外部 HTTP/HTTPS 请求路由到集群内部的服务。它可以基于域名和路径定义规则,从而将外部请求分配到不同的服务。 ingress作用 提供 基于 HTTP/HTTPS 的路由。 支持 …

结构体详解+代码展示

系列文章目录 🎈 🎈 我的CSDN主页:OTWOL的主页,欢迎!!!👋🏼👋🏼 🎉🎉我的C语言初阶合集:C语言初阶合集,希望能…

Springboot项目搭建(7)

1.概要 2.Layout主页布局 文件地址&#xff1a;src\views\Layout.vue 2.1 script行为模块 从elementUI中选取图标图案。 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from "element-plus/icons-vue…

cocos creator 3.8 俄罗斯方块Demo 10

这里的表格是横行数列&#xff0c;也就是x是行&#xff0c;y是列&#xff0c;不要当x/y轴看。 1-1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] -1012-1012-1-1[-1,0]0[0,-1][0,0][0,1][0,2]0[0,0]11[1,0]22[2,0] 2-1012-1012-1[-1,-1][-1,0]-1[-1,-1][-1…

Java安全—原生反序列化重写方法链条分析触发类

前言 在Java安全中反序列化是一个非常重要点&#xff0c;有原生态的反序列化&#xff0c;还有一些特定漏洞情况下的。今天主要讲一下原生态的反序列化&#xff0c;这部分内容对于没Java基础的来说可能有点难&#xff0c;包括我。 序列化与反序列化 序列化&#xff1a;将内存…

【Java 学习】面向程序的三大特性:封装、继承、多态

引言 1. 封装1.1 什么是封装呢&#xff1f;1.2 访问限定符1.3 使用封装 2. 继承2.1 为什么要有继承&#xff1f;2.2 继承的概念2.3 继承的语法2.4 访问父类成员2.4.1 子类中访问父类成员的变量2.4.2 访问父类的成员方法 2.5 super关键字2.6 子类的构造方法 3. 多态3.1 多态的概…

LeetCode—74. 搜索二维矩阵(中等)

仅供个人学习使用 题目描述&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true…

uniapp关闭sourceMap的生成,提高编译、生产打包速度

警告信息&#xff1a;[警告⚠] packageF\components\mpvue-echarts\echarts.min.js 文件体积超过 500KB&#xff0c;已跳过压缩以及 ES6 转 ES5 的处理&#xff0c;手机端使用过大的js库影响性能。 遇到问题&#xff1a;由于微信小程序引入了mpvue-echarts\echarts.min.js&…

房屋出租出售预约系统支持微信小程序+H5+APP

核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、小区找房&#xff0c;地铁找房等方式。 地图找房&#xff1a;通过地图标注查看附近房源&#xff0c;方便用户根据地理位置查找合适的房产。二手房资讯&#xff1a;提供租房及二手房市场的相关资讯&#xff0c;帮助用户了…

Axure农业农村数据可视化大屏模板分享

在当今信息技术飞速发展的时代&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;凭借其高度的自定义能力和丰富的交互设计功能&#xff0c;在农业农村数据可视化领域展现出强大的潜力。本文将详细介绍A…