应优先使用chrony配置时间同步,因其启动快、适应网络不稳定;其次可选ntp;临时校准用ntpdate;同步前需确认时区为Asia/Shanghai且硬件时钟设为UTC,并开放UDP 123端口。

多台 Linux 机器时间必须一致,否则像 Hadoop、Kafka、数据库集群等分布式系统会出现任务失败、日志错乱、事务异常等问题。核心思路是:选定一台可联网的机器作为时间源(NTP 服务器),其余机器统一向它同步,而非各自直连公网——既规避网络波动影响,又避免时钟漂移累积。
选一台机器作为内网 NTP 主服务器
这台机器需能访问公网时间源(如阿里云 ntp1.aliyun.com 或中国国家授时中心 210.72.145.44),同时开放内网服务供其他机器调用。
- 安装并启用 ntp 服务:
sudo yum install ntp -y(CentOS/RHEL)或sudo apt install ntp -y(Debian/Ubuntu) - 编辑
/etc/ntp.conf,注释掉默认 server 行,添加中国区可靠源:server 0.cn.pool.ntp.org iburstserver 1.cn.pool.ntp.org iburstserver 2.cn.pool.ntp.org iburstserver 3.cn.pool.ntp.org iburst - 允许内网客户端请求:在配置末尾添加一行
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer noquery
(将192.168.1.0替换为实际局域网网段) - 启动服务并设开机自启:
sudo systemctl start ntpd&&sudo systemctl enable ntpd - 检查同步状态:
ntpq -p显示有*或+标记的上游服务器,且reach值为非零,说明已连通
其余机器配置为 NTP 客户端
所有从机不再直连公网,而是只认主服务器 IP,形成稳定层级结构。
- 同样安装 ntp 包(若未预装)
- 编辑
/etc/ntp.conf,清空或注释原有server行,仅保留一行:server 192.168.1.100 iburst
(192.168.1.100替换为主服务器的实际内网 IP) - 禁用本地时钟 fallback(避免断网后自行漂移):
注释掉或删除server 127.127.1.0和fudge 127.127.1.0 stratum 10这两行 - 重启服务:
sudo systemctl restart ntpd - 验证是否生效:
ntpstat应返回synchronised to NTP server;ntpq -p中主服务器 IP 前应有*标记
补充保障:定时强制校准(适用于 ntpd 不可用场景)
某些老旧系统或容器环境可能无法运行完整 ntpd 服务,可用 ntpdate + crontab 组合兜底,但注意该命令会“跳跃”调整时间,不适用于正在运行的数据库等敏感服务。
- 安装:
sudo yum install ntpdate(CentOS)或sudo apt install ntpdate(Ubuntu) - 手动测试一次:
sudo ntpdate 192.168.1.100,确认返回 offset 值在毫秒级(如 ±0.03s) - 写入定时任务(root 用户执行):
crontab -e→ 添加一行:*/5 * * * * /usr/sbin/ntpdate 192.168.1.100 >/dev/null 2>&1
(每 5 分钟同步一次,可根据稳定性需求调整为 */10 或 */30) - 同步后建议写入硬件时钟:
在 crontab 命令末尾追加&& /sbin/hwclock --systohc
关键细节提醒
防火墙必须放行 UDP 123 端口(NTP 协议专用),否则请求会被静默丢弃:
- iptables:
sudo iptables -I INPUT -p udp --dport 123 -j ACCEPT,并保存规则 - firewalld:
sudo firewall-cmd --add-service=ntp --permanent&&sudo firewall-cmd --reload - SELinux 若启用,需确保
ntpd能绑定网络端口(通常默认允许,异常时可临时设为 permissive 模式排查) - 所有机器时区应统一为
Asia/Shanghai:sudo timedatectl set-timezone Asia/Shanghai,避免 CST/BST 等缩写歧义


















