NTP(Network Time Protocol)简介
ntp授时定义
- NTP是一种用于在计算机网络中同步时间的协议。它确保网络中的各个设备(如服务器、客户端计算机、网络设备等)的时钟保持准确一致。
- 其工作原理是通过分层的时钟源体系,设备可以与更准确的时间服务器(称为NTP服务器)进行通信,获取准确的时间信息并调整自身的时钟。这些NTP服务器本身也可以从更高级别的时间源(如原子钟)获取时间校准。
NTP的重要性
- **系统集成和一致性**:
* 在大型企业网络或数据中心环境中,有许多服务器和设备协同工作。例如,在分布式数据库系统中,准确的时间同步对于数据的一致性和事务的正确处理至关重要。不同服务器上的日志记录也需要准确的时间戳,以便在故障排查或安全审计时能够正确地追踪事件顺序。
- **网络安全和认证**:
* 许多安全机制,如数字证书、Kerberos认证等,依赖于准确的时间。如果时间不同步,可能会导致认证失败或者安全漏洞。例如,证书的有效期是基于时间来判断的,如果设备时间不准确,可能会错误地认为证书已经过期或者尚未生效。
**二、**Chrony和ntp服务器对比
时间同步精度和收敛速度方面
- **Chrony优势**:Chrony具有更快的收敛速度。在系统启动或网络恢复后,它能够快速地使本地时间与时间服务器同步。
- **NTP情况**:NTP虽然也能提供较为准确的时间同步,但收敛速度相对较慢。它的同步过程较为保守,尤其是在初始同步或者网络环境变化后,需要逐步调整时间,花费的时间可能会比较长才能达到高精度的同步状态。
对网络环境的适应性方面
- **Chrony优势**:Chrony能够更好地适应复杂多变的网络环境。它可以在网络延迟波动、丢包等情况发生时,利用之前收集的时间数据和本地时钟的特性来灵活调整同步策略。例如,当网络出现短暂拥塞导致丢包时,Chrony可以根据之前同步过程中获取的时钟偏差估计值和网络延迟的统计信息,继续对本地时间进行合理的调整,以保持时间同步的准确性。
- **NTP情况**:NTP在面对网络环境变化时的适应能力相对较弱。当网络状况不佳,如频繁丢包或者网络延迟突然增大时,NTP的时间同步效果可能会受到较大影响,出现时间偏差增大甚至同步失败的情况。
系统资源占用方面
- **Chrony优势**:Chrony是轻量级软件,对系统资源的占用较少。这使得它非常适合在资源受限的系统(如嵌入式设备)上运行。它可以在不影响系统整体性能的前提下,高效地完成时间同步任务。
- **NTP情况**:NTP在一些资源有限的系统中可能会对系统性能产生一定的影响,特别是在处理复杂的时间同步计算和网络通信时,可能会占用较多的CPU时间和内存资源。
配置的灵活性方面
- **Chrony优势**:Chrony的配置相对简单且灵活。它的配置文件(如在Linux系统中的`/etc/chrony.conf`)易于理解和修改。可以方便地指定多个时间服务器,并且支持多种同步选项,如设置不同的时间源优先级等。
- **NTP情况**:NTP的配置相对复杂一些,尤其是在设置高级功能(如复杂的访问控制和多服务器同步策略)时,需要对NTP的配置语法和选项有更深入的了解。
三、Chrony安装和配置(以Linux为例)
安装
- 在基于Debian或Ubuntu的系统中,可以使用以下命令安装:`sudo apt - get install chrony`。
- 对于基于Red Hat或CentOS的系统,命令为:`sudo yum install chrony`。
配置文件
- 主要配置文件通常是`/etc/chrony.conf`。在这个文件中,可以指定时间服务器(NTP服务器)的地址。例如,可以添加以下行来指定公共的NTP服务器:
- 以下是对这个 `chrony` 配置文件内容的详细解释:
# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usuable directives.
# This will use (up to):
# - 4 sources from ntp.ubuntu.com which some are ipv6 enabled
# - 2 sources from 2.ubuntu.pool.ntp.org which is ipv6 enabled as well
# - 1 source from [01].ubuntu.pool.ntp.org each (ipv4 only atm)
# This means by default, up to 6 dual-stack and up to 2 additional IPv4-only
# sources will be used.
# At the same time it retains some protection against one of the entries being
# down (compare to just using one of the lines). See (LP: #1754358) for the
# discussion.
#
# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2
#server ntp.aliyun.com iburst
server 192.168.200.16 iburst
allow 192.168.200.0/24
local stratum 10
# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
#keyfile /etc/chrony/chrony.keys
# This directive specify the file into which chronyd will store the rate
# information.
driftfile /var/lib/chrony/chrony.drift
# Uncomment the following line to turn logging on.
#log tracking measurements statistics
# Log files location.
logdir /var/log/chrony
# Stop bad estimates upsetting machine clock.
maxupdateskew 100.0
# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync
# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3
配置文件说明部分
# Welcome to the chrony configuration file. See chrony.conf(5) for more
# information about usuable directives.
这是配置文件开头的注释说明,告知用户这是 chrony
的配置文件,若想了解更多可用指令的详细信息,可以查看 chrony.conf(5)
手册页(在类 Unix 系统中,这种形式的手册页通常用于查看相关配置文件指令等的详细文档)。
时间服务器(NTP 服务器)相关配置
# This will use (up to):
# - 4 sources from ntp.ubuntu.com which some are ipv6 enabled
# - 2 sources from 2.ubuntu.pool.ntp.org which is ipv6 enabled as well
# - 1 source from [01].ubuntu.pool.ntp.org each (ipv4 only atm)
# This means by default, up to 6 dual-stack and up to 2 additional IPv4-only
# sources will be used.
# At the same time it retains some protection against one of the entries being
# down (compare to just using one of the lines). See (LP: #1754358) for the
# discussion.
#
# About using servers from the NTP Pool Project in general see (LP: #104525).
# Approved by Ubuntu Technical Board on 2011-02-08.
# See http://www.pool.ntp.org/join.html for more information.
#pool ntp.ubuntu.com iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2
#server ntp.aliyun.com iburst
server 192.168.200.16 iburst
- 开头注释详细解释了原本可以配置使用来自不同域名的多个 NTP 服务器作为时间源,以及各自可使用的最大服务器数量等情况。例如,从
ntp.ubuntu.com
最多使用 4 个源(其中部分支持 IPv6),从2.ubuntu.pool.ntp.org
最多使用 2 个源(同样支持 IPv6)等。不过这里前面几个以pool
开头配置 NTP 服务器池的行被注释掉了(#
表示注释),意味着当前没有启用这些服务器池的配置。 server ntp.aliyun.com iburst
这一行也是被注释掉的,它原本的作用是指定ntp.aliyun.com
作为时间服务器,并使用iburst
选项。iburst
选项会让chrony
在初始同步时发送一系列紧密间隔的请求,以便更快地获取准确时间。server 192.168.200.16 iburst
这一行则启用了指定 IP 地址为192.168.200.16
的服务器作为时间服务器,同样配合iburst
选项来加速初始时间同步。
访问控制配置
allow 192.168.200.0/24
allow
指令用于设置允许访问 chrony
服务的网络范围,这里表示允许来自 192.168.200.0/24
这个网段内的设备访问 chrony
服务,通常用于限制哪些主机可以与本地运行的 chrony
进行交互(比如获取时间信息等)。
本地时钟层级与特性相关配置
local stratum 10
local
指令结合 stratum
参数用于定义本地时钟在 NTP 层级体系中的层级为 10。stratum
表示时钟的准确程度和在整个 NTP 网络中的层次关系,数字越大通常意味着准确性相对越低,这里将本地时钟设置为层级 10,可能是在特定网络环境下对本地时钟相对位置的一种定义(比如在无法连接到外部可靠时间源等情况下的一种兜底设定)。
认证相关(但当前未启用)
# This directive specify the location of the file containing ID/key pairs for
# NTP authentication.
#keyfile /etc/chrony/chrony.keys
这部分被注释掉了,原本 keyfile
指令是用于指定包含 NTP 认证所需的 ID 和密钥对的文件位置(在这里文件路径为 /etc/chrony/chrony.keys
),若要启用 NTP 认证功能,就需要取消这行的注释,并正确配置对应的认证文件内容,但当前配置中并未启用该功能。
漂移文件配置
driftfile /var/lib/chrony/chrony.drift
driftfile
指令指定了 chrony
将用来存储时钟速率信息的文件路径。chrony
会根据系统时钟与时间源的对比等情况,把时钟漂移相关的数据记录到这个文件中,后续利用这些信息来更精准地进行时间同步调整等操作。
日志相关配置
# Uncomment the following line to turn logging on.
#log tracking measurements statistics
# Log files location.
logdir /var/log/chrony
- 第一部分中
log tracking measurements statistics
这行被注释掉了,若取消注释,则会开启相应的日志记录功能,记录诸如跟踪、测量、统计等与时间同步相关的详细信息。 logdir
指令明确了日志文件存放的目录为/var/log/chrony
,如果开启了日志记录,相应的日志文件就会存放在这个指定的目录下。
最大更新偏差配置
maxupdateskew 100.0
maxupdateskew
指令用于设置允许的最大更新偏差值,单位是秒。在这里设置为 100.0
,意味着如果 chrony
检测到时钟调整的偏差大于 100 秒,就会采取相应的措施(比如根据其他配置决定是否进行调整等),该指令主要是防止因过大的时间偏差更新对系统时钟造成不合理的影响。
内核同步及时钟调整相关配置
# This directive enables kernel synchronisation (every 11 minutes) of the
# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
rtcsync
# Step the system clock instead of slewing it if the adjustment is larger than
# one second, but only in the first three clock updates.
makestep 1 3
rtcsync
指令启用了内核实时时钟的同步功能,每隔 11 分钟,chrony
会将系统时钟与硬件实时时钟进行同步(需要注意的是它不能和rtcfile
指令同时使用)。makestep
指令规定了如果时间调整幅度大于 1 秒,那么在前三次时钟更新时,chrony
会直接“跳步”(step)来调整系统时钟,使其快速跟上正确时间,而不是缓慢地调整(即“slewing”,缓慢调整时钟速率来使时间慢慢对齐)。超过三次之后,即使时间偏差大于 1 秒,可能就会采用其他相对缓和的方式来处理时间偏差了。
启动和服务管理
- 安装完成后,可以使用以下命令启动Chrony服务:`sudo service chrony start`(在基于Systemd的系统中,命令为`sudo systemctl start chrony`)。
- 可以将其设置为开机自启,在Systemd系统中使用命令`sudo systemctl enable chrony`。
四 NTPserver安装和配置(以centos为例)
安装
既可做服务端也可做客户端
sudo yum install -y ntp
只同步
sudo yum install -y ntpdate
开启服务,让其他客户端与本机同步,注意防火墙状态
systemctl start ntpd
开机自启
systemctl enable ntpd
修改配置文件
# 记录和上级时间服务器的时间差异
driftfile /var/lib/ntp/drift
# ntp 日志
logfile /var/log/ntp.log
# 日志级别 all event info
logconfig all
# 设置默认策略,允许同步时间,不允许修改
restrict default nomodify notrap nopeer noquery
# 允许本机地址的一切操作,-6 为 IPV6
restrict 127.0.0.1
restrict -6 ::1
# 允许网段内客户端连接此服务器同步时间,但是拒绝让他们修改服务器上的时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# https://www.ntppool.org/zone/cn
# 利用 server 设定上层 NTP 服务器,可设置多个。prefer 表示优先
server s1b.time.edu.cn prefer
# 在 /ntp.conf 中定义的 server 都不可用时,将使用 local 时间作为 ntp 服务提供给 ntp 客户端。建议配置,否则 ntp 服务器无法与公网 ntp 服务器同步时,其客户端也会无法同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
以下是对这段NTP配置文件内容的详细解释:
漂移文件配置
# 记录和上级时间服务器的时间差异
driftfile /var/lib/ntp/drift
driftfile
指令用于指定一个文件(这里是/var/lib/ntp/drift
),NTP服务会将系统时钟相对于参考时间源(上级时间服务器)的时钟漂移信息记录到该文件中。通过长期监测和记录这些漂移数据,NTP软件能够更精准地对系统时钟进行调整,以补偿时钟频率的微小变化,从而更好地保持时间同步的准确性。
日志相关配置
# ntp 日志
logfile /var/log/ntp.log
# 日志级别 all event info
logconfig all
logfile
指令明确了NTP服务日志文件的存放位置,即/var/log/ntp.log
,所有与NTP运行相关的日志信息都会记录到这个文件中,方便后续查看和分析NTP服务的运行状态、时间同步情况以及可能出现的问题等。logconfig
指令设置了日志记录的级别为all
,意味着会记录所有类型的日志信息,包括各种事件(event
)以及详细的信息(info
)等。这样的配置可以提供非常全面的日志内容,但也可能导致日志文件增长较快,需要根据实际需求和磁盘空间等情况合理考虑是否调整日志级别。
访问限制(restrict
)相关配置
# 设置默认策略,允许同步时间,不允许修改
restrict default nomodify notrap nopeer noquery
# 允许本机地址的一切操作,-6 为 IPV6
restrict 127.0.0.1
restrict -6 ::1
# 允许网段内客户端连接此服务器同步时间,但是拒绝让他们修改服务器上的时间
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict
指令用于控制对NTP服务的访问权限。restrict default nomodify notrap nopeer noquery
这一行是设置了全局默认的访问限制策略,具体含义如下:nomodify
:禁止客户端修改NTP服务器的配置以及时间设置,确保服务器时间的权威性和稳定性,只允许客户端从服务器获取时间进行同步。notrap
:不处理控制消息陷阱(trap),通常用于避免一些特殊的控制消息交互,简化服务运行逻辑。nopeer
:拒绝让其他设备与本NTP服务器建立对等(peer)关系,也就是不允许其他设备把本服务器当作同等地位的时间同步伙伴,明确了服务器与客户端的层级关系。noquery
:禁止外部设备对本服务器进行查询操作(除了同步时间相关的必要交互),进一步保障服务器的安全性和稳定性。
restrict 127.0.0.1
和restrict -6 ::1
这两行分别针对本地回环地址(IPv4的127.0.0.1
和IPv6的::1
)放开了所有限制,允许本地进程无限制地访问NTP服务,这是很常见的配置,因为本地的一些系统服务或应用可能需要不受限制地与本地运行的NTP服务交互来获取准确时间。restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
则是针对192.168.1.0/24
这个网段内的客户端进行访问限制设置,允许它们连接到本NTP服务器进行时间同步(因为没有设置noquery
),但同样不允许它们修改服务器上的时间(通过nomodify
选项实现),确保了服务器时间不会被该网段内的客户端意外更改。
时间服务器(server
)相关配置
# https://www.ntppool.org/zone/cn
# 利用 server 设定上层 NTP 服务器,可设置多个。prefer 表示优先
server s1b.time.edu.cn prefer
# 在 /ntp.conf 中定义的 server 都不可用时,将使用 local 时间作为 ntp 服务提供给 ntp 客户端。建议配置,否则 ntp 服务器无法与公网 ntp 服务器同步时,其客户端也会无法同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
server s1b.time.edu.cn prefer
这一行指定了s1b.time.edu.cn
作为上层的NTP时间服务器,并且通过prefer
关键字表明在有多个可用时间服务器时,优先使用该服务器进行时间同步。这样可以确保在有多个时间源选择的情况下,优先与更可靠或者更精准的时间服务器对接。server 127.127.1.0
和fudge 127.127.1.0 stratum 10
这两行是一种备用时间源的配置。当配置文件中前面定义的所有外部(公网)NTP服务器(如s1b.time.edu.cn
等)都不可用,无法进行时间同步时,NTP服务会将本地的127.127.1.0
这个虚拟的本地时钟当作时间源来为NTP客户端提供时间服务。通过fudge
指令设置其stratum
(层级)为10
,表示它在整个NTP时间层级体系中的相对准确性级别,数字越大通常意味着相对准确性越低,但在外部时间源失效的情况下,它可以作为一种兜底的时间提供方式,保证客户端依然能够获取到一个相对稳定的时间基准,避免客户端完全无法同步时间的情况出现。