NTP
是 Network Time Protocol
(网络时间协议)的缩写,它是一种用于在计算机系统之间同步时间的协议。NTP
允许网络中的设备通过与一个或多个时间服务器进行通信,来校正自身的系统时钟,确保所有设备上的时间保持高度一致。
而 ntpd
则是 NTP
协议的一个具体实现,它是 NTP
守护进程(daemon)的名字。ntpd
在系统后台持续运行,负责与配置好的时间服务器进行周期性的通信,根据服务器返回的时间信息,逐步、平滑地调整本机的系统时间,以达到与时间服务器时间同步的目的。
ntpd
的优势在于它能连续工作,不断微调系统时钟,即使系统时钟与标准时间有较大偏差,也能逐渐调整至准确,同时还能跟踪并补偿时钟的自然漂移。
确认是否已安装ntpd
systemctl status ntpd
如果ntpd
服务已安装并正在运行,Active: active (running),输出内容如下:
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-09-20 10:00:00 UTC; 1h ago
Docs: man:ntpd(8)
Main PID: 12345 (ntpd)
CGroup: /system.slice/ntpd.service
└─12345 /usr/sbin/ntpd -u ntp:ntp -g
如果ntpd
服务安装但是未启动,Active: inactive (dead),输出内容如下:
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
如果ntpd
服务未安装,你将看到类似以下输出:
Unit ntpd.service could not be found.
请注意,上述命令需要以root用户或具有sudo
权限的用户身份运行。
安装ntpd
首先,确保您的CentOS
系统已安装了NTP
服务。如果未安装,可以通过以下命令安装:
yum –y install ntpd
配置ntpd
安装完ntpd
后,需要编辑其配置文件 /etc/ntp.conf
来指定时间服务器及其它设置。默认情况下,NTP
会尝试连接到一些公共的NTP
服务器,但推荐您添加一些离您物理位置近的或信任的NTP
服务器以提高同步效率和安全性。
使用文本编辑器(如vi)打开配置文件:
vi /etc/ntp.conf
在文件中,您可以添加或修改服务器条目。例如,添加阿里云的NTP
服务器:
server ntp.aliyun.com iburst
如果您希望使用一个池地址,可以使用如下的中国地区NTP
池:
server cn.pool.ntp.org iburst
启动ntpd
服务、查看状态
启动ntpd
服务
systemctl start ntpd
设置ntpd
开机自启
systemctl enable ntpd
查看ntpd
状态
systemctl status ntpd
重启ntpd
服务
systemctl restart ntpd
停止ntpd
服务
systemctl stop ntpd
禁用ntpd
服务
systemctl disable ntpd
内网环境下的ntpd
服务配置
对于不能直接访问互联网的CentOS
服务器集群,要保持集群内所有服务器的时间一致,可以采取以下步骤手动同步某台机器的时间,然后以此为参考源同步其他机器:
准备工作
- 选择参考服务器:从集群中选择一台机器作为时间参考服务器(假设为Server A),确保这台服务器的时间最为准确或已通过其他方式(如手动设置或使用便携式时钟设备)校准过。
- 安装
NTP
服务:在所有服务器上安装NTP
服务,包括参考服务器和目标同步的服务器。即使它们不能直接访问互联网,安装NTP
服务仍然是必要的,因为我们将使用它来进行内部时间同步。
配置参考服务器
vi /etc/ntp.conf
注释掉所有外部时间服务器的条目,并添加一行声明自身为本地NTP
服务器(如果要同步的服务器较多,考虑使用广播或组播模式):
【内容】在server部分添加一下部分,并注释掉server 0 ~ n
restrict default ignore # 禁止所有外部主机同步
server 127.127.1.0 # 本地时钟参考
fudge 127.127.1.0 stratum 10 # 设置本地时钟的层级
命令解析
restrict default ignore
: 这行配置指令限制了默认情况下所有远程主机对本NTP
服务器的访问权限,使其无法使用这台服务器作为时间源进行同步。换句话说,它阻止了除明确允许的来源之外的所有NTP
查询和响应,有助于增强安全性,确保只有被授权的或本地的请求得到处理。server 127.127.1.0
: 这行配置定义了一个本地时钟作为时间源。127.127.1.0
是一个特殊的IP地址,属于NTP
的“伪服务器”地址范围,用来表示本地参考时钟。这里指定本地系统时钟作为时间服务器,意味着NTP
服务将使用本机的系统时钟作为时间同步的依据。通常,这是在没有外部网络连接或想要使用本地硬件时钟(如通过GPS
接收器校准)作为时间源时采用的配置。fudge 127.127.1.0 stratum 10
:fudge
命令用来调整或修正时间源的行为。在这个例子中,它设置了使用本地时钟(127.127.1.0)作为时间源时的“层级(stratum)”为10。在NTP
中,层级表示时间源的可靠性和距离原始时间源的远近,层级1是最准确的(通常是原子钟或GPS
接收器直接连接的服务器),层级数值越大表示距离原始时间源越远或可靠性越低。设置为10表明这是一个非常不可靠的时间源,但这在内部网络作为临时解决方案或明确知道本机时间已经准确时是有意义的,可以避免此本地时钟被错误地用作其他NTP
客户端的上级时间源。
配置其他服务器
vi /etc/ntp.conf
在其他的集群服务器上(假设为Server B、Server C等),编辑它们的NTP
配置文件 /etc/ntp.conf
,指向参考服务器(Server A)的IP
地址:
【内容】在server部分添加如下语句,将server指向主节点。
server <Server_A_IP> iburst
请将上面的 <同步节点IP
> 替换成真实的同步节点IP
地址,如果有多个同步节点,请重复执行上面的操作
重启NTP
服务
systemctl restart ntpd
强制同步
然而,如果你确实需要快速调整时间,通常的做法是暂停 ntpd
服务,使用 ntpdate
工具进行一次性强制同步,然后重新启动 ntpd
服务。
-
停止
ntpd
服务:systemctl stop ntpd
-
使用
ntpdate
强制同步:首先,确保安装了
ntpdate
(如果系统中没有的话),然后执行以下命令,替换<Server_A_IP>
为你的NTP
服务器地址:ntpdate <Server_A_IP>
-
启动或重启
ntpd
服务:systemctl start ntpd
注意:直接的强制同步可能会导致依赖时间连续性的应用程序出现问题,因此在执行这类操作时应谨慎考虑其影响。理想情况下,应优化 ntpd
配置以适应不同的网络环境和时间偏差情况,或考虑使用 chrony
等更现代化的工具,它们在启动时和大偏移量处理上提供了更好的性能。
验证
在所有服务器上,使用 ntpq -p
命令检查时间同步状态,确认所有服务器的时间都已经与参考服务器保持一致。
注意事项
- 确保所有服务器的硬件时钟(BIOS时间)也与系统时间同步,必要时使用
hwclock -w
命令。 - 考虑到网络延迟,集群内的时间同步可能不如直接与互联网上的
NTP
服务器同步精确,但足以满足多数内部应用的需求。 - 如果集群较大,考虑设置多级时间服务器结构,即一部分服务器同步于外部时间源,其余服务器再同步于这些内部服务器,以减轻主参考服务器的压力并提高可靠性。
备注
hwclock -w
是一个在类Unix系统(如Linux)中使用的命令,用于将系统时间(即操作系统维护的时间)写入硬件时钟(RTC
,实时时钟)。硬件时钟是一个由主板上的小型电池供电的时钟,即使系统关机也会继续运行,以保持时间的连续性。
当你执行 hwclock -w
命令时,会发生以下过程:
- 系统首先读取当前的操作系统时间,这个时间通常是根据系统内核以及
NTP
等时间同步服务调整后的准确时间。 - 然后,该命令会把读取到的系统时间转换为硬件时钟需要的格式。
- 最后,转换后的时间会被写入到硬件时钟中,从而更新硬件时钟的时间,确保即使系统重启后,时间仍然保持最近一次更新时的准确性。