一、场景

我们生产环境部署TIDB(兼容MYSQL的分布式数据库),TIDB组件之间同步时根据时间戳检测到时间不一致,导致数据库服务不可用。

二、问题

因为服务器没有公网访问能力,时间只能靠硬件时钟芯片进行计算时间的流逝。虽然硬件时钟能够在没有网络的情况下持续计时,但它存在一定的精度问题。由于晶体振荡器的频率受温度、老化等因素影响,随着时间的推移,硬件时钟可能会产生漂移,可能在数周或数月后出现几分钟甚至更多的时间误差。

三、解决办法

(一)给服务器添加访问网络能力

这是最简单的办法,因为Linux服务器一般都有NTP服务。NTP(Network Time Protocol)会按照一定的时间间隔自动从NTP服务器同步时间,这个时间间隔不是固定不变的,而是根据多种因素动态调整的。

通过 timedatectl命令查看 NTP 服务是否开启

CentOS / Red Hat
可以看到 NTP service: active 同步时间服务开启的 ,但是 System clock synchronized: no 没有完成同步。

在这里插入图片描述Ubuntu
在这里插入图片描述

ps : 公共 NTP 服务器池,例如 “pool.ntp.org” 作为 NTP 服务器时,它实际上会被分配到池中的某个具体的 NTP 服务器进行时间同步。这些服务器由世界各地的志愿者或组织提供并维护,它们从更高级别的时间源获取时间,然后为全球的大量客户端提供免费的时间同步服务。客户端可以通过互联网连接到这些公共 NTP 服务器池中的服务器来同步自己的时钟。

(二)手动同步

指定一台服务器为时间源,其它主机使用NTP服务时间源主机同步时间。然后定期手动矫正时间源主机的时间。这样每台主机时间是一致的,但是需要定期矫正时间。

以CentOS为例:

1. 检查有没有安装ntp

执行 rpm -qa | grep ntp 检查

rpm -qa | grep ntp

有以下输出说明有安装ntp
在这里插入图片描述

2. 没有安装ntp则离线安装ntp

2.1 下载安装包

找一台同操作系统并且能访问公网的主机上下载, ntpdate ntp安装包

执行

yum reinstall --downloadonly --downloaddir=/root   ntpdate ntp

在这里插入图片描述

2.2 安装

将下载ntpntpdate安装包上传到主机上,执行 rpm -ivh 安装包名每台主机都需要安装。
安装过程如果缺少依赖库先解决依赖问题。

执行安装

rpm -ivh  ntpdate-4.2.6p5-29.el7.centos.2.x86_64.rpm  ntp-4.2.6p5-29.el7.centos.2.x86_64.rpm 

2.3 启动 ntp

启动

systemctl start ntpd

设置为开机自启

systemctl enable ntpd

3. 设置内部时钟源

选择一台服务器作为内部时钟源,选择相对稳定且时间较为准确的服务器作为内部时钟源服务器。这台服务器可以手动设置一个较为准确的时间.

3.1 编辑/etc/ntp.conf

编辑/etc/ntp.conf
/etc/ntp.conf文件中添加以下内容

server 127.127.1.0
fudge 127.127.1.0 stratum 10

这里127.127.1.0是一种特殊的本地时钟表示方式,表示将本地主机的时钟作为 NTP 服务的时钟源,stratum 10表示时钟源的层级(层级越高相对越不精确,但在没有更好的时钟源情况下可以使用)。

3.1 重启ntp服务

执行 systemctl restart ntpd

systemctl restart ntpd

4. 其他主机配置

除时钟源主机,其他主机都需要设置

4.1 编辑 /etc/ntp.conf

编辑/etc/ntp.conf, 在文件中添加以下内容

# ip替换为你的实际时钟源主机ip
server 192.168.1.100
4.2 重启 ntp 服务

执行 systemctl restart ntpd

systemctl restart ntpd
4.3 查看时钟同步状态

执行 ntpq -p

ntpq -p

5. 手动矫正时钟源主机的时间

后续定期两个星期或者一个月,手动修改时间。
修改命令 date -s。 这样还是增加了工作量,最好是能有一台主机有网络自动同步时间,其他主机从这台有网络的主机同步时间就可以一劳永逸了。

# 修改时间
date -s '2024-09-18 14:58::11'

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部