Linux配置NTP时间服务器

NTP即Network Time Protocol,是用来同步网络中各个计算机的时间的协议。该协议本身是个挺复杂的协议,但是设置NTP服务器不难。
本文主要介绍:

  • 背景(即为什么要设置NTP时间服务器)
  • 配置NTP时间服务器端
  • 配置NTP client端

背景

为什么要设置NTP时间服务器?在日常开发工作中,经常都需要定位多个服务器上的问题,由于是集群环境,经常出现一个问题是:各个服务器上时间不一致,这导致在定位问题时不是很方便,需要自己去对比几个节点时间相差多少,然后才能分析找某一时间点的各个节点的业务进程的日志,如此才能继续定位下去。本文的设置NTP时间服务器的目的就是解决类似的问题。

原理大家都可以查阅文末的参考资料了解。主要就是拿一个性能较好的机器来作为NTP server,其他所有节点作为NTP client以该节点为标准,同步自己的本地时间。这样可以保证各个节点时间一致。需要注意的是,这样并不能保证各节点时间与真实时间一致。好处是各个节点时间是一致的,而且发现时间不准确时,只需要改NTP server上时间就可以了,其他节点会自动同步。

配置NTP时间服务器

假设我们用10.11.12.13节点来作为NTP服务器
登录到该节点
通常Linux服务器上面都已经安装了NTP,如果没有安装请通过搜索引擎或者文末参考资料进行查询并自行安装。

配置NTP Server的层数提供本地服务

1
# vi /etc/ntp.conf

添加如下两行:
1
2
server  127.127.1.0     # local clock
fudge 127.127.1.0 stratum 2

重启NTP服务
1
2
# service ntpd stop
# service ntpd start

通过查看123端口检测NTP服务是否启动
如下便表示正常

1
2
3
4
5
6
7
# netstat -tlunp | grep ntp
udp 0 0 192.168.1.101:123 0.0.0.0:* 2563/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2563/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2563/ntpd
udp6 0 0 fe80::20c:29ff:fe7b:123 :::* 2563/ntpd
udp6 0 0 ::1:123 :::* 2563/ntpd
udp6 0 0 :::123 :::* 2563/ntpd

设置开机时自动运行时间服务
重要步骤,别忘了 : )

1
# chkconfig ntpd on

根据实际设置当前节点时间

1
# date -s “2018-05-30 20:11:11”

将系统时钟同步到硬件时钟
避免节点重启之后,时间又错乱

1
# hclock -w

配置NTP client端

登录相应节点
设置需要需要根据哪个服务器来进行NTP时间同步

1
# vi /etc/ntp.conf

在/etc/ntp.conf文件中添加:(服务器当然填上面设置的10.11.12.13)
1
server 10.11.12.13

故意设置一个错误时间
用于检测NTP时间同步服务是否生效

1
# date -s “2011-11-11 11:11:11”

重启NTP服务

1
2
# service ntpd stop
# service ntpd start

设置开机时自动运行时间服务
重要步骤,别忘了 : )

1
# chkconfig ntpd on

验证ntp服务已经运行

1
pgrep ntpd

或者通过查看123端口检测NTP服务是否启动
如下便表示正常
1
2
3
4
5
6
7
# netstat -tlunp | grep ntp
udp 0 0 192.168.1.101:123 0.0.0.0:* 2563/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 2563/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 2563/ntpd
udp6 0 0 fe80::20c:29ff:fe7b:123 :::* 2563/ntpd
udp6 0 0 ::1:123 :::* 2563/ntpd
udp6 0 0 :::123 :::* 2563/ntpd

查看NTP服务器的列表
1
2
3
4
# ntpq -p
remote refid st t when poll reach delay offset jitter
============================================================================
*10.11.12.13 LOCAL(0) 4 u 53 64 377 0.240 0.374 0.240

各参数含义如下:

remote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先
refid:参考上一层ntp主机地址
st:stratum阶层
when:多少秒前曾经同步过时间
poll:下次更新在多少秒后
reach:已经向上层ntp服务器要求更新的次数
delay:网络延迟
offset:时间补偿
jitter:系统时间与bios时间差

查看当前时间

1
2
# date
2018-05-30 20:20:11

如果不是在设置的错误时间的附件,说明该节点已经同步了 : )

将系统时钟同步到硬件时钟
避免节点重启之后,时间又错乱

1
# hclock -w

到此已经配置成功,其他需要时间同步的节点,也可以照以上步骤操作。

其他问题

有可能会遇到防火墙的问题导致设置失败,需要设置防火墙将123端口开放

1
iptables -A INPUT -p UDP -i eno16777736 -s 192.168.1.0/24 --dport 123 -j ACCEPT


参考资料

Linux 上配置 NTP SERVER
linux ntp时间服务器配置
ntp原理与设置
Linux配置ntp时间服务器(全)

如果你觉得本文对你有帮助,欢迎打赏