在分布式系统和集群管理中,时间的精确同步是保障系统稳定、数据一致和安全认证的关键因素,日志文件的时间戳、数据库事务的顺序、加密证书的有效性验证等,都依赖于统一且准确的时间,网络时间协议(NTP)正是为了解决这一问题而设计的,它通过分层的时间服务器体系,将标准时间(UTC)同步到网络中的各个设备,在CentOS系统上配置NTP服务器,使其为内网其他客户端提供时间同步服务,是一项基础而重要的系统管理任务。
本文将详细介绍如何在CentOS系统上配置NTP服务器,涵盖现代主流的Chrony工具和传统的NTPd工具,并提供清晰的步骤和配置说明。
准备工作
在开始配置之前,首先需要确保服务器的时区和基础时间是正确的,虽然NTP服务会自动校准,但一个合理的初始状态可以加快同步速度。
使用timedatectl
命令可以查看和设置时区:
# 查看当前时区 timedatectl # 如果时区不正确,可以设置为上海时区 sudo timedatectl set-timezone Asia/Shanghai
确认时区无误后,我们就可以开始安装和配置NTP服务了。
使用Chrony(适用于CentOS 8/7,推荐)
Chrony是现代Linux发行版(包括CentOS 7及以后版本)默认的时间同步软件,它设计用于在各种网络条件下(包括间歇性网络连接、拥堵网络和虚拟机环境)都能快速、准确地同步时间,相比传统的NTPd具有显著优势。
安装Chrony
通常Chrony在系统安装时已默认安装,如果未安装,可以使用以下命令进行安装:
# CentOS 8 使用 dnf sudo dnf install -y chrony # CentOS 7 使用 yum sudo yum install -y chrony
配置Chrony
Chrony的主配置文件为/etc/chrony.conf
,默认配置已经可以使其作为NTP客户端从公共服务器同步时间,要将其配置为NTP服务器,需要修改以允许内网客户端查询。
使用编辑器打开配置文件:
sudo vi /etc/chrony.conf
主要关注以下几项配置:
pool
或server
行:指定上层时间服务器,默认配置通常使用公共池,如pool 2.centos.pool.ntp.org iburst
,一般保留即可。allow
行:这是关键配置,它指定了哪些子网的客户端可以向此服务器查询时间,默认情况下是禁用的(allow
行被注释或不存在),我们需要添加一行来允许内网访问,如果内网网段是168.1.0/24
,则添加:allow 192.168.1.0/24
local stratum 10
行:当此服务器与公网时间源失联时,可以继续以自身时间为标准,为内网提供服务。stratum
(层级)值越高,表示时间精度越低,建议取消此行注释,使其在断网情况下仍能作为本地时间源。local stratum 10
修改完成后,保存并退出。
启动服务与配置防火墙
配置文件修改后,需要启动Chrony服务并设置开机自启:
sudo systemctl start chronyd sudo systemctl enable chronyd
必须在防火墙中开放NTP服务使用的UDP 123端口:
sudo firewall-cmd --add-service=ntp --permanent sudo firewall-cmd --reload
验证同步状态
在服务器上,可以使用chronyc
命令行工具来查看同步状态:
# 查看时间源信息 chronyc sources -v # 查看详细同步状态 chronyc tracking
在chronyc sources -v
的输出中,^
开头的行表示服务器,标记表示当前正在同步的源。chronyc tracking
则显示时间偏差、频率等详细信息。
使用NTPd(适用于CentOS 6/7)
对于较旧的系统或特定环境,可能仍会使用传统的NTPd。
安装NTPd
sudo yum install -y ntp
配置NTPd
NTPd的主配置文件是/etc/ntp.conf
。
同样,编辑该文件:
sudo vi /etc/ntp.conf
server
行:指定上层时间服务器,如server 0.centos.pool.ntp.org iburst
。restrict
行:这是NTPd的核心访问控制配置,需要添加规则来允许内网客户端查询,同时控制默认访问权限,建议的配置如下:# 默认禁止所有操作 restrict default kod nomodify notrap nopeer noquery # 允许本地所有操作 restrict 127.0.0.1 # 允许内网客户端进行时间同步和查询 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
nomodify notrap
参数允许客户端查询时间但不能修改服务器配置。
启动服务与配置防火墙
sudo systemctl start ntpd sudo systemctl enable ntpd # 防火墙配置与Chrony相同 sudo firewall-cmd --add-service=ntp --permanent sudo firewall-cmd --reload
验证同步状态
使用ntpq -p
命令查看NTPd的同步状态:
ntpq -p
输出中的号表示当前同步源,号表示备选源。
特性 | Chrony | NTPd |
---|---|---|
默认系统 | CentOS 7+ | CentOS 6 及更早版本 |
软件包 | chrony | ntp |
配置文件 | /etc/chrony.conf | /etc/ntp.conf |
主要优点 | 同步速度快、适应性强(尤其VM和不稳定网络) | 传统、稳定,功能全面 |
适用场景 | 云服务器、虚拟机、现代桌面和服务器 | 传统物理服务器、对精度要求极高的环境 |
相关问答FAQs
Q1:我应该选择Chrony还是NTPd来配置我的CentOS服务器?
A: 对于绝大多数情况,尤其是在CentOS 7及以上版本、云环境或虚拟机中,强烈推荐使用Chrony,它的设计初衷就是为了应对现代网络环境的复杂性,能够更快地完成时间同步,并且在网络连接不稳定时表现更佳,NTPd是一个非常成熟和稳定的解决方案,但在新项目或新系统上,Chrony是更现代、更高效的选择,除非有特殊兼容性要求,否则应优先考虑Chrony。
Q2:我的服务器位于一个完全隔离的内网,无法访问互联网,如何让它为整个内网提供时间服务?
A: 这种情况下,您需要将该服务器配置为“本地时间源”,使其以自身的硬件时钟作为时间标准。
- 对于Chrony:在
/etc/chrony.conf
中,确保local stratum 10
这一行是未被注释的状态。stratum
值可以设为10,表示这是一个本地低精度时间源,这样,即使没有外部服务器,Chrony也会将自身系统时间作为权威时间源,分发给内网客户端。 - 对于NTPd:在
/etc/ntp.conf
中,需要添加以下两行:server 127.127.1.0 # 使用本地硬件时钟作为时间源 fudge 127.127.1.0 stratum 10 # 设置其层级为10
配置完成后重启服务,该NTP服务器就会以本地时钟为准,为内网提供时间同步服务。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/11003.html