文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Linux 上怎么配置 Ntp 时间同步

2024-12-02 08:01

关注

在 Linux 中,保持准确的日期和时间至关重要,因为许多服务(如 cron 作业和脚本)依赖于准确的时间才能得到预期的结果

用于同步日期和时间的 ntpd 服务,在新的Linux发行版 ( centos8、Ubuntu 20.04、Fedora 30 ) 中已经废弃了,取而代之的是 chrony

当然,选择 chrony 是有原因的,相比 ntpd , 它有如下的优点:

1、时间同步的速度比 ntpd 更快

2、chrony 很好的处理了同步延迟以及网络延迟

3、即使出现网络降级,chrony 仍然能正常工作

4、本地机器可以作为时间服务器,其他机器从这台服务器上同步时间

安装

在新的 Linux 发行版(centos8、Ubuntu 20.04、Fedora 30)及以后的版本中,系统默认已经安装了 chrony,在这之前的版本是没有安装的,可以使用下面的命令进行安装

yum install chrony

安装完成后,chrony 服务默认会自动加到 systemctl 中管理,下面列出了一些常用的命令

#查询 chronyd 服务状态
systemctl status chronyd

#启动 chronyd 服务
systemctl start chronyd

#关闭 chronyd 服务
systemctl stop chronyd

#重启 chronyd 服务
systemctl restart chronyd

#设置 chronyd 服务开机自启
systemctl enable chronyd
systemctl daemon-reload

另外,启动 chronyd 服务的时候如果出现下面截图中的错误,需要安装或者升级 libsepol、policycoreutils-python

具体的问题说明详见 https://bugzilla.redhat.com/show_bug.cgi?id=1592775

# 安装 libsepol 和 policycoreutils-python
yum install libsepol policycoreutils-python

chrony 的组成

chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的,具体如下图

chronyd 在后台静默运行并通过 123 端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf

chronyc 通过 323 端口与 chronyd 交互,可监控 chronyd 的性能并在运行时更改各种操作参数

chronyc 通过下面的方式访问 chronyd

通过 IPv4 或 IPv6 访问

2、通过 Unix 域 socket, 但只能访问到本地的 chronyd,而且需要 root 用户或者 chrony 用户才能访问

默认情况下,chronyc 先通过 Unix 域 socket 访问 chronyd,默认的 socket 文件是 /var/run/chrony/chronyd.sock, 如果失败(常见的原因是使用非 root 用户运行 chronyc ),将尝试通过 127.0.0.1 访问 chronyd

chrony 配置

守护进程 chronyd 的默认配置文件是 /etc/chrony.conf,其中可配置项很多,这里介绍一些常用的

配置项

说明

server

客户端需找哪个服务器询问当前时间

pool

同 server 配置项

driftfile

本地时钟和服务器时钟的预估漂移保存到哪个文件中

makestep

纠正客户端时间的步进参数

rtcsync

是否允许内核同步实时时钟

allow

允许客户端通过内网地址同步时钟

logdir

日志目录

配置时间同步

守护进程 chronyd 既可作为客户端 与 服务器同步时间,又可作为一个服务器,接受其他客户端同步时间的请求

下面以配置局域网时间服务器为例来说明 chronyd 的客户端和服务器的配置,相关的参数如下:

客户端IP: 192.168.70.22服务器IP: 192.168.70.21

下面是具体的配置步骤

1. 安装客户端服务器

分别在客户端机器和服务器机器安装 chrony,安装方法前面有讲述,这里不赘述了

2. 编辑 /etc/chrony.conf

安装好 chrony 之后,编辑 /etc/chrony.conf 配置文

客户端配置

# 同步时间的服务器 IP 或 域名
server 192.168.70.21 iburst

# 系统时钟的预估漂移保存到指定的文件中,是为了在下次启动时能稳定的同步
driftfile /var/lib/chrony/drift

# 如果系统时钟由于某种原因与启动后的服务器时间相差甚远,允许 chronyd
# 通过步进而不是回转来快速纠正它
makestep 1 3

# 为了使客户端实时时钟接近服务器的时钟,以便下次时钟启动时更接近真实的时间
# 增加了一种 rtcsync 模式,该模式下,系统时间会定期的拷贝到实时时钟里
rtcsync

# 日志
logdir /var/log/chrony

服务器配置

安装 chrony 之后,默认的配置是客户端的启动配置的,要想作为一个时间服务器来运行的话, 需要在配置中增加 allow 配置项,它表示允许客户端通过该地址和服务器同步时间

另外,时间服务器的时间也需要从网络上其他的时间服务器进行同步,这里直接用默认的即可,具体的配置如下

# 同步时间的服务器 IP 或 域名
pool 0.centos.pool.ntp.org iburst
pool 1.centos.pool.ntp.org iburst
pool 2.centos.pool.ntp.org iburst
pool 3.centos.pool.ntp.org iburst

# 为了在下次启动时稳定的同步,系统时钟的预估漂移需要保存到指定的文件中
driftfile /var/lib/chrony/drift

# 如果系统时钟由于某种原因与启动后的服务器时间相差甚远,允许 chronyd
# 通过步进而不是回转来快速纠正它,这个过程将花费很长时间
makestep 1 3

# 为了使客户端实时时钟接近服务器的时钟,以便下次时钟启动时更接近真实的时间
# 增加了一种 rtcsync 模式,该模式下,系统时间会定期的拷贝到实时时钟里
rtcsync

# 允许客户端通过该地址和服务器同步时间,其实这里配置的就是时间服务器的地址
allow 192.168.70.21
pool 配置项

客户端需要去时间服务器获取时间,配置文件中 server 和 pool 配置项表示时间服务器的地址,支持域名或者IP

建议配置多个时间服务器的地址,优先选择同步良好,网络稳定且靠近客户端的地址

pool 与 allow 的区别

pool指的是进行时间同步的服务器IP地址或域名,作为服务器来说,其机器时间也需要从其他时间服务器同步,此时,服务器是作为一个客户端从网络服务器上获取时间

而 allow 字段表示的是作为服务器,允许客户端从该地址获取时间,此地址其实就是服务器的内网地址

3. 处理防火墙

时间服务器如果有开启防火墙的话,需要开启 UDP 协议 的 123 端口,以允许客户端向服务器发送获取时间的请求

[root@cghost22 ~]# firewall-cmd --permanent --add-port=123/udp
success
[root@cghost22 ~]# firewall-cmd --reload
success

如果想要关闭防火墙的 123 端口,在服务器机器上执行下面的命令

[root@cghost22 ~]# firewall-cmd --permanent --remove-port=123/udp
success
[root@cghost22 ~]# firewall-cmd --reload
success

4. 重启 chrony

配置好客户端和服务器之后,为使配置生效,需要重启 chronyd 服务

 systemctl restart chronyd   

5. 查询信息

在服务器端输入 chronyc clients 命令查看同步的客户端信息

在客户端输入 chronyc sources 命令查查看时间服务器的信息

问题

在配置时间服务器的过程中,可能遇到各种问题,下面记录了一些常见的问题以及解决思路

客户端无法进行时间同步

第一个想到的应该是 服务器之上存在防火墙,这时客户端向服务器请求时间不会有任何的响应,在客户端机器输入 chronyc sources 命令可以看到 Reach 字段的值为 0 ,表示客户端无法收到服务器的响应了,具体请看下图

如果排除了防火墙的问题的话,可能需要使用一些工具(tcpdump、wireshark)检查下客户端是否有收到服务器的数据包

客户端和服务器时间差得太多,如何快速修正

通常 chrony 会逐步的修正和服务器之间的时间差,根据需要加快或者减慢时钟,如果客户端和服务器时间差得太多了的话,这个过程会持续很长时间

这种情况可以使用 chronyc makestep 命令快速修复客户端时间,makestep 后面不带任何参数时,表示 chronyd 取消正在修正时间的动作,将当前客户端时间直接修改成服务器的时间

不过,需要注意的是,这种方法直接越过了一段系统时间,有可能会对应用程序造成严重的问题,所以,推荐按照 chronyd 逐步修正的方式来同步时间

小结

本文介绍了 Linux 中,时间同步的配置方法,提供常见的问题的解决思路或者方案,更多关于 chrony 的介绍请参考下方的网站

https://chrony.tuxfamily.org/documentation.html


来源:Linux开发那些事内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯