当前位置: 首页 > 科技观察

如何在Linux上配置NTP时间同步

时间:2023-03-16 22:41:43 科技观察

NTP是NetworkTimeProtocol的缩写,也称为网络时间协议,是一种在Linux上保持准确时间的协议,它与网络上可用的NTP服务器保持时钟同步。在Linux中,保持准确的日期和时间非常重要,因为许多服务(例如cron作业和脚本)都依赖准确的时间来获得预期的结果。用于同步日期和时间的ntpd服务在新的Linux发行版(centos8、Ubuntu20.04、Fedora30)中已经被弃用,取而代之的是chrony当然,选择chrony是有原因的。与ntpd相比,它有以下优点:1、时间同步的速度比ntpd快。2.Chrony很好地处理了同步延迟和网络延迟。3.即使网络降级,chrony仍然可以正常工作4.本机可以作为时间服务器,其他机器可以从这个服务器同步时间。安装在新的Linux发行版(centos8、Ubuntu20.04、Fedora30)及之后的版本中,系统Chrony已经默认安装。没有安装以前的版本。您可以使用以下命令来安装yuminstallchrony。安装完成后,chrony服务默认会自动添加到systemctl中进行管理。下面列出一些常用的命令#查询chronyd服务状态systemctlstatuschronyd#启动chronyd服务systemctlstartchronyd#关闭chronyd服务systemctlstopchronyd#重启chronyd服务systemctlrestartchronyd#设置chronyd服务自动开机systemctlenablechronydsystemctldaemon-reloadFor下图报错,需要安装或升级libsepol和policycoreutils-python。参见https://bugzilla.redhat.com/show_bug.cgi?id=1592775#安装libsepol和policycoreutils-pythonyuminstalllibsepolpolicycoreutils-pythonchronychrony的组成由守护进程chronyd和命令行工具chronyc组成,如下图所示。chronyd在后台静默运行,通过123端口与时间服务器同步时间。默认配置文件为/etc/chrony.confchronyc,通过323端口与chronyd交互,可以监控chronyd的性能,并在运行时改变各种运行参数。chronyc可以通过以下方式访问chronyd:通过IPv4或IPv6访问2.通过Unixdomainsockets,但只能访问本地chronyd,并且需要只有root用户或chrony用户才能访问。默认情况下,chronyc首先通过Unix域套接字访问chronyd。默认的套接字文件是/var/run/chrony/chronyd.sock。如果失败(常见原因是用非root用户运行chronyc),会尝试通过127.0.0.1访问chronydchrony配置守护进程chronyd的默认配置文件是/etc/chrony.conf,里面有很多可配置项,这里给出一些常用的配置项,说明客户端需要找哪个服务器询问当前时间池同服务器配置项driftfile本地时钟和服务器时钟的预估漂移会保存到哪个文件?同步守护进程chronyd可以作为客户端与服务器同步时间,也可以作为服务器接受其他客户端的同步时间请求如下:客户端IP:192.168.70.22服务器IP:192.168.70.21下面是具体配置步骤1.安装客户端服务器分别在客户端机器和服务器机器上安装chrony。安装方法前面已有介绍,这里不再赘述2、编辑/etc/chrony.conf安装chrony后,编辑/etc/chrony.conf配置文件clientconfiguration#同步时间服务器IP或域名秒erver192.168.70.21iburst#系统时钟的预估漂移保存到指定文件,以稳定同步漂移文件/var/lib/chrony/drift#如果系统时钟因某种原因与启动后的不同服务器时间相差很远,允许chronyd#通过步进而不是转过来快速纠正它makestep13#使客户端实时时钟接近服务器时钟,以便下一次时钟开始时更接近实时#新增一个rtcsync模式,该模式下,系统时间会定时复制到实时时钟rtcsync#loglogdir/var/log/chronyserverconfiguration安装chrony后,默认配置为客户端的启动配置,如果要将其作为时间服务器运行的话,需要在配置中添加allow配置项,即允许客户端通过该地址与服务器同步时间。此外,时间服务器的时间还需要与网络上其他时间服务器同步。这里可以直接使用默认的。具体配置如下#同步时间服务器IP或域名pool0.centos.pool.ntp.orgiburstpool1.centos.pool.ntp.orgiburstpool2.centos.pool.ntp.orgiburstpool3.centos.pool.ntp.orgiburst#为了下次启动稳定同步,系统时钟的预估漂移需要保存到指定文件driftfile/var/lib/chrony/drift#如果启动后系统时钟与服务器时间不同Far,allowchronyd#toquicklycorrectitbysteppinginsteadofturning,这个过程会花很长时间makestep13#使客户端实时时钟接近服务器的时钟,以便下一次时钟启动后,会更接近实时#新增了一个rtcsync模式,在该模式下,系统时间会定时复制到实时时钟rtcsync中#允许客户端通过该地址与服务器同步时间,在其实这里配置时间服务器的地址allow192.168.70.21pool配置客户端需要去时间服务器获取时间。配置文件中的server和pool配置项表示时间服务器的地址。它支持域名或IP。建议配置多个时间服务器地址。同步性好、网络稳定、距离客户端较近的地址池优先。l与allowpool的区别是指时间同步的服务器IP地址或域名。作为一个服务器,它的机器时间也需要从其他时间服务器同步。此时服务器作为客户端从网络服务器获取时间allow字段表示作为服务器允许客户端从该地址获取时间。这个地址其实就是服务器的内网地址。端向服务器发送请求获取时间[root@cghost22~]#firewall-cmd--permanent--add-port=123/udpsuccess[root@cghost22~]#firewall-cmd--reloadsuccess如果你想关闭防火墙的123端口,在服务器机器上执行如下命令[root@cghost22~]#firewall-cmd--permanent--remove-port=123/udpsuccess[root@cghost22~]#firewall-cmd--重新加载成功4。重启chrony配置客户端和服务器后,为了使配置生效,需要重启chronyd服务systemctlrestartchronyd5.查询信息在服务器端输入chronycclients命令查看同步的客户端信息输入客户端chronycsources命令查看时间服务器信息问题出在配置时间服务器的过程中,可能会遇到各种问题。下面记录一些常见的问题和解决方法。客户端无法进行时间同步。首先想到的应该是服务器上有防火墙。时间不会有任何回应。在客户端机器上输入chronycsources命令,可以看到Reach字段的值为0,代表客户端收不到服务器的响应。详情请见下图。如果排除了防火墙问题,可能需要借助一些工具(tcpdump、wireshark)检查客户端是否收到了服务器端的数据包。客户端和服务器的时间差太大。如何快速纠正。通常,chrony会逐渐修正服务器与服务器之间的时间差,并根据需要加快速度。或者放慢时钟。如果客户端和服务器之间的时间差太大,这个过程会持续很长时间。在这种情况下,您可以使用chronycmakestep命令快速修复客户端时间。当makestep后面没有参数时,表示chronyd取消了校正时间的动作,直接将当前客户端时间修改为服务器时间。不过需要注意的是,这种方式直接跨越了一段时间。系统时间可能会对应用造成严重的问题,所以建议根据chronyd的逐步修正来同步时间。总结本文介绍了Linux下时间同步的配置方法,并提供了常见问题的解决方案。有关chrony的更多信息,请参考以下网站https://chrony.tuxfamily.org/documentation.html