ntpd 时间同步导致 VIP 接口丢失:原因与修复指南
时间同步服务 ntpd 的潜在风险
服务器之间,特别是在数据库集群环境对时钟一致性要求较高,对此引入 ntpd 时间同步服务来做服务器之间的时钟一致性同步
ntpd(Network Time Protocol Daemon),是 NTP(网络时间协议)的守护进程实现,主要用于在计算机网络中同步计算机的系统时钟,除此还会监听网络接口,对不可用的接口进行 Deleting 删除操作,如下是其删除浮动VIP的OS信息:
Jun 10 15:51:11 db01 systemd: Started LSB: Bring up/down networking.
Jun 10 15:51:13 db01 ntpd[1515]: Deleting interface #7 ens21f0:1, 10.110.10.100#123, interface stats: received=0, sent=0, dropped=0, active_time=364164 secs
Jun 10 15:51:13 db01 ntpd[1515]: Deleting interface #5 ens21f0, ef80::b5ec:bf50:3538:8d86#123, interface stats: received=0, sent=0, dropped=0, active_time=364172 secs
接着查询OS之前的信息可以发现网络故障导致网卡状态停用 deactivating,ntpd检测到接口不可用进而触发删除操作
Jun 10 15:51:11 db01 systemd: Stopping LSB: Bring up/down networking...
Jun 10 15:51:11 db01 NetworkManager[1486]: <info> [1749541871.1306] device (ens21f0): state change: activated -> deactivating (reason 'user-requested', sys-iface-state: 'managed')
Jun 10 15:51:11 db01 NetworkManager[1486]: <info> [1749541871.1314] manager: NetworkManager state is now CONNECTED_LOCAL
Jun 10 15:51:11 db01 NetworkManager[1486]: <info> [1749541871.1315] audit: op="device-disconnect" interface="ens21f0" ifindex=2 pid=36092 uid=0 result="success"
Jun 10 15:51:11 db01 dbus[1476]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service'
Jun 10 15:51:11 db01 NetworkManager[1486]: <info> [1749541871.1318] device (ens21f0): state change: deactivating -> disconnected (reason 'user-requested', sys-iface-state: 'managed')
Jun 10 15:51:11 db01 systemd: Starting Network Manager Script Dispatcher Service...
Jun 10 15:51:11 db01 avahi-daemon[1463]: Withdrawing address record for ef80::b5ec:bf50:3538:8d86 on ens21f0.
Jun 10 15:51:11 db01 dbus[1476]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Jun 10 15:51:11 db01 systemd: Started Network Manager Script Dispatcher Service.
Jun 10 15:51:11 db01 nm-dispatcher: req:1 'connectivity-change': new request (4 scripts)
Jun 10 15:51:11 db01 nm-dispatcher: req:1 'connectivity-change': start running ordered scripts...
Jun 10 15:51:11 db01 avahi-daemon[1463]: Withdrawing address record for 10.110.10.1 on ens21f0.
Jun 10 15:51:11 db01 avahi-daemon[1463]: Leaving mDNS multicast group on interface ens21f0.IPv4 with address 10.110.10.1.
Jun 10 15:51:11 db01 avahi-daemon[1463]: Joining mDNS multicast group on interface ens21f0.IPv4 with address 10.110.10.100.
Jun 10 15:51:11 db01 avahi-daemon[1463]: Withdrawing address record for 10.110.10.100 on ens21f0.
Jun 10 15:51:11 db01 avahi-daemon[1463]: Leaving mDNS multicast group on interface ens21f0.IPv4 with address 10.110.10.100.
Jun 10 15:51:11 db01 avahi-daemon[1463]: Interface ens21f0.IPv4 no longer relevant for mDNS.
Jun 10 15:51:11 db01 network: 正在关闭接口 ens21f0: 成功断开设备 'ens21f0'。
Jun 10 15:51:11 db01 nm-dispatcher: req:2 'down' [ens21f0]: new request (4 scripts)
Jun 10 15:51:11 db01 network: [ 确定 ]
Jun 10 15:51:11 db01 nm-dispatcher: req:2 'down' [ens21f0]: start running ordered scripts...
Jun 10 15:51:11 db01 network: 正在关闭接口 ens21f1: [ 确定 ]
Jun 10 15:51:11 db01 network: 正在关闭接口 ens21f2: [ 确定 ]
Jun 10 15:51:11 db01 network: 正在关闭接口 ens21f3: [ 确定 ]
Jun 10 15:51:11 db01 network: 正在关闭接口 ens27f0: [ 确定 ]
Jun 10 15:51:11 db01 network: 正在关闭接口 ens27f1: [ 确定 ]
Jun 10 15:51:11 db01 network: 正在关闭环回接口: [ 确定 ]
Jun 10 15:51:11 db01 systemd: Starting LSB: Bring up/down networking...
风险处理方案
时间同步服务 ntpd 的风险规避
编辑 NTP 配置文件,添加或修改 interface 指令,以指定 ntpd 应该监听的接口
vi /etc/ntp.conf interface ignore wildcard interface listen xxxx
- interface ignore wildcard:告诉 ntpd 不要自动监听所有接口
- interface listen xxxx:明确指定要监听的接口(网卡名,例如 ens21f0),* 表示监听所有接口
重启 ntpd 服务生效:
systemctl restart ntpd
查看日志或验证 ntpd 是否按预期运行:
systemctl status ntpd journactl -u ntpd ntpq -p ntpstat
禁用 ntpd 服务改用 chronyd 服务
Chrony是一个网络时间协议(NTP)客户端和服务器,主要用于时间同步,其核心功能是调整系统时钟以与时间服务器保持同步,不涉及网络接口的管理或删除操作。
ntpd服务删除接口的行为通常与网络配置变化、接口状态改变或IP地址变化相关,而Chrony的设计目的和工作原理与ntpd有所不同,它更专注于时间同步的效率和准确性,不会因为网络接口的变化而删除接口。
禁用 ntpd 服务:
systemctl disable ntpd
systemctl stop ntpd
安装chronyd服务:
yum install -y chrony
⚠️注意⚠️:CentOS/RedHat等系统环境下,chronyd与ntpd服务存在冲突,因此chronyd、ntpd两种时间同步方式只能二选一。当使用chronyd服务时,也需要禁用ntpd服务。
方式一:
若已经存在chronyd时间服务器,假如为10.110.10.110,可以配置所有节点指向该服务器时间。编辑每个节点的/etc/chrony.conf文件:
echo "server 10.110.10.110 prefer" >> /etc/chrony.conf
方式二:
若没有外部的时间服务器,可以选择集群中的某个节点作为时间服务器。
1)选择一个节点为chronyd服务器(以主节点10.110.10.1为例),配置/etc/chrony.conf文件:
allow all local stratum 10
2)编辑其他节点的/etc/chrony.conf文件:
server 10.110.10.1 prefer
启动检查:
以上两种方式按需选择,最后启动chronyd服务:
systemctl start chronyd
systemctl enable chronyd
systemctl status chronyd
检查各节点时间是否同步(等候5分钟,Normal为正常):
chronyc tracking
时间同步后,将系统时间写入硬件时间:
hwclock –w




