您的位置:首页 > 编程语言 > PHP开发

NTP 时间服务器实战

2015-12-26 20:05 489 查看
关于 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.43NTPD服务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




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

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

ntpq -p


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



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

符号含义
*响应的NTP服务器和最精确的服务器
代表目前正在作用当中的上层 NTP
+响应这个查询请求的NTP服务器
代表也有连上线,而且可作为下一个提供时间更新的候选者
blank
(空格)
没有响应的NTP服务器
remote响应这个请求的NTP服务器的名称
refidNTP服务器使用的更高一级服务器的名称
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服务及时间同步问题 :/article/9774411.html

CentOS6.5系统搭建NTP服务器:http://www.iyunv.com/thread-64847-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: