一、 背景
某个客户为满足信创条件,特将CentOS 7.X的版本迁移到TencentOS 3.3 的操作系统上。
采用的数据库是TDSQL 3.3 集中式版本。
TencentOS 2.4-3.3 系列主要是为了解决CentOS 7.9 后版本停服而引发的安全、升级等相关问题而衍生出的满足信创的操作系统,在腾讯历经数十年的打磨。
二、 问题的产生与排查
- "Clock moved backwards. Refusing to generate id" 该问题由系统时间变慢导致。
- 默认配置了腾讯时钟服务器同步,采用chrony的工具进行的同步。
- chrony 启动中。
- 应用程序兼容chrony。手动强制同步时间后,应用程序正常。
上面四点已经很明显,就是出在系统时间变慢上。
三、系统POC 测试验证
说明:按照上面的两幅图可以看出,chrony 是正在运行的状态,但是Leap status : Not synchronised 处于未同步状态。
powershell
# 查看已同步的客户端
chronyc clients
# 立即同步时间
chronyc makestep
# 检查偏移量(Offset接近0)
chronyc tracking
# 查看源状态(^*^表示当前同步源)
chronyc sources -v
解决方案:
第一:通过调整参数
cat /etc/chrony.conf
server x.x.x.x iburst minpoll 5 maxpoll 5
参数解释:
minpoll:最小获取时间同步为2 的5次方,也就是32秒
maxpoll:最大获取时间同步为2 的5次方,也就是32秒
重启chrony.cnf 服务
systemctl restart chronyd
第二:配置crontab 任务
-
-
-
-
- chronyc makestep
-
-
-
-
-
-
-
- sleep 30; chronyc makestep
-
-
-
第三:配置本地chrony 时钟服务器,解决网络问题
服务端
powershell
vi /etc/chrony.conf
# 添加本地时钟源(无外网时作为时间源)
server 127.127.1.0 iburst
# 允许客户端网段访问
allow X.X.X.0/24
# 启用本地时钟层级(仅服务器端配置)
local stratum 10
logchange 0.5
Rtcsync
logdir /var/log/chrony
driftfile /var/lib/chrony/drift
makestep 1.0 3
#注释掉,无法使用chronyc clients
#Noclientlog
#启动服务
systemctl restart chronyd
客户端
powershell
vi /etc/chrony.conf
# 指向时间服务器IP
server X.X.X.X iburst
#启动服务
systemctl restart chronyd
# 立即同步时间
chronyc makestep