NTP 时间服务器实战

关于 NTP 服务器的基本概念: 时间服务器:NTP服务器
关于 NTP 服务器的基本安装搭建:NTP 服务器的安装与设定

  • 一 主机规划
  • 二 前期准备
    • 1 设置好时区
    • 2 检查 NTP 是否安装
    • 3 设置同步更新本地 hwclock
    • 4 查看能提供服务的外部时间服务器
    • 5 先使用 ntpdate 手动同步下时间
  • 三 修改 NTP 的配置文件
    • 1 配置内网NTP-Server106343
    • 2 配置内网 NTP-Client
  • 四 Server 端启动 NTP 服务与外网时间服务器同步
    • 1 启动 Server 端的 NTP 服务器
    • 2 查看服务连接和监听
  • 五 Client 端启动 NTP 服务与内网时间服务器同步
    • 1 手动更新 Client 时间
    • 2 启动 Client 端的 NTP 服务器
    • 3 查看服务连接和监听
    • 4 常见错误处理

一. 主机规划

目标环境,5台 Linux centos 6.5, 一台作为 NTPD 服务与外部公共 NTP 服务同步时间,同时作为内网的 NTPD 服务器,其他机器与这台服务做时间同步。其中也只有一台作为 NTPD 服务的机子可以上外网,其他的主机只能在局域网中通信。

1. NTP时间同步方式选择

  • ntpdate 命令直接同步
  • 使用 NTPD 服务平滑同步

现有一台设备,系统时间是 13:00 , 真实的当前时间(在空中,也许卫星上,这里假设是在准备同步的上级目标NTP服务器)是: 12:30 。如果我们使用ntpdate同步(ntpdate -u 目标NTP服务器IP),操作系统的时间立即更新为12:30,假如,我们的系统有一个定时应用,是在每天12:40运行,那么实际今天这个的任务已经运行过了(当前时间是13:00嘛),现在被ntpdate修改为12:30,那么意味作10分钟后,又会执行一次任务,这就糟糕了,这个任务只能执行一次的嘛!这就暴露了 ntpdate 时间同步的隐患,当然这个例子有些极端,但的确是有风险的,生产环境我不打算这么干,还是稳妥点好。所以解决该问题的办法就是时间平滑更改,不会让一个时间点在一天内经历两次,这就是NTPD服务方式平滑同步时间,它每次同步时间的偏移量不会太陡,是慢慢来的(完全同步好需要较长时间,所以一般开启 NTPD 服务同步前先用 ntpdate 先手动同步一次)。

2. 关系如下:

IP 地址 NTP 角色 说明 是否开启 ntpd 同步方式
10.6.3.43 NTPD服务 1、负责与外部公共NTPD服务同步标准时间
2、作为内外网络的NTPD服务
NTPD服务平滑同步
10.6.3.32 内外NTP客户端 内网设备与 10.6.3.43 同步时间 NTPD服务平滑同步
10.6.3.33 内外NTP客户端 内网设备与 10.6.3.43 同步时间 NTPD服务平滑同步
10.6.3.36 内外NTP客户端 内网设备与 10.6.3.43 同步时间 NTPD服务平滑同步
10.6.3.48 内外NTP客户端 内网设备与 10.6.3.43 同步时间 NTPD服务平滑同步


二. 前期准备

2.1 设置好时区

在中国,正确的时区应为 CST(Chinese Standard Time),也就是我们通常所说的北京时间。那么中国当地的时间晚上8点的话,我们可以有下面两种表示方式

  • 20:00 CST
  • 12:00 UTC

因为中国处在 UTC+8 时区,依次类推,在 UTC 标准时间,就是 12:00了。不管通过任何渠道我们想要同步系统的时间,通常提供方只会给出 UTC+0 的时间值而不会提供时区(因为它不知道你在哪里).所以当我们设置系统时间的时候,设置好时区是首先要做的工作。

1. 查看当前时区

date
>> Sat Dec 26 14:11:45 EDT 2015

重点在于这个 “EDT“,并非之前所说应该是 “CST”

2. 修改 /etc/sysconfig/clock

  • 将原来的时区改为
vim /etc/sysconfig/clock

ZONE="America/New_York"
#改为
ZONE="Asia/Shanghai"

3.覆盖 /etc/localtime

cp -a /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite `/etc/localtime'? y

4. 查看修改后的时区

date
>> Sat Dec 26 14:11:45 CST 2015

2.2 检查 NTP 是否安装

rpm -qa |grep ntp
>> ntp-4.2.6p5-1.el6.centos.x86_64
>> ntpdate-4.2.6p5-1.el6.centos.x86_64

如果没有安装,我们按照下

yum install ntp

2.3 设置同步更新本地 hwclock

在 Linux 下系统时间在开机的时候会和硬件时间同步(synchronization),之后也就各自独立运行了那么既然两个时钟独自运行,那么时间久了必然就会产生误差了,而 NTP 默认又只更新系统时间,因此我们需要设置硬件时钟进行同步调整

vim /etc/sysconfig/ntpd

添加以下即可:

SYNC_HWCLOCK="yes"

2.4 查看能提供服务的外部时间服务器

在能够上网的一台主机中(比如 10.6.3.43)上执行以下命令,查看可以正常提供时间服务的外部主机。

ntpdate -q 1.cn.pool.ntp.org

这里写图片描述

也就是说有三个可以提供该服务的 IP,其中 202.118.29.82 的时延最小。如果上层服务器不可用,一般类似如下显示

1.server 202.118.1.81, stratum 0, offset 0.000000, delay 0.00000
26 Dec 17:25:18 ntpdate[23338]: no server suitable for synchronization found

Note:IP地址: 202.112.10.36 中国 教育网,提供时间校准服务

2.5 先使用 ntpdate 手动同步下时间

配置前,先使用ntpdate手动同步下内网中作为 NTPD 服务器的时间,免得本机与外部时间服务器时间差距太大,让ntpd不能正常同步。即在 10.6.3.43 上执行 (root 权限下操作):

ntpdate -u 1.cn.pool.ntp.org
>> 26 Dec 14:48:37 ntpdate[32758]: adjust time server 202.112.10.36 offset -0.006147 sec

然后再将该时间先写入硬件时间

date;hwclock -w


三. 修改 NTP 的配置文件

3.1 配置内网NTP-Server(10.6.3.43)

下面主要是配置内网的NPTD服务器(10.6.3.43), NTPD服务配置核心就在 /etc/ntp.conf 文件,配置好了就 OK。

vim /etc/ntp.conf

1. 指定上层对时服务器

加 # 号注释掉 centos 默认的对时服务器,如果主机可以访问外网,这一步最好做一下。添加国家对时服务器。

# 中国这边最活跃的时间服务器 : http://www.pool.ntp.org/zone/cn
server 202.112.29.82 perfer     # 1.cn.pool.ntp.org
server 202.118.1.81     # stratum 2 
server 202.118.1.130        # stratum 2 
server 202.112.10.36        # stratum 3 
  • 为了防止出现上层对时服务器故障,无法正确提供时间同步,一般建议配置两个或以上时间同步服务器
  • prefer 表示优先使用


2. 修改上层时间服务器对本机的权限

# allow update time by the upper server # 允许上层时间服务器主动修改本机时间 restrict 202.112.29.82 nomodify notrap noquery restrict 202.118.1.81 nomodify notrap noquery restrict 202.118.1.130 nomodify notrap noquery restrict 202.112.10.36 nomodify notrap noquery

3. 外部时间服务器不可用时,设置以本地时间作为时间服务

# 外部时间服务器不可用时,以本地时间作为时间服务
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10


4. 设置对内网主机提供NTP服务

因为笔者的实验环境中,内网使用 10.6.3.0/24 网段,所以设置如下

restrict 10.6.3.0 mask 255.255.255.0 nomodify notrap

3.2 配置内网 NTP-Client

内网其他设备作为NTP的客户端配置,相对就比较简单,而且所有设备的配置都相同。找其中一台配置 /etc/ntp.conf 文件,配置完成验证通过后,拷贝到其他客户端机器,直接使用即可。 Client 配置在笔者的集群中,是在 10.6.3.32、10.6.3.33、10.6.3.36、10.6.3.48 上完成。

driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1

# 配置时间服务器为本地的时间服务器

server 10.6.3.43
restrict 10.6.3.43 nomodify notrap noquery

server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

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

为了简单,这里只列出了配置项,注释全部清理了。

四. Server 端启动 NTP 服务与外网时间服务器同步

4.1 启动 Server 端的 NTP 服务器

因为在 “2.4 先使用 ntpdate 手动同步下时间” 中我们已经和外部时间服务器进行过一次时间校准了。所以在集群中作为 NTPD服务 的 10.6.3.3.43 主机上直接先启动 NTP 服务(root 权限下完成)

service ntpd start chkconfig ntpd on

启动后,一般需要 5-10 分钟左右的时候才能与外部时间服务器开始同步时间。可以通过命令查询NTPD服务情况。

4.2 查看服务连接和监听

1. netstat -tlunp 查看端口以及监听情况

netstat -tlunp | grep ntp 

NTP 时间服务器实战_第1张图片

表示连接和监听已正确,采用UDP方式


2. ntpq -p 查看网络中的NTP服务器,同时显示客户端和每个服务器的关系

ntpq -p

笔者不定时地进行查看,过程如下:

NTP 时间服务器实战_第2张图片

很明显,作为等级才 10 的 LOCAL 在等级为 2 的时间服务器面前,不敢嚣张了…


符号 含义
* 响应的NTP服务器和最精确的服务器
代表目前正在作用当中的上层 NTP
+ 响应这个查询请求的NTP服务器
代表也有连上线,而且可作为下一个提供时间更新的候选者
blank
(空格)
没有响应的NTP服务器
remote 响应这个请求的NTP服务器的名称
refid NTP服务器使用的更高一级服务器的名称
st 正在响应请求的NTP服务器的级别
when 上一次成功请求之后到现在的秒数
poll 本地和远程服务器多少时间进行一次同步,单位秒,在一开始运行NTP的时候这个poll值会比较小,服务器同步的频率大,可以尽快调整到正确的时间范围,之后poll值会逐渐增大,同步的频率也就会相应减小
reach 用来测试能否和服务器连接,是一个八进制值,每成功连接一次它的值就会增加
delay 从本地机发送同步要求到ntp服务器的往返时间
offset 主机通过NTP时钟同步与所同步时间源的时间偏移量,单位为毫秒,offset越接近于0,主机和ntp服务器的时间越接近
jitter 统计了在特定个连续的连接数里offset的分布情况。简单地说这个数值的绝对值越小,主机的时间就越精确


3. ntpstat 查看连接并同步后信息

ntpstat 

这里写图片描述


五. Client 端启动 NTP 服务与内网时间服务器同步

之前在 “3.2 配置内网 NTP-Client ” 部分已经配置好 Client 。

5.1 手动更新 Client 时间

ntpdate -u 10.6.3.43
>> 26 Dec 18:23:32 ntpdate[20408]: step time server 10.6.3.43 offset 58.586935 sec

然后写入硬件时间

date;hwclock -w

5.2 启动 Client 端的 NTP 服务器

service ntpd start chkconfig ntpd on

5.3 查看服务连接和监听

ntpq -p

这里写图片描述

过了一阵子后,改为 master5(10.6.3.43) 为 NTP 时间服务器

这里写图片描述

5.4 常见错误处理

ntpdate -u ip -> no server suitable for synchronization found

判断:在 ntp 客户端用 ntpdate –d serverIP 查看,发现有 “Server dropped: strata too high” 的错误,并且显示”stratum 16”。而正常情况下 stratum 这个值得范围是“0~15”,或者是配置文件没有配置好。

原因:NTP server 还没有和其自身或者它的 server 同步上。在 ntp server 上重新启动 ntp 服务后,ntp server 自身或者与其 server 的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行 ntpdate 命令时会产生 no server suitable for synchronization found 的错误。或配置文件 (/etc/ntp.conf)配置有误或压根没配置。

处理:等待几分钟后,重试一般解决,或重新配置 /etc/ntp.conf

参考资料:

  • ntp服务及时间同步问题 :http://blog.csdn.net/yelang_110/article/details/38292895
  • CentOS6.5系统搭建NTP服务器:http://www.iyunv.com/thread-64847-1-1.html

你可能感兴趣的:(NTP 时间服务器实战)