文章目录
- 一、场景
- 二、问题
- 三、解决办法
- (一)给服务器添加访问网络能力
- (二)手动同步
- 1. 检查有没有安装ntp
- 2. 没有安装ntp则离线安装ntp
- 2.1 下载安装包
- 2.2 安装
- 2.3 启动 ntp
- 3. 设置内部时钟源
- 3.1 编辑/etc/ntp.conf
- 3.1 重启ntp服务
- 4. 其他主机配置
- 4.1 编辑 /etc/ntp.conf
- 4.2 重启 ntp 服务
- 4.3 查看时钟同步状态
- 5. 手动矫正时钟源主机的时间
一、场景
我们生产环境部署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 安装
将下载ntp
、ntpdate
安装包上传到主机上,执行 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'
完