满怀希望就会所向披靡

Linux时间偏差处理 | 启用Chrony时间同步服务

前情

在OSS下载报错(Cloudreve阿里云OSS下载报错:Request has expired)的问题处理中,我们发现问题原因是服务器时间错误。我们利用宝塔面板的linux工具箱手动同步时间,但经过数天后时间仍出现偏差

于是,我们在宝塔计划任务中将“同步时间”设定为每天执行,该方式虽然能有效地使时间处于整体正确状态,但执行日志中显示每天都会产生数秒的偏差,没能从根源上解决问题。

问题处理

考虑到另一台同等使用宝塔和相关业务的服务器时间并不会偏差,认为是此台服务器“曾经从华为云迁移至阿里云”的BUFF所带来的问题。

在阿里云文档中(通过时间同步服务确保实例时间准确),我们了解到阿里云会采用Chrony服务以替代传统NTP服务,Chrony相较NTP有更高的精度及稳定性,随考虑给此台服务器装上Chrony时间同步服务。

时间同步服务使用场景时间同步精度稳定性简介
Chrony服务适用于高精度、高稳定性、自动化等场景。较高能够更好地适应高延迟和不稳定的网络环境。Chrony是一个实现网络时间协议(NTP)的软件包,用于同步计算机的系统时间与世界各地的NTP服务器。Chrony特别适合在变化的网络环境中运行,能够以快速和高效的方式调整系统时间。更多信息,请参见Chrony
NTP服务适用于大多数无需太高精度要求的普通场景。正常仅能适应一定程度的网络不稳定。NTP是一种经典的时间同步服务,是NTP协议的一个实现。NTP适用于长期运行的服务器,特别是在网络条件比较稳定的环境下。更多信息,请参见NTP
Chrony服务和NTP服务介绍与对比

问题解决 | Chrony服务的安装与配置

查询当前服务

查看ECS实例中当前使用的时间同步服务,返回图1代表使用Chrony服务,返回图2代表使用NTP服务。

sudo ps aux | grep -E "ntpd|chronyd"

安装Chrony服务

yum install chrony #CentOS为例

配置NTP服务器地址

执行以下命令,进入chrony配置文件。

sudo vim /etc/chrony.conf

以下为阿里云服务器原生chrony.conf文件:

# Use Alibaba NTP server
# Public NTP
# Alicloud NTP

server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

# Ignore stratum in source selection.
stratumweight 0.05

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

# Enable kernel RTC synchronization.
rtcsync

# In first three updates step the system clock instead of slew
# if the adjustment is larger than 10 seconds.
makestep 10 3

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

# Listen for commands only on localhost.
bindcmdaddress 127.0.0.1
bindcmdaddress ::1

# Disable logging of client accesses.
noclientlog

# Send a message to syslog if a clock adjustment is larger than 0.5 seconds.
logchange 0.5

logdir /var/log/chrony
#log measurements statistics tracking

a.屏蔽不需要的NTP服务器

在配置文件中找到server <NTP服务器> minpoll 4 maxpoll 10 iburst的信息后,按i键编辑文件,在您暂时不需要的NTP服务器句首前添加符号#进行隐藏。

b.添加新的NTP服务器

您可以在配置文件中添加新的NTP服务器,格式为:server <NTP服务器> minpoll 4 maxpoll 10 iburst

完成编辑后按Esc键并输入:wq保存退出。

经典网络内网专有网络VPC内网公网
ntp1.cloud.aliyuncs.com
ntp2.cloud.aliyuncs.com
ntp3.cloud.aliyuncs.com
ntp4.cloud.aliyuncs.com
ntp5.cloud.aliyuncs.com
ntp6.cloud.aliyuncs.com
ntp.cloud.aliyuncs.com
ntp7.cloud.aliyuncs.com
ntp8.cloud.aliyuncs.com
ntp9.cloud.aliyuncs.com
ntp10.cloud.aliyuncs.com
ntp11.cloud.aliyuncs.com
ntp12.cloud.aliyuncs.com
ntp.aliyun.com
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com
阿里云NTP服务器地址列表

启动Chrony服务

依次执行以下命令,启动chronyd服务并设置开机自启动。

sudo systemctl start chronyd.service
sudo systemctl enable chronyd.service

执行以下命令,查看本机时间同步状态,用于验证服务是否已启动——“Leap status : Normal

sudo chronyc tracking

执行以下命令,查看时间同步服务器列表。 

sudo chronyc -n sources -v

检查对照

启动Chrony服务后,我们可以再次通过sudo ps aux | grep -E "ntpd|chronyd"代码验证。

通过以下代码,您还可以实时观察服务器当前时间,以便与北京时间对照。或者,您可以启用后等待数日,在宝塔面板中手动执行“定时任务—时间同步”,在日志中观察服务器时间偏差值是否正常。

watch -n 0.1 date #表示每n秒执行date,n最小为0.1s
Linux时间偏差处理 | 启用Chrony时间同步服务

https://woolio.cn/archives/1993/

作者

bluish

发布时间

2024-03-27

许可协议

CC BY-SA 4.0

添加新评论