原理
NTP(Network TimeProtocol,网络时间协议)是用来使计算机时间同步的一种协议。它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),切可介由加密确认的方式来防止恶意的协议攻击。
运行模式:C/S模式
运行端口/协议:123/udp
安装
直接使用 yum
安装:
yum install ntp ntpdate
配置
配置文件 /etc/ntp.conf
内容如下:
# For more information about this file, see the man pages
# ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5).
driftfile /var/lib/ntp/drift
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.
restrict default nomodify notrap nopeer noquery
# Permit all access over the loopback interface. This could
# be tightened as well, but to do so would effect some of
# the administrative functions.
restrict 127.0.0.1
#restrict 192.168.137.1 mask 255.255.255.0 nomodify #允许更新的IP地址段
restrict ::1
# Hosts on local network are less restricted.
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# perfer:表示优先级最高,如果不设置,从上到下,写的越靠上,优先级越高
# iburst:当一个运程NTP服务器不可用时,向它发送一系列的并发包进行检测
server cn.pool.ntp.org iburst perfer # 中国国家授时中心ntp服务器
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# local clock 如果上面的服务器都无法同步时间,就和本地系统时间同步。127.127.1.0在这里是一个IP地址,不是网段。
# 127.127.1.0 为第10层。ntp 和127.127.1.0同步完后,就变成了11层。 ntp是层次阶级的。同步上层服务器的stratum 大小不能超过或等于16。
# 在实际搭建中如果设置了local clock会出现即使ntp服务器本身时间不准确也不会和上层ntp服务器同步的问题,故注释。
# 具体原因待研究
#server 127.127.1.0
#fudge 127.127.1.0 stratum 8
#broadcast 192.168.1.255 autokey # broadcast server
#broadcastclient # broadcast client
#broadcast 224.0.1.1 autokey # multicast server
#multicastclient 224.0.1.1 # multicast client
#manycastserver 239.255.254.254 # manycast server
#manycastclient 239.255.254.254 autokey # manycast client
# Enable public key cryptography.
#crypto
includefile /etc/ntp/crypto/pw
# Key file containing the keys and key identifiers used when operating
# with symmetric key cryptography.
keys /etc/ntp/keys
# Specify the key identifiers which are trusted.
#trustedkey 4 8 42
# Specify the key identifier to use with the ntpdc utility.
#requestkey 8
# Specify the key identifier to use with the ntpq utility.
#controlkey 8
# Enable writing of statistics records.
#statistics clockstats cryptostats loopstats peerstats
# Disable the monitoring facility to prevent amplification attacks using ntpdc
# monlist command when default restrict does not include the noquery flag. See
# CVE-2013-5211 for more details.
# Note: Monitoring will not be disabled with the limited restriction flag.
disable monitor
启动
centos6
启动:service ntpd start
停止:service ntpd stop
设置开机启动:chkconfig ntpd on
查看启动状态:service ntpd status
查看日志: tailf /var/log/message
查看端口:netstat -ulnp | grep -w 123
centos7
启动:systemctl start ntpd
停止:systemctl stop ntpd
设置开机启动:systemctl enable ntpd
查看启动状态:systemctl status ntpd
查看日志: tailf /var/log/message
查看端口:netstat -ulnp | grep -w 123
注意: ntpd
有一个自我保护设置:如果本机与上源时间相差太大,ntpd
不运行。所以新设置的时间服务器一定要先ntpdate
从上源取得时间初值,然后再启动 ntpd
服务。
查看同步状态
使用命令 ntpq -p
查看同步状态,ntpstat
列出是否与上游服务器连接。
[root@centos751 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
ntp7.flashdance .INIT. 16 u - 64 0 0.000 0.000 0.000
*106.39.20.237 108.196.98.101 2 u 202 64 10 48.325 -4.794 0.997
ntp1.ams1.nl.le 130.133.1.10 2 u 82 64 2 440.047 -111.75 0.000
ntp2.flashdance 192.36.143.130 2 u 7 64 7 268.049 -2.210 45.428
static-5-103-13 .INIT. 16 u - 64 0 0.000 0.000 0.000
[root@centos751 ~]#
- remote:即remote - 本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先。
- refid:参考的上一层NTP主机的地址
- st:即stratum阶层
- poll:下次更新在几秒之后
- offset:时间补偿的结果
[root@centos751 ~]# ntpstat
synchronised to NTP server (106.39.20.237) at stratum 3 # 可以看到我们当前在3层
time correct to within 350 ms
polling server every 64 s
[root@centos751 ~]#
客户端同步时间
使用 ntpdate
同步
[root@centos752 ~]# ntpdate 192.168.223.101
22 Oct 17:19:08 ntpdate[29924]: adjust time server 192.168.223.101 offset -0.001306 sec
这种方法同步一次后如果时间久了,可能时间又会不准确,所以一般是使用 cron
任务定时同步
*/10 * * * * /usr/sbin/ntpdate 192.168.223.101 | logger -t NTP
拓展补充
1、linux系统时间和BIOS时间
有时候linux系统时间和BIOS时间是不一样的,如果不一样怎么解决呢?方法如下:
a、首先 hwclock -r
读出BIOS的时间参数,查看是否准确
b、如果不准确,使用 hwclock -w
将当前系统时间(已同步准确)写入BIOS中
2、不同机器之间的时间同步
为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步的工作是非常必要的。 同步时间,可以使用ntpdate命令,也可以使用ntp服务。主要的方法有以下3种。
a、使用 ntpdate
配合 cron
同步公网NTP服务器时间
*/10 * * * * /usr/sbin/ntpdate cn.pool.ntp.org | logger -t NTP
b、将主机搭建成 ntp
服务器同步上层NTP服务器时间
以上两种方法有弊端:必须主机可以连接公网,但是有的时候集群当中有部分主机是不能连接公网的,这时候就要用到第三种的方法
c、将内网中能连接公网的主机搭建成 ntp
服务器同步公网上层NTP服务器时间,然后内网中其他主机使用 ntpdate
定时同步此NTP服务器时间或者搭建成 ntp
服务器并将上层NTP服务器设置为次NTP服务器