服务器开启NTP服务器配置是保证集群内所有机器时间一致的关键,直接关系到日志审计、证书验证和数据一致性。
选择合适的NTP实现
ntpd、chrony和systemd-timesyncd是主流的NTP服务,传统ntpd稳定性高,但配置复杂,启动时若时间偏差过大容易退出,chrony是RHEL/CentOS 7及之后的默认选择,对间歇性网络和虚拟化环境适应更好,同步速度更快,systemd-timesyncd仅提供客户端同步,适合简单场景,行业共识认为,chrony在多数生产环境下的表现优于ntpd,尤其是云服务器和容器场景。
Linux NTP服务器搭建步骤详解
以下操作以CentOS 7/8和Ubuntu 20.04为例,核心命令通用,包名略有差异。
安装NTP服务
- CentOS/RHEL:
yum install -y chrony或dnf install -y chrony - Ubuntu/Debian:
apt install -y chrony
安装后确认服务版本:chrony --version,若使用ntpd,则安装ntp包,但chrony更推荐,后续步骤均基于chrony。
配置NTP服务器
编辑配置文件 /etc/chrony.conf,核心是定义上游时间源(server或pool)。
# 公共NTP池,iburst加快初始同步
pool 0.pool.ntp.org iburst
pool 1.pool.ntp.org iburst
pool 2.pool.ntp.org iburst
pool 3.pool.ntp.org iburst
# 允许客户端同步(修改为你需要的网段)
allow 192.168.0.0/16
# 本地时间源,当上游不可达时使用
local stratum 10
- server 指定单个NTP服务器,pool 自动解析域名获取多个IP,更可靠。
- iburst 允许4次快速同步,加速初始同步。
- allow 限制同步来源,生产环境建议只开放内网段。
allow 0.0.0.0/0表示允许所有,存在安全风险。
- local stratum 设置本机层数,当无法同步外部时充当备用源。
启动与设置开机自启
systemctl enable chronydsystemctl start chronyd使用 systemctl status chronyd 确认服务运行状态,若使用ntpd,改为 ntpd 服务名。
验证NTP同步
chronyc sources -v:查看同步源状态,标记为^表示当前同步源,^+为候选源,^-为不可用。chronyc tracking:显示当前系统时间偏差、频率偏移等,偏差小于1毫秒即正常。timedatectl:检查NTP service: active以及RTC in local TZ: no。
配置防火墙
NTP使用UDP 123 端口,需放行:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
iptables命令类似,如果使用云厂商安全组,需在控制台添加UDP 123入站规则。
NTP时间同步服务器配置常见问题
问题1:同步失败,chronyc sources 显示所有源为 ^-
原因:上游NTP服务器不可达,或防火墙阻止了UDP 123端口。
解决步骤:
- 手动测试:
chronyc -n sources显示延迟。 - 检查防火墙:
iptables -L -n查看是否放行123端口。 - 尝试更换时间源,例如使用
ntp.aliyun.com或time.windows.com。 - 若内网环境,确保上游NTP服务器已开启并允许你的网段。
问题2:时间偏差过大导致chronyd退出
chronyd默认最大调整范围是 1000秒,超出后服务会退出,这在初次配置或服务器长时间未同步时常见。
解决:先手动设置时间接近正确值,再启动chronyd:
chronyc -a makestep
或直接使用 date -s "2026-01-01 12:00:00" 设置后重启服务。
问题3:服务冲突
同时安装ntpd和chronyd会导致端口冲突。务必只启用一个。
检查:systemctl list-units | grep ntp,禁用冲突服务:systemctl disable --now ntpd。
不同场景下的NTP配置建议
生产环境高可用配置
多台服务器组成NTP集群,推荐使用本地NTP服务器,同步外部源后对内提供服务。
操作:
- 主NTP服务器配置外部pool,并设置
allow 内网段。 - 其他服务器配置指向主NTP服务器:
server 192.168.1.1 iburst。 - 为避免单点,可配置2-3台NTP服务器,使用
pool指令轮询。
云服务器环境
云厂商通常提供默认NTP配置,但自定义时需注意:
- 云平台可能通过内部元数据服务提供时间同步,如AWS的NTP服务器。
- 修改
/etc/chrony.conf后重启服务,确保不与云厂商内置服务冲突。 - 多数情况下,使用
pool 0.pool.ntp.org即可,但对延迟敏感的业务,建议使用同一地域的NTP源。
混合云环境
物理机和云服务器共存的场景,必须统一时间源,推荐在机房搭建一台NTP服务器,云服务器通过专线或公网同步,若公网延迟不可控,可在云上部署一台NTP服务器,同步外部源后对内服务,并设置相同的时间策略。
验证与监控NTP状态
- 定时任务检查:通过cron执行
chronyc activity记录日志,监控同步状态。 - 报警设置:当
chronyc tracking显示的偏差超过阈值(如10ms)时触发告警。 - 日志位置:chrony日志默认写入
/var/log/chrony,用于排错。 - 使用timedatectl:
timedatectl status显示当前时区、NTP启用状态、系统时间与RTC关系。
NTP配置绝非一次性的工作,必须作为基础设施的常规维护项,正确配置后,日志中的时间戳不再混乱,证书验证不会因时间偏差而失败,数据库复制也能保持一致性,按照上述步骤操作,你可以在任何环境下快速搭建可靠的时间同步服务。
服务器NTP配置常见问题Q&A
如何检查服务器NTP是否同步成功?
运行 chronyc sources -v,如果看到一行以 ^ 开头,表示已同步到服务器。chronyc tracking 中的 Last offset 数值应接近0,通常小于1毫秒,使用 timedatectl 确认 NTP service: active 即可。
NTP服务器配置中allow参数如何设置?
allow 指定允许同步的客户端网络。allow 192.168.0.0/16 允许该网段所有设备,若需多个网段,可写多条 allow 语句,生产环境建议只开放内网段,避免暴露到公网。deny 可禁止特定网段,优先级高于 allow。
为什么重启后NTP服务未自动启动?
常见原因是服务enable状态未生效,执行 systemctl is-enabled chronyd 检查,若返回 disabled,运行 systemctl enable chronyd,另一种可能是系统时间偏差过大,chronyd启动后立即退出,可查看 /var/log/messages 或 journalctl -u chronyd 确认错误信息,再手动校时后重启服务。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/527192.html



