chronyd服务

news/2024/7/3 1:39:08

目录

一、man 5 chrony.conf

二、makestep步进时间选项

三、使用Windows NTP Server

3.1、问题

3.2、解释

3.3、验证


一、man 5 chrony.conf

充当NTP server

/etc/chrony.conf 里面有个allow选项,默认是注释掉的,也就是说chronyd服务默认只做ntp client。

把allow配置上,chronyd服务就既当ntp client,也充当ntp server,所有client可以和自己同步时间。

allow 10.30.2.0/24,chronyd服务就既当ntp client,也充当ntp server,只允许10.30.2.0/24网段和自己同步时间。

二、makestep步进时间选项

最近做RHCE的实验,nfs用krb5p实现全程加密和身份认证,需要nfs服务端、客户端的时间与KDC的时间同步,否则kerberos分发的ticket就会失效,nfs不能挂载和访问。那么就需要在nfs的服务端、客户端都配置chronyd服务,使其时间与KDC同步。具体做法是

[root@server0 ~]# systemctl enable chronyd.service
[root@server0 ~]# vim /etc/chrony.conf#修改server行
server kdc.ip.address iburst[root@server0 ~]# systemctl restart chronyd.service

但是经过几天以后发现自动挂载又失效了。经过反复试验发现是时间没有同步。

练习环境是嵌套虚拟化环境,在物理机的VMware上有一个虚拟机foundation,在虚拟机foundation上用KVM虚拟了classroom、server和desktop三台虚拟机。其中classroom充当KDC,server和desktop充当nfs的服务端和客户端。复现该问题,foundation和classroom都在运行,时间都是9点。9点钟挂起foundation,10点钟恢复foundation。恢复后发现foundation的时间是10点,而classroom的时间还停留在9点。即使配置了classroom和foundation的ntp时间同步,这个现象还是会发生。

原因在于chronyd的机制,官网已经给出了解答和建议,详见3.3. Is chronyd allowed to step the system clock?。官方文档3.3这一节给出了详细的说明。

默认情况下,chronyd通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。步进时钟(时间跳变)可以快速修正偏差较大的时间误差,但步进时钟(时间跳变)能会导致一些程序异常,因此应当慎用这个选项。

maketep可允许chronyd步进时钟。 例如,chrony.conf有

makestep 10 1

这里表示如果时间的误差小于10秒,则通过减慢或加快时钟速度来逐渐调整时钟。如果时间的误差大于10秒,在第1次更新时间时允许步进时间。通常,建议仅在前几次更新中允许该步骤,但在某些情况下(例如,没有RTC或在不确定的时间内挂起和恢复的虚拟机)可能需要随时进行步进时钟。 这时需要将上面的例子改为

makestep 10 -1

这样,误差大于10秒时,也进行步进时钟,就会随时步进时间,保证时间准确。

三、使用Windows NTP Server

3.1、问题

这一段是2020年8月17日加上的。问题是这样的,最近学习搭建JumpServer堡垒机,启用了MFA的双因子认证。双因子的动态口令是根据时间计算得出的,因此服务器的时间应当准确。配置了chrony和域控服务器时间同步,但是时间却没有同步。

3.2、解释

查阅了chrony的官方文档,查到原因在于chronyd的机制,官网已经给出了解答和建议,详见3.4. Using a Windows NTP server?。官方文档3.4这一节给出了详细的说明。

官方文档对Windows的NTP服务进行了一番吐槽和批判。总之是Window的NTP不好用,误差太大会导致chronyd同步时间不准确,因此chronyd会忽略Window的NTP。虽然chronyc sources -v会显示一个有效的时间偏移量,但是chronyd不会同步时间。为此,可以使用 chronyc ntpdata 来进行查看。

那么,怎么才能让chronyd 和 Windows NTP Server同步时间呢?需要在/etc/chrony.conf文件中加入 maxdistance 配置。时间偏移量小于这个值时chrony同步,否则不同步,这个值默认是3秒,详细内容可以 man 5 chrony.conf查看。

3.3、验证

为了验证解决这个问题,我做了一个实验,那就是一台Windows Server 配置了w32time服务充当NTP服务器,并将这台服务器时间故意调整为8月19日的时间。再配置时间为8月18日的linux的chrony使之与Windows Server时间同步。

先看一下Window Server的时间是8月19日02:24,Linux的时间是8月18日00:24。Window Server的NTP服务正常,UDP/123短款开放。

在配置文件/etc/chrony.conf 中加入server配置后,重启chronyd。发现时间并没有同步,但是可以看到巨大的时间差93597秒!

接下来,我们加入maxdistance,值为94000.0,超过93597秒,再chronyc sources -v看看结果。发现时间同步了,验证成功。


http://lihuaxi.xjx100.cn/news/236135.html

相关文章

浅谈Disruptor

Disruptor是一个低延迟(low-latency),高吞吐量(high-throughput)的事件发布订阅框架。通过Disruptor,可以在一个JVM中发布事件,和订阅事件。相对于Java中的阻塞队列(ArrayBlockingQueue,LinkedBlockingQueue),Disruptor的优点是性…

Webhint开源了一种代码检查工具

Webhint项目提供了一种用于检查代码的可访问性、性能和安全的开源检查(Linting)工具。在创建Web站点和应用中,有越来越多的细节问题亟待完善。为此,Webhint力图帮助开发人员标记这些细节。\\Webhint以命令行接口(CLI&a…

Python基础01-Python环境搭建与HelloWorld

目录 从今天开始学习Python Python环境搭建 安装gcc Python源码包安装 开始Python第一个代码HelloWorld! 从今天开始学习Python 为啥选择Python,可能是跟随潮流吧。我现在不知道为什么学习Python,但是可能一年到一年半以后,…

构造函数不能为虚/重载函数总结

构造函数不能为虚/重载函数总结 作为一个类,他最基础的成员函数就要数构造函数了。这里我们先探讨一下构造函数为什么不能是虚函数。 在解决这个问题之前,要先明白类中函数的调用方式。一个类的函数共用一个函数空间,因此在实例化的对象中是不…

Python基础02-Python基础

脚本的第一行 Python脚本的第一行,写Python解释器的路径。这样就可以直接执行Python脚本。 脚本编码 Python2需要指定脚本的编码,Python3不需要指定。 # -*- coding:utf8 -*- 使用input做简单的交互 username input(请输入用户名密码:) password …

JVM GC算法

可达性算法 - 对象生死判定算法 Java通过可达性分析来判定对象是否还被引用。什么是可达性分析呢: Java会从一些叫做GCRoot的对象开始向下遍历,可以遍历到的对象,就是被引用的对象,不可以遍历到的对象就是不可达对象,就…

手把手教你如何新建scrapy爬虫框架的第一个项目(下)

前几天小编带大家学会了如何在Scrapy框架下创建属于自己的第一个爬虫项目(上),今天我们进一步深入的了解Scrapy爬虫项目创建,这里以伯乐在线网站的所有文章页为例进行说明。在我们创建好Scrapy爬虫项目之后,会得到上图…

拜托,面试别再问我时间复杂度了!!!

最烦面试官问,“为什么XX算法的时间复杂度是OO”,今后,不再惧怕这类问题。 快速排序分为这么几步: 第一步,先做一次partition; partition使用第一个元素tarr[low]为哨兵,把数组分成了两个半区&a…