网络里已经有两台NTP服务器,客户端配置文件的本质就一句话:在/etc/ntp.conf里用server指令把两个IP都写进去,让ntpd自己挑一个更准的跟着走,一台挂了自动切另一台。
很多人一看到“两台NTP服务器”就有点懵,不知道配置文件到底该写给谁、写几行,其实这个问题要先拆成两个角色:你是要给普通客户端配置,还是这两台NTP服务器本身也要互相备份,不同角色,配置文件长得完全不一样。
先认清场景:两台NTP服务器到底给谁用
实际运维里最常见的情况是:内网已经搭好2台NTP服务器,比如IP分别是192.168.1.10和192.168.1.11,现在要让十几台Linux服务器、交换机、摄像头都跟它们对时,这时候,改动的是客户端机器的/etc/ntp.conf,而不是去动那两台NTP服务器本身。
另一种场景是:这两台机器要充当内网的NTP服务器,但自己不能都独立跟外网同步,需要互相备份,这时就要在两台服务器上分别配置peer或server指向对方,同时各自再指向上级时间源。
不管是哪种,配置文件里需要关注的东西就三块:时间源声明、访问控制、本地时钟策略,下面按最常用的Linux NTP服务(ntpd)来写,配置思路同样适用于chrony。
内网NTP服务器搭建配置两台:配置文件该长什么样
假设两台NTP服务器IP固定为192.168.1.10和192.168.1.11,客户端的/etc/ntp.conf可以这样写:
# 客户端 /etc/ntp.conf 示例 driftfile /var/lib/ntp/ntp.drift restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap server 192.168.1.10 iburst prefer server 192.168.1.11 iburst
这个文件不长,但每个参数都有实际作用,driftfile用来记录本地晶振漂移,重启后能更快稳定;restrict控制谁能访问本机的NTP服务以及能做什么操作;server声明上游时间源,iburst表示启动后快速发几个包加快同步,prefer表示优先使用192.168.1.10。
ntp.conf配置多个时间源:这两行到底怎么写
核心就两行:
server 192.168.1.10 iburst prefer server 192.168.1.11 iburst
为什么第一台加prefer,第二台不加?因为ntpd默认会根据延迟、偏移和抖动自动选一个最优源,如果网络环境里两台服务器质量差不多,不加prefer也能自动切换,只有明确希望客户端优先跟某一台同步、另一台只当冷备时,才给主服务器加prefer,多数情况下,
行业共识认为不手动指定prefer反而更符合NTP的自动选优逻辑,因为prefer会给人为主观权重,可能压过真实的时钟质量。
两台NTP服务器之间要不要互相指
如果这两台服务器本身也要当内网的权威时间源,建议让它们互相配置成对等体,比如在192.168.1.10上写:
peer 192.168.1.11 iburst server ntp.aliyun.com iburst
在192.168.1.11上写:
peer 192.168.1.10 iburst server ntp.aliyun.com iburst
peer和server的区别在于,peer是双向对时,谁质量高就听谁的;server是单向向上级同步,两台内网NTP服务器互相peer之后,即使其中一台短暂断外网,也能从另一台那里维持时间同步,避免整体漂移。
配置写完后怎么验证两台NTP服务器都生效
改完配置不能只靠感觉,必须用命令确认状态,先重启服务:
systemctl restart ntpd
然后查看同步状态:
ntpq -p
输出大概长这样:
remote refid st t when poll reach delay offset jitter ============================================================================== 192.168.1.10 203.107.6.88 3 u 12 64 377 0.412 -0.031 0.106 +192.168.1.11 203.107.6.88 3 u 18 64 377 0.389 0.028 0.091
remote前面的星号表示当前正在使用的源,加号表示候选源,只要一台带星、另一台带加号,就说明冗余配置成功了,下面把关键字段梳理成表格:
| 字段 | 含义 | 判断标准 |
|---|---|---|
| remote | 配置的NTP服务器地址 | 前面带为当前同步源,+为备选 |
| reach | 最近8次轮询的成功次数 | 377表示全部成功 |
| delay | 网络往返延迟 | 局域网内通常低于1ms |
| offset | 本机与上游的时间偏差 | 越接近0越好 |
| jitter | 偏差波动幅度 | 数值越小同步越稳定 |
如果reach一直是0,说明根本没和服务器通信成功,这时候要检查restrict、防火墙UDP 123端口、以及两台服务器上的NTP服务是否真的在监听。
NTP服务器冗余配置怎么做:先看懂切换行为
双NTP服务器的意义不只是多一个地址,而是主源故障时客户端能自动切换,要验证这个能力,可以故意停掉主服务器上的ntpd,然后在客户端等几分钟,再看ntpq -p:
systemctl stop ntpd
如果一切正常,原本带星号的主服务器会变成不可达,备服务器的remote前会从加号变成星号,客户端时间不会中断,切换时间取决于poll间隔,默认从64秒开始逐渐拉长,所以测试时要有点耐心。
这里有个点要提醒:如果主服务器只是网络抖动而不是完全宕机,ntpd不会立刻切换,因为算法要排除瞬时抖动,所以在生产环境里,两台NTP服务器最好放在不同物理位置或不同网段,避免同一台交换机故障把两条时间源全部带走。
Linux NTP配置两台服务器时最容易忽略的restrict规则
很多配置文件里只写了server,却忘了restrict,restrict决定谁能来问时间,也决定本机允许哪些操作,如果restrict写得太严,客户端即使配了server也收不到响应。
常用的restrict语法有:
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap:允许整个网段来查询时间,但不允许修改、不允许trap消息。restrict default kod nomodify notrap nopeer noquery:默认拒绝其他所有操作,只保留基本查询常常需要额外放开。restrict 127.0.0.1:本机无条件信任。
如果服务器只在内网服务,建议明确放行客户端网段;如果两台服务器需要互相peer,还要注意放行对方的IP,否则peer建立不起来。
用chrony替代ntpd时,双NTP服务器配置文件怎么写
现在CentOS 8、Ubuntu 20.04及之后的发行版默认都用chrony,配置文件位于/etc/chrony.conf,它的思路一样,只是参数名字略有变化:
# /etc/chrony.conf 示例 server 192.168.1.10 iburst prefer server 192.168.1.11 iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync allow 192.168.1.0/24
chrony里allow就相当于ntpd的restrict放行网段,makestep允许在偏差较大时直接跳变,rtcsync会把系统时间定期写回硬件时钟,验证命令也从ntpq -p换成:
chronyc sources -v
输出字段和ntpq -p类似,同样看星号、加号、reach,所以在“ntp服务器配置文件详解”这个维度上,chrony和ntpd没有本质区别,只是服务名和个别参数不同。
两个角色各自的完整模板
普通客户端模板,可以直接拿去改IP:
driftfile /var/lib/ntp/ntp.drift restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 server 192.168.1.10 iburst server 192.168.1.11 iburst
内网服务器之间做冗余的模板,假设192.168.1.10和192.168.1.11都各自还能访问上级NTP:
driftfile /var/lib/ntp/ntp.drift restrict default kod nomodify notrap nopeer noquery restrict 127.0.0.1 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap server 192.168.1.10 iburst prefer server 192.168.1.11 iburst peer 192.168.1.11 iburst
注意服务器模板里既有server又有peer,因为本机自己也是服务器之一,既需要向上级同步,也需要和对端互相备份。
最后把核心结论再压一次:网络里有两台NTP服务器,配置文件不复杂,client端把两个IP都写进server,配好restrict,用iburst加速,再通过ntpq -p确认一个带星一个带加号,就说明冗余配置已经生效,真正容易出错的地方不是多写一行server,而是restrict没放行、防火墙拦住UDP 123、或者时钟偏差太大ntpd直接罢工。
Q&A:两台NTP服务器配置文件常见疑问
配置了两台NTP服务器,为什么ntpq -p里两个都没星号
如果两个remote前都是空白或都是点,说明客户端还没能和任何服务器完成同步,先看reach是不是0,如果是0就检查网络连通性和防火墙UDP 123端口;如果reach有值但没星号,可能是offset太大,ntpd认为本地时钟不可信而拒绝同步,这种情况先用ntpdate -u 192.168.1.10手动同步一次,再重启ntpd,通常就能带上星号。
ntp.conf配置多个时间源时,prefer参数必须加吗
不是必须,只有当你有明确的主备关系、并且不希望ntpd根据网络延迟自动切换时才加prefer,如果两台服务器质量差不多,让ntpd自己选反而更稳,强制prefer可能在主服务器时钟质量变差时依然被优先选中。
内网两台NTP服务器都没有外网,还能互相校时吗
能,但要接受一个事实:两台服务器都不连接外部权威时间源时,它们只能互相参照,时间会逐渐漂移,可以在其中一台配置本地时钟作为参考源,
server 127.127.1.0 fudge 127.127.1.0 stratum 10
这样该服务器会用自己的系统时钟作为时间来源,另一台再通过peer或server指向它,不过这种配置只适用于内网时间一致性要求高、但绝对准确性要求不高的场景,长时间运行后与标准时间的差距会逐渐变大。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/640484.html





