0%

NTP—服务端&客户端搭建指南

◈NTP是什么

  • 网络时间协议(英语:Network Time Protocol,缩写:NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议,位于OSI模型的应用层。自1985年以来,NTP是当前仍在使用的最古老的互联网协议之一。NTP由特拉华大学的David L. Mills设计。
  • 计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。

◈服务端

  1. 安装NTP服务器(以下命令都再root权限下执行)

    yum install ntp

  2. 先做一次强制同步(注意:ntpdatentpd为两种同步策略,下面会细讲)

    ntpdate cn.pool.ntp.org

  3. 更改配置文件

    vim /etc/ntp.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    driftfile /var/lib/ntp/drift
    restrict default nomodify notrap nopeer noquery
    #放行主机
    restrict 127.0.0.1
    restrict ::1

    #放行局域网 192.168.100 段可以来同步本服务端的时间
    restrict 192.168.100.0 mask 255.255.255.0 nomodify notrap

    #放一些能用的
    server 210.72.145.44
    server 202.112.10.36
    server 59.124.196.83
    server 0.cn.pool.ntp.org
    server 1.cn.pool.ntp.org
    server 2.cn.pool.ntp.org
    server 3.cn.pool.ntp.org
    #这里如果将以上server全部注释,并开启下面的注释
    #会采用本机时间作为时间服务器为集群中的其他节点提供时间同步,其实也可以
    #server 127.127.1.0
    #fudge 127.127.1.0 stratum 10

    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys

    vim /etc/sysconfig/ntpd

    1
    2
    #添加BIOS时间同步
    SYNC_HWCLOCK=yes
  4. 开启并检查服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    #1.第一次,查看服务器同步状态(注意这里本机还没有开启服务器)
    [root@hadoop10 hadoop]# ntpstat
    synchronised to NTP server (119.28.206.193) at stratum 3
    time correct to within 869 ms
    polling server every 64 s
    [root@hadoop10 hadoop]# ntpq -p
    ntpq: read: Connection refused
    #2.开启服务器
    [root@hadoop10 hadoop]# systemctl start ntpd
    #3.第二次,查看服务器同步状态(并未同步成功,这里需要等待5-10min左右)
    [root@hadoop10 hadoop]# ntpstat
    unsynchronised
    polling server every 64 s
    [root@hadoop10 hadoop]# ntpq -p
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    45.124.64.93 .STEP. 16 u - 64 0 0.000 0.000 0.000
    electrode.felix 56.1.129.236 3 u 2 64 1 387.564 1.610 0.000
    tock.ntp.infoma .GPS. 1 u 2 64 1 366.394 23.747 0.000
    ntp1.ams1.nl.le 130.133.1.10 2 u 3 64 0 0.000 0.000 0.000
    #4.第三次,查看服务器状态(注意ntpq -p已经选择好了服务器,但仍未同步成功)
    [root@hadoop10 hadoop]# ntpstat
    unsynchronised
    polling server every 64 s
    [root@hadoop10 hadoop]# ntpq -p
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    45.124.64.93 .STEP. 16 u - 64 0 0.000 0.000 0.000
    +electrode.felix 56.1.129.236 3 u 83 64 1 393.182 -0.273 1.488
    *tock.ntp.infoma .GPS. 1 u 21 64 1 365.134 25.103 4.323
    +ntp1.ams1.nl.le 130.133.1.10 2 u 21 64 1 386.136 15.690 6.699
    #第四次,查看服务器状态(同步成功)
    [root@hadoop10 hadoop]# ntpstat
    synchronised to NTP server (84.16.67.12) at stratum 2
    time correct to within 224 ms
    polling server every 64 s
    [root@hadoop10 hadoop]# ntpq -p
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    +45.124.64.93 236.43.203.76 2 u 62 64 377 248.017 16.850 6.243
    -electrode.felix 56.1.129.236 3 u 15 64 377 389.168 9.956 6.210
    *tock.ntp.infoma .GPS. 1 u 18 64 377 370.122 34.438 4.234
    +ntp1.ams1.nl.le 130.133.1.10 2 u 14 64 377 379.225 23.871 7.190
  5. 配置开机自启ntpd服务

    systemctl enable ntpd

至此,服务端配置完成

◈客户端

  1. 安装NTP服务器(以下命令都再root权限下执行)

    yum install ntp

  2. 强制同步到刚刚配置的服务端(刚才的服务器在我的环境中是192.168.100.11,当然如果hosts文件中配置过,可以直接用域名)

    ntpdate hadoop10

  3. 配置同步,分为以下两种方法

方法一

  1. 更改配置文件

    vim /etc/ntp.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    driftfile /var/lib/ntp/drift

    restrict default nomodify notrap nopeer noquery

    restrict 127.0.0.1
    restrict ::1

    #只配置将服务器上游同步到局域网中自有的服务端
    #perfer 表示优先此地址
    server hadoop10 perfer
    ##同样这里可以同步到其他的服务器,但建议不开,或者最多开个本机也行

    includefile /etc/ntp/crypto/pw
    keys /etc/ntp/keys

    vim /etc/sysconfig/ntpd

    1
    2
    #添加BIOS时间同步
    SYNC_HWCLOCK=yes
  2. 配置服务器环境

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #1.开启服务器
    [root@hadoop13 hadoop]# systemctl start ntpd
    #2.查询状态
    [root@hadoop13 hadoop]# ntpstat
    unsynchronised
    polling server every 8 s
    [root@hadoop13 hadoop]# ntpq -p
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    hadoop10 84.16.67.12 2 u 9 64 1 1.613 10.422 0.000
    #3.再次查询,同步成功
    [root@hadoop13 ~]# ntpstat
    synchronised to NTP server (192.168.100.10) at stratum 3
    time correct to within 653 ms
    polling server every 64 s
    [root@hadoop13 ~]# ntpq -p
    remote refid st t when poll reach delay offset jitter
    ==============================================================================
    *hadoop10 84.16.67.12 2 u 23 64 377 0.677 6.215 2.461
  3. 配置开机自启ntpd

    systemctl enable ntpd

方法二(个人不推荐,但非常方便)

  1. 配置定时任务(关于crontab怎么用,查下资料挺简单的)

    crontab -e

    添加以下文本并保存(作用是每10分钟强制同步一次)

    1
    */10 * * * * ntpdate hadoop10
  2. 开启并开机启动crontab

    1
    2
    [root@hadoop13 ~]# systemctl restart crond
    [root@hadoop13 ~]# systemctl enable crond

至此,客户端配置完成

◈拓展知识

  • NTP官方网站

  • Network Time Synchronization Research Project 官网详细的原理介绍

  • zh.wikipedia.org:NTP网络时间协议 需要梯子,非常推荐这篇文章,深入浅出,简单易懂

  • ntpdntpdate的区别 转自 oschina:阿dai学长

    • ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对(平滑同步)
    • ntpdate不会考虑其他程序是否会阵痛,直接调整时间(“跃变”)。
    • 一个是校准时间,一个是调整时间。
    • “跃变”的危害:
      • 这样做不安全。ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以服务器为准)。
      • 这样做不精确。一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。
      • 这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错(例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。

    因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时间。

  • NTP只同步时间戳,时区需要单独设置,以下命令Centos7下设置时区为东八区

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime