一、前言
1、介绍
NTP的官方网站:http://www.pool.ntp.org,在这可以找到离我们城市最近的NTP Server. NTP建议我们为了保障时间的准确性,最少找两个NTP Server;在中国可以选择下面几台服务器:
- server 1.cn.pool.ntp.org
- server 0.asia.pool.ntp.org
- server 2.asia.pool.ntp.org
2、 时间时区概念(CST = UTC+8 = GMT+8)
- DST:夏令时指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用,中国不使用。
- UTC(Coordinated Universal Time):整个地球分为二十四时区,每个时区都有自己的本地时间,在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时。(UTC与GMT时间基本相同)
- GMT(格林威治时间):格林威治标准时间指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
- CST(Chinese Standard Time)中国标准时间:通常所说的北京时间,中国处在UTC+8时区。
3、ntpd 与 ntpdate区别
ntpd:不仅可以做为时间同步服务器,还可以做客户端与标准时间服务器进行同步时间,ntpd为平滑同步时间,一点一点的把时间校准过来的,最终把时间慢慢的校正对,(不可以和ntpdate同时运行)不是NTP服务器可以不启动NTP。
ntpdate:用于客户端的时间矫正,ntpdate为立即同步时间,没有ntpd平滑同步时间那么精确,在生产环境中慎用ntpdate。
注意:ntpd有一个自我保护设置,如果本机与上源时间相差太大则ntpd不运行;所以新设置的时间服务器要先ntpdate从上源取得时间初值, 然后启动ntpd服务。ntpd服务运行后,先是每64秒与上源服务器同步一次,根据每次同步时测得的误差值经复杂计算逐步调整自己的时间,随着误差减小,逐步增加同步的间隔, 每次跳动都会重复这个调整的过程。所以当本机与上源时间相差太大时,可以在执行ntpd同步之前,先使用ntpdate将时间差缩小,然后使用ntpd进行时间的平滑同步。
4、为什么要搭建时间服务器?
ntp的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0.1ms,在互联网上大多数地方其精度可以达到1-50ms;
为什么不每台服务器直接同步公网上的时间服务器还要自己搭建一台呢,问题就在于企业中有10台服务器可以这样做,如果有100台,200台甚至更多呢,每台服务器都去同步公网的时间服务器,这样会造成延迟;
为了减少时间误差,搭建一台内网时间服务器(局域网中的NTP准确来说应该叫“NTP Relay Server”)来同步公网时间,然后所有服务器来与这台时间服务器进行同步,既可以减小误差同步速度又快,还可以达规范时间的作用。
二、NTP服务搭建
1、检查ntp服务是否已安装,如果有下面内容输出,测说明ntp服务已安装(CentOS7默认已安装,但未启用)
[root@localhost ~]# rpm -qa | grep ntp
2、如没有手动安装NTP服务
[root@localhost ~]# yum install ntp ntpdate -y
3、修改NTP配置文件,加黑部分为主要配置,添加NTP服务器地址
[root@localhost ~]# vim /etc/ntp.conf
driftfile /var/lib/ntp/drift #会把时间误差记录下来写入driftfile,这样即使重新开机以后之前的计算结果也就不会丢失了
logfile /var/log/ntpd.log #新增日志目录
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap #控制允许哪些网络查询和同步时间,这里允许192.168.10.0网段上的所有机器可以从这台机器上查询和同步时间
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst
server 192.168.10.30 iburst #新增当外部时间不可用时可以使用本地时间
fudge 127.0.0.1 stratum 10 #startum为时间服务器的层次;设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0,默认为10
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
4、启动服务并加入开机自启动项
[root@localhost ~]# systemctl restart ntpd ; systemctl enable ntpd
[root@localhost ~]# systemctl restart ntpdate ; systemctl enable ntpdate
5、作为NTP服务器,防火墙需要放行NTP服务的流量
[root@localhost ~]# firewall-cmd --permanent --add-service=ntp && firewall-cmd --reload
6、查看UDP123端口是否被ntpd服务进程占用,如有说明ntp服务成功启动
[root@localhost ~]# systemctl status ntpd | grep Active ; netstat -tlunp | grep ntp
7、将当前时间和日期写入BIOS
[root@localhost ~]# hwclock -w
[root@localhost ~]# echo "SYNC_HWCLOCK=yes" >> /etc/sysconfig/ntpd
8、查看同步信息
[root@localhost ~]# ntpq -p
注释:
remote:即NTP主机的IP或主机名称;最左边的符号,“+”:代表目前正在作用钟的上层NTP;“*”:表示也有连上线,不过是作为次要联机的NTP主机。
refid:参考的上一层NTP主机的地址
st:即stratum阶层
when:几秒前曾做过时间同步更新的操作
poll:下次更新在几秒之后
reach:已经向上层NTP服务器要求更新的次数
delay:网络传输过程中延迟的时间
offset:时间补偿的结果
jitter:Linux系统时间与BIOS硬件时间的差异时间
三、Linux客户端
1、将多余的Server注释掉,增加一行指向新部署的NTP服务器的IP地址即可
[root@localhost ~]# vi /etc/ntp.conf
2、 重启服务
[root@localhost ~]# systemctl restart ntpd ; systemctl enable ntpd
3、设置定时任务进行时间校对,需安装ntpdate,每天24点更新同步时间
[root@localhost ~]# crontab -e
0 0 * * * /usr/sbin/sntp -P no -r 192.168.10.30; hwclock -w
4、验证同步信息
[root@localhost ~]# ntpq -p
[root@localhost ~]# ntpdate -q 192.168.10.30 //查询你的ntp服务器同步信息
[root@localhost ~]# ntpstat //查看每次更新间隔
synchronised to NTP server (192.168.10.30) at stratum 3 //本NTP服务器层次为3,已向192.168.10.30NTP同步过
time correct to within 2083 ms //时间校正到相差93ms之内
polling server every 64 s //每1024秒会向上级NTP轮询更新一次时间