Ntpd 快速指南

Ntpd 快速指南

快速开始


修改 ntp server 地址

vi /etc/ntp.conf

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# server 0.centos.pool.ntp.org iburst
# server 1.centos.pool.ntp.org iburst
# server 2.centos.pool.ntp.org iburst
# server 3.centos.pool.ntp.org iburst
server ntpserverip prefer

重启 ntp server

systemctl restart ntpd.service

观察启动的服务

netstat -tlunp | grep ntp

Ntpd 快速指南_第1张图片

注意走的是 udp 协议 123 端口

查看 ntp 同步状态,通常需要数分钟时间进行 synchronised

ntpstat

synchronised to NTP server (5.103.139.163) at stratum 2
time correct to within 193 ms
polling server every 1024 s

观察 ntpd 服务

ntpd 服务每隔 64 秒会主动更新时间,可以通过以下命令查看

ntpq -p
Ntpd 快速指南_第2张图片

ntpq -p 可以列出目前我们的 ntp 与相关的上层 ntp 的状态,上头的几个字段的意义为:

  • remote:远程时间服务器的 IP 地址或主机名 ~注意最左边的符号
    • [ * ] 代表目前正在作用当中的上层 ntp
    • [ + ] 代表也有连上线,而且可作为下一个提供时间更新的候选者。
    • [ - ] 代表远程服务器被认为是不合格的 NTP Server
    • [ x ] 代表远程服务器不可用
  • refid:远程时间服务器的上一层服务器IP地址
  • st:stratum 阶层,表示与顶层参考时钟(原子时钟、GPS 或者其他无线电时钟)的距离,顶层为第 0 层。距离顶层越近,时间越准确。
  • t:类型,本地 ntp 服务与远程时间服务的通信方式
    • u:单播或者多播
    • b:广播
    • l:本地
  • when:最后一次时间同步到现在的时间,没有单位表示秒
  • poll:同步的频率
  • reach:和远程时间服务的连接成功次数,每成功一次就增加,以8进程显示
  • delay:从本地到远程时间服务器通信往返时间,单位毫秒
  • offset:本机与远程时间服务器的时间偏移量,该值越接近0越好,单位毫秒
  • jitter:本机与远程时间服务器的时间平均偏差,该值越小越好,单位毫秒


简介


ntpd 特性

C/S 合一

ntpd 对下层 client 来说是 service server,对于上层 server 来说它是 client,也就是说新版的 NTP 服务程序已经不对服务端和客户端进行区分了,统一叫做 ntpd。ntpd 根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。
所有的配置都在 /etc/ntp.conf 文件中。

  • restirct 部分为 server 端配置
  • server 部分为 clinet 端配置

NTP 客户端同步间隔

ntp 服务会间隔多长时间想时钟服务器请求一次时钟同步呢?默认最小时间间隔为64s,默认最大时间间隔是1024s(17分钟左右)。
默认间隔可以通过 minpoll 和 maxpoll 配置。

容忍误差范围

ntpd 服务并不是在任何情况下都会进行同步的。当时钟服务器时间和本地时间相差大于1000s 时,ntp 服务就会认为是人为调整了时钟或出现了硬件故障,例如 CMOS 电池损坏等。此时,NTP服务就会退出,需要人工使用 ntpdate 进行时钟同步。

采用 -g 选项可以让 ntpd 忽略 1000s 或更大误差

层次(strata)

stratum 根据上层 server 的层次而设定(+1)。
对于提供 network time service provider 的主机来说,stratum的设定要尽可能准确。
而作为局域网的 time service provider,通常将 stratum 设置为 10


ntpd 与 ntpdate

ntpd

  • ntpd 是一个时间服务。采用柔性时间调整策略,让时间的变化和调整尽量减少对业务的影响。
  • ntpd 不盲目相信远端时钟,服务器时间和远端时钟超过恐慌阈值(默认1000秒),ntpd 甚至会停止时间同步。
  • ntpd 自己会思考。它相信本地时间可能不对,但是不会忽快忽慢甚至停滞。ntpd 通过多次收发包选择权威稳定的时间源,算出双方间的网络延迟,然后才会采信新的远端时钟进行时间同步。
  • ntpd 在和时间服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差——或者说 Local Clock 的自然漂移 (drift) ——记录下来。这样即使网络有问题,本机仍然能维持一个相当精确的走时。

ntpdate

  • ntpdate 是一个时间同步命令,通常采用 crond + ntpdate 方式同步时间。
  • ntpdate 盲目信任远端时钟,如果远端时钟错误,ntpdate 永远相信远端时钟是正确的,可能造成服务器时钟停滞,甚至回逆。
  • ntpdate 简单粗暴,无脑不会思考。采用野蛮式(brute force)、跃进式调整服务器时间。

区别

-- ntpdate 是一个命令,而 ntpd 则是一个体系

ntpdate 机制是 one-shot 同步, 若要定时同步需搭配 cron

ntpd 是 daemon, 可自动定期将系统时间和 NTP server 更新

ntpd 不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步,并非 ntpdate 立即同步。也正如此两者不可同时运行。

ntp.org 在 2012 年时开始, 表示将让 ntpd 来取代 ntpdate, 主要原因如下:

ntpd 可以 cover ntpdate 的功能
ntpd 和 ntpdate 原本共用相同的程式码, 后来 ntpd 优化了裡面的演算法, 但 ntpdate 并没有更新

在生产环境中慎用 ntpdate。时钟的跃变,对于某些程序会导致很严重的问题。许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如传统数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。不幸的是,ntpdate 调整时间的方式就是我们所说的”跃变“: 在获得一个时间之后,ntpdate 使用 settimeofday 设置系统时间。

  • ntpdate 不安全。ntpdate 的设置依赖于 ntp 服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿 下ntp 服务器并令与其同步的服务器执行某些消耗性的任务。由于 ntpdate 采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。

  • ntpdate 不精确。一旦 ntp 服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd 不仅能够校准计算机的时间,而且能够校准计算机的时钟。

  • ntpdate 不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果 ntpdate 发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用 ntpd 来校准时钟,而不是调整计算机时钟上的时间。

你可能感兴趣的:(Ntpd 快速指南)