CentOS NTP 时间同步服务安装和局域网同步
NTP(Network Time Protocol)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正。
环境
本例共用 3 台服务器做测试,1台做为 NTP 服务器,两台作为 NTP 的客户端。两台客户端的时间与 NTP 服务的时间保持同步。
搭建的时候使用的是 CentOS 7,实际上 CentOS 6 也没有问题,系统本身的操作命令不同,和 NTP 服务没有关系,其它发行版可能略有区别,未测试。
三台服务我做了 host 映射。
vim /etc/hosts
# 添加
192.190.20.13 hd-node1
192.190.20.14 hd-node2
192.190.20.15 hd-node3
hd-node1
作为 NTP 服务节点。
防火墙
NTP 服务默认走 UDP 协议,使用 123 端口,如果启动防火墙的话,会导致时间同步失败。
暂时先直接关闭防火墙。
# 关闭
systemctl stop firewalld
# 设置开机不启动
systemctl disable firewalld
CentOS 6 下面使用 service
和 chkconfig
来实现这个操作(下面的操作不再做区分演示)。
# 关闭防火墙
service iptables stop
# 关闭开机启动
chkconfig iptables off
安装 NTP
首先可以使用 rpm -qa | grep ntp
查询一下是否安装了 NTP,没有的话就先安装。
yum install ntp
配置 hd-node1 的 ntp 服务
这里的配置,在考虑使用场景上来说,有两种。
一种是服务器可以访问公网,时间可以从公网上的时间服务器获取,然后提供给局域网内不能访问公网的主机同步时间。
另外一种是服务器不可以访问公网,只是为了统一局域网内的所有主机时间,我的情况就是这种,因为在局域网内不能访问公网,并且需要同步集群时间。
我们两种都讲一下,区别不大,但是会让新手感到困惑。
CentOS 下 ntp 的配置文件是 /etc/ntp.conf
。
服务器可以访问公网
vim /etc/ntp.conf
删除默认的同步 centos 的时间服务,那个服务在国内不能访问或者延迟太高,同步不了,我们换成国内可以访问的时间同步服务。
# 检测的时间服务器地址
server ntp1.aliyun.com
# 允许时间服务器修改本机时间
restrict ntp1.aliyun.com nomodify notrap noquery
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
国内除了阿里,还有很多大学的时间同步服务,都可以使用。
重新启动 hd-node1 的 ntp 服务。
systemctl restart ntpd
查看当前 ntp 服务运行状态。
ntpq -p
服务器不能访问公网
如果主服务器不能访问公网,我们让它和自己同步,时间可以直接用 date -s
来手动重新设定。
注释掉默认的公网 server 配置。
server 127.127.1.0
fudge 127.127.1.0 stratum 10
默认的配置文件里这两个是被注释掉的。把自己的时间做为 NTP 服务器的时间,即和自己同步。局域网里不可以访问外网,所以这里需要把这个配置项用上,即把前面的注释符 #
号去掉就可以了。
NTP 的本地 IP 就使用 127.127.1.0
,没有问题的,我中间把它修改成回环地址 127.0.0.1
是不能正确启动服务的。
添加允许同步时间的客户端 IP 段。我需要让 192.190.*.*
段的客户端都可以来同步时间,nomodify
表示客户端不能反过来修改服务器的时间。
restrict 192.190.0.0 mask 255.255.0.0 nomodify
到这里服务端就配置完成了,开启 ntp 并设置开机启动。
systemctl start ntpd
systemctl enable ntpd
客户端配置
客户端的配置是相同的,我们用 hd-node2
节点来做演示。
注释掉默认的 server 配置,然后将同步的服务指向 hd-node1
。其它的配置不用管。
server 192.190.20.13
重启 ntp,查看时间,发现时间同步了。然后设置开机启动,以后开机时间就直接同步一次了。
systemctl restart ntpd
systemctl enable ntpd
使用 ntpq -p
查看状态。offset
越小,同步的时间越精确。