暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux主机时间同步问题排查

IT那活儿 2023-11-24
4728

点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!  


问题背景
监控服务器ntp时间偏移量,防止主机与时间服务器时间差距过大导致程序出错。在ntp时间偏移量的绝对值大于或小于50的时候发送告警,确保主机时间准确,目前已在所有被监控主机上启用此监控项。


解决Linux 服务器ntpdate同步时间报错
NTP服务器(Network Time Protocol)是一种用于计算机时间同步的协议。它使计算机能够与服务器或时钟源(例如石英钟、GPS等)同步,实现高精度的时间校准。通过NTP,计算机在局域网上与标准时间之间的差异小于1毫秒,在广域网上也只有几十毫秒。此外,NTP还通过加密确认的方式来防止恶意协议攻击
2.1 登录对应主机进行查看
命令:  ntpq -p (查询和显示 NTP 服务器状态,列出当前计算机所连接的 NTP 服务器以及与这些服务器之间的同步状态。)
图片中输出中包含以下列:
  • *:表示目前使用的ntp server。
  • remote:远程 NTP 服务器的主机名或 IP 地址。
  • refid:远程服务器所参考的时间源。
  • st:远程服务器的时钟层级(stratum),值越小表示ntp serve的精准度越高。
  • when:几秒前曾做过时间同步更新的操作。
  • Poll:每隔多少毫秒与ntp server同步一次。
  • reach:已经向上层NTP服务器要求更新的次数。
  • delay:网络传输过程中延迟的时间(以秒为单位)。
  • offset:上次成功与远程服务器同步的时间。
  • jitter:Linux系统时间与BIOS硬件时间的差异时间。(时钟频率的变动)
注意:NTP服务端重启后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。等待的时间可以通过命令 watch ntpq -p来监控。
2.2 强制同步计算机时钟与指定 NTP 服务器
命令: ntpdate + ntp IP (发送一个 NTP 请求到指定服务器,并将本地系统时钟调整为从服务器接收到的时间)。
出现错误信息 "the NTP socket is in use, exiting" 意味着已经有另一个进程在使用 NTP 套接字(socket),因此 ntpdate 无法正常运行。
这个错误通常表示另一个 NTP 守护进程(如 xntpd)已经在系统上运行并监听了 NTP 端口(默认为 UDP 123)。只能有一个进程同时监听同一个端口,由于 xntpd 已经绑定到了该 Socket。运行 ntpdate 时,它会首先进行广播,然后侦听端口 123。
如果 xntpd 正在运行,而有一个进程已经在侦听该端口了,则会使 ntpdate 无法在上面运行。
2.3 列出正在运行的与 xntpd 相关的进程
命令: ps -ef|grep xntpd
出现:pts/0  00:00:00  grep xntpd 表示没有找到pid。
2.4 使用命令
lsof -i:123(查看正在使用端口123的进程)
输出: -bash: lsof: command not found(说明没有安装lsof)
2.5 执行命令
yum install -y lsof (安装 lsof 工具,系统会自动下载并安装 lsof 软件包及其依赖项)
2.6 再次运行命令
lsof -i:123
2.7 运行以下命令,清除该进程后再次进行时间同步
ps -ef | grep 3025(再次确认该进程的相关信息)
kill -9 3025(立即终止进程 ID(PID)为 3025 的进程)
ntpdate 时间服务器IP(再次进行ntp时间同步)

2.8 查询和显示 NTP 服务器状态,已经恢复正常
常用命令:
  • rpm -qa grep ntp   #查询已安装的ntp版本信息等;
  • service ntpd status   #查询ntp服务状态;
  • service ntpd start    #启动;
  • service ntpd stop    #停止;
  • service ntpd restart  #重启;
  • ntpq  -p #查看ntp服务器与上层ntp的状态;
  • ntpstat  #用于显示 NTP(Network Time Protocol)客户端与时间服务器同步的状态,这个一般需要5-10分钟后才能成功连接和同步,所以服务器启动后需要稍等下。
Redhat的ntpd服务命令:
#chkconfig ntpd on
#/etc/init.d/ntpd start
#/etc/init.d/ntpd stop
#/etc/init.d/ntpd restart

CentOS的ntpd服务命令:
systemctl ntpd restart
systemctl start ntpd
systemctl enable ntpd


Chrony时间同步

Chrony是一款开源免费的网络时间协议(NTP)客户端和服务器软件。它可以确保计算机的系统时钟与NTP服务器保持同步,从而保证计算机时间的准确性。同时,Chrony还可以作为服务器软件为其他计算机提供时间同步服务。
那我们为什么不用ntpdate,而使用chrony时间同步呢?
让我们来看看他俩的区别:
  • 功能和灵活性
    Chrony 是一个全功能的 NTP 守护程序,它提供了更多的功能和灵活性。除了能够调整系统时钟来与时间服务器同步外,Chrony 还可以根据网络延迟和时钟偏移等因素进行时钟频率调整,从而提供更准确的时间同步。
    ntpdate 则是一个简单的命令行工具,只能一次性将系统时钟设置为与时间服务器同步,而无法提供持续的时间同步和频率调整功能。
  • 同步策略
    Chrony 通过对网络延迟和时钟偏移进行复杂的计算和统计分析,选择最佳的时间源进行同步。它可以逐渐调整系统时钟以避免突然的时间跳跃。
    ntpdate 则没有内置同步策略,它直接将系统时钟设置为与时间服务器相同,可能会导致时间突然跳变,造成系统时钟不稳定。
  • 自动化
    Chrony 可以作为系统服务在后台运行,并自动进行时间同步,可以在系统启动时自动启动。
    ntpdate 需要手动运行,并且不提供自动化的时间同步。
虽然Chrony 和 ntpdate 都是用于实现网络时间协议 (NTP) 的工具,用于同步系统时钟和网络时间服务器的时间,但是Chrony 是更强大和灵活的 NTP 工具,适用于需要精确和持续时间同步的应用场景。而 ntpdate 则是一个简单的命令行工具,适用于一次性手动进行时间同步的简单需求。
3.1 查看系统
命令: cat etc/*-release
3.2 停止 NTP 服务
命令: systemctl stop ntpd(CentOS适用)
因为是红帽系统,所以需要使用以下命令:
  • chkconfig --level 345 ntpd off(禁用 NTP 服务在运行级别 3、4 和 5 下自动启动。)
  • chkconfig --list ntpd(查看 NTP 服务在每个运行级别下的启用状态的命令),发现已经关闭。
3.3 安装 chrony 时间同步服务
命令:yum -y install chrony
3.4 备份、编辑和更新 chrony 时间同步服务的配置文件 /etc/chrony.conf
命令如下:
cp  /etc/chrony.conf /etc/chrony.conf.orig

注:将/etc/chrony.conf 文件备份为 /etc/chrony.conf.orig,以防止修改后出现问题。

sed -i "/pool/d" /etc/chrony.conf
删除默认的时间服务器池配置。
echo "server 时间服务器ip iburst" >> /etc/chrony.conf
将新的时间服务器配置添加到 /etc/chrony.conf 文件中。在此示例中,添加时间服务器的 IP 地址,并使用 iburst 参数以快速同步系统时间。
3.5 启动 Chrony 服务,并将其设置为在系统启动时自动启动
systemctl start chronyd && systemctl enable chronyd #启动 Chrony 服务并将其设置为在系统启动时自动启动
sleep 5 #该命令使脚本暂停 5 秒,以便等待时间同步服务稳定运行
chronyc sourcestats -v && hwclock -w #展示当前时间同步源的统计信息并将系统的硬件时钟与当前时间进行同步

3.6 显示系统当前日期和时间设置
命令:timedatectl status
输出结果如下:
  • Local time:显示当前本地时间。
  • Universal time:显示当前的协调世界时 (UTC)。
  • RTC time:显示硬件实时时钟 (RTC) 的时间。
  • Time zone:显示当前系统所使用的时区。
  • Network time on:如果网络时间同步已启用,则显示 "yes";否则显示 "no"。
  • NTP synchronized:如果系统已与网络时间服务器同步,则显示 "yes";否则显示 "no"。
  • RTC in local TZ:如果硬件实时时钟 (RTC) 使用本地时区作为其时区设置,则显示 "yes";否则显示 "no"。
  • DST active:如果当前处于夏令时 (DST) 期间,则显示 "yes";否则显示 "no"。
3.7 查看 Chrony 服务状态的命令进行确认
命令:systemctl status chronyd
(Chrony 服务是否正在运行,并查看它的运行时间、内存占用等详细信息。)
3.8 查看同步时间源命令
  • chronyc sources -v  #查看时间同步源状态
    (该命令将显示每个时间源的名称、状态、延迟、偏移量和最后一次成功的同步时间等信息)
每行表示一个时间源。其中的符号和标记表示了该时间源的状态和可靠性。可以根据延迟、偏移量和可达性等信息来评估每个时间源的质量和可靠性。
  • chronyc tracking    #显示系统时间的参数信息
    (查看 Chrony 的时间跟踪信息,包括系统时钟的当前状态、偏移量、频率调整和时钟的稳定性等)
上述输出中,可以看到以下信息:
  • Reference ID:参考时间源的标识符,通常是时间服务器的名称或 IP 地址。
  • Stratum:当前系统的层级,数字越小表示更接近时间源。
  • Ref time (UTC):参考时间源的时间戳,以协调世界时(UTC)表示。
  • System time:当前系统的时间。
  • Last offset:最近一次时间同步时系统时钟相对于参考时间源的偏移量。
  • RMS offset:偏移量的均方根值,用于评估时钟的稳定性。
  • Frequency:频率偏移量,以百万分比(ppm)表示,正值表示系统时钟较慢,负值表示较快。
  • Residual freq:校正后的频率偏移量。
  • Skew:时钟的斜率或漂移速率。
  • Root delay:消息从系统到参考时间源的往返延迟。
  • Root dispersion:时钟与参考时间源之间的最大差异。
  • Leap status:闰秒状态,通常显示为 "Normal" 表示没有闰秒插入。

END



本文作者:黄国庆(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论