在 NTP(Network Time Protocol)的配置中,server
、pool
和 peer
是用于指定时间同步关系的关键字,它们在角色和行为上有一些区别。
-
server
:server
指令用于直接指定一个或多个NTP服务器作为时间源。这些服务器通常是已知的、可靠的NTP服务器,可以直接提供时间同步服务。使用server
指令时,你需要明确给出服务器的IP地址或主机名。- chrony.conf man文档解释:server指令指定可用作时间源的NTP服务器。客户机-服务器关系是严格分层的:客户机可以将其系统时间与服务器的系统时间同步,但服务器的系统时间永远不会受到客户机系统时间的影响。DNS记录可以随时间变化。当服务器变得不可达,每30分钟最多自动更换一次。也可以通过chronyc中的refresh命令手动触发所有源。这个指令可以被多次使用来指定多个服务器(也就是说一次只能指定一个服务器)。
- 示例:
server ntp.example.com
-
pool
:pool
指令则用于从一个NTP池中选择时间源。NTP池是一种分布式服务,由多个地理位置分散的NTP服务器组成,旨在提高时间和同步的可靠性和准确性。当你使用pool
指令时,NTP客户端会从指定的池中自动选择最合适的服务器进行同步。-
chrony.conf man文档解释:该指令的语法类似于server指令,不同之处在于它用于指定NTP服务器池而不是单个NTP服务器。池名可以解析为多个地址,这些地址可能会随时间变化。
- 示例:
pool pool.ntp.org
-
peer
:peer
关键字用于配置两个系统之间的对等时间同步关系。当两个系统配置为peer
时,它们会相互同步彼此的时间。在 NTP 中,对等体之间的时间同步是相互的,双方都可以向对方提供时间信息,并进行彼此的校准。-
chrony.conf man文档解释:该指令的语法与服务器指令的语法相同,除了它指定了与NTP对等体的对称关联,而不是与NTP服务器的客户端/服务器关联。单个对称关联允许对等体互为服务器和客户端。
- 示例:
peer peer1.example.com
在实际使用中,选择 server
或 pool
取决于具体的需求。server
用于指定一个或多个特定的 NTP 服务器,而 pool
用于从一个服务器池中选择一个服务器。对于需要彼此同步时间的系统,可以使用 peer
配置彼此之间的对等时间同步。
NTP池
NTP (Network Time Protocol) 池,也称为 NTP Pool Project,是一个全球分布式的时间服务器网络,其目标是为互联网上的设备提供准确、可靠的时间同步服务。NTP 池项目通过使用地理分散的 NTP 服务器集群,确保了高可用性和冗余,即使部分服务器出现故障,服务也不会中断。
NTP 池项目主要由以下几个组件构成:
-
服务器:这些是运行 NTP 软件的物理或虚拟服务器,它们被配置为公开的时间源,可供互联网上的任何设备使用。这些服务器通常由志愿者提供,并连接到稳定且精确的本地时间源,如原子钟或GPS接收器。
-
层次结构:NTP 池中的服务器不是平等地组织在一起的,而是按照一个层次结构来排列。服务器被分为不同的层级,一般从 0 到 15。层级 0 的服务器直接连接到精确的时间源,而更高层级的服务器则从较低层级的服务器获取时间。这种层次结构有助于减少顶级时间源的负载,并允许更广泛的覆盖范围。
-
区域划分:NTP 池项目按地理区域划分,如
pool.ntp.org
下的子域europe.pool.ntp.org
、asia.pool.ntp.org
等。这种划分有助于客户端选择地理位置最近的服务器,从而减少网络延迟。 -
DNS 服务:NTP 池项目使用 DNS 服务来动态分配服务器。当客户端查询如
pool.ntp.org
这样的域名时,DNS 服务器会返回一组 IP 地址,这些地址指向可用的 NTP 服务器。DNS 服务器会考虑服务器的负载和健康状况,以最优的方式分配服务器。 -
监控和管理:NTP 池项目有监控系统来检查服务器的性能和健康状况。有问题的服务器会被标记并从 DNS 服务器的返回列表中移除,直到它们恢复正常。