一、NTP

1、什么是NTP

NTP是用来使计算机时间同步化的一种协议,全称是Network Time Protocol。它可以在大规模的设备范围内同步矫正时间到几ms级别的精度,在网络稳定的局域网内,精度甚至可以达到微秒级别。

2、 计算机内的时间管理

2.1格林威治时间

在引入标准时间之前,文明世界的每个城市根据太阳的地方位置(见太阳时间)设置其官方时钟。 这种状况直到在英国引入铁路旅行后才发生改变,因为铁路的出现使得有可能在很长的距离上旅行足够快,要求连续重新设置时钟,因为火车在日常运行中就会通过几个城镇。为了解决这个问题,建立了格林威治平均时间(Greenwich Mean Time),做法是将英国的所有时钟设置为相同的时间, 同时使用计时器或电报来同步这些时钟。

2.2协调世界时

1884年10月13日,在美国华盛顿召开的国际经度会议上决定,以经过英国格林尼治皇家天文台的经线为本初子午线(O°经线),作为计算地理经度的起点,也是世界标准“时区”的起点,格林尼治时间(格林尼治的地方时,GMT)正式被采用为国际标准时间(又称协调世界时,UTC)。

2.3Unix 时间戳

Unix 时间戳是一种时间表示方式,定义为从格林尼治时间 1970年01月01日 00时00分00秒 起至现在的总秒数。各种编程语言的时间戳应该指的就是这个,由此编写的各类程序涉及到的时间都以这个Unix时间戳为基准。

2.4时区

地球的自转方向为由西向东,而不是由东向西,这就导致东边的地方天亮的早,西边的地方天亮的晚,这就是所谓的“时间差”。随着近代工业革命的发展,世界各国之间的贸易逐渐繁盛起来,时间差的问题也随之浮现,特别是近代人民对时间的精确度,达到了分秒的级别,不像古人可能在交易时,会将时间设定在几月几号,一整天都是交易时间。
时间计量的混乱引起了全球各国的注意,于是在1884年,国际子午线会议在华盛顿召开,大会经过一番商量,最终决定把地球分为24个时区,东西各12个。以东西经180度为界,以英国格林尼治天文台为轴心,向东(西)每隔15度就设定一个时区,彼此相邻的两个时区,它们之间的时间差为1小时。
即相同的格林威治时间,由西向东每隔一个时区,时间减少一个小时。

2.5计算机时区

计算机系统存储的都是世界时,但由于时区的存在,需要将时间由时间戳转换各时区的时间显示。
例如:中国时间和国外的时间的时间戳都一样,但时区不同,导致时间也会不同。
计算当地时间:当地时间=UTC+时区偏移。
拿中国举例:中国位于东八区,时区偏移为(+8:00)
中国时间=UTC+8:00。

date +"%Z%z" #显示时区

设置时区为东8区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2.6硬件时间

链接: 计算机时间到底是怎么来的?程序员必看的时间知识!

3.ntp服务配置

3.1 服务器NTP配置

安装ntp服务

yum install ntp -y

修改配置

vim /etc/ntp.conf

修改内容

driftfile /var/lib/ntp/drift #系统时间与BIOS事件的偏差记录
restrict default nomodify notrap nopeer noquery#不限制,所有主机都可连接这个服务器同步时间。
restrict 127.0.0.1
restrict ::1
server  服务器1ip或域名 prefer#
#server  服务器2ip或域名 iburst#
server    127.127.1.0
fudge     127.127.1.0 stratum 15 #这两行设置连不到上级服务器时,和本机硬件保持同步。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor

权限的设定主要以restrict这个参数来设定,语法为:

restrict  IP地址  mask 子网掩码 参数

说明:
IP可以是IP地址也可以是default,default是指所有的IP,默认是default,为了安全可将default替换
为网段。
参数主要有以下几个:
ignore :关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust:客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery:不提供客户端的时间查询

上级时间服务器配置

server host  [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]

说明:
其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:
key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。
version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。
prefer: 如果有多个server选项,具有该参数的服务器优先使用。
mode: 指定数据报文mode字段的值。
minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。
maxpoll: 指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。
iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。

启动并设置开机启动

systemctl enable ntpd
systemctl start ntpd
systemctl is-enabled ntpd        #查看是否在开机启动项
systemctl list-unit-files | grep ntp     #查看是否在开机启动项
systemctl status ntpd                     #查看ntpd服务的状态

扩展:

systemctl enable ntpd --now # 设置开机启动并启动服务

查看和上级服务器的同步状态

ntpq -p

结果解释见:链接: link
查看时间同步服务状态

ntpstat 

3.2 客户端NTP配置

3.2.1 ntp同步

安装ntp服务

yum install ntp -y

修改配置

vim /etc/ntp.conf

修改内容

driftfile /var/lib/ntp/drift #系统时间与BIOS事件的偏差记录
restrict default nomodify notrap nopeer noquery#不限制,所有主机都可连接这个服务器同步时间。
restrict 127.0.0.1
restrict ::1
server  时间服务器ip prefer
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
3.2.2 ntpdate同步

每天12点整使用ntpdate同步时间。

echo '0 12 * * *  /usr/sbin/ntpdate 时间服务器ip' >> /var/spool/cron/root
3.2.3 异同

ntpdate会导致时间跳变。
ntpd服务是逐渐调整客户端时间和时间服务器保持一致。
在ntpd启动的情况下不能使用ntpdate,如要使用加-u参数:ntpdate -u ip。

3.2.4 其他优化
设置ntpd服务慢同步。

据说某些版本当时间差过大时,ntpd也会跳变。加入此参数可保证一定是慢同步

vim /etc/sysconfig/ntpd

检查OPTIONS参数中是否有-x参数,如果没有需加入。

重启服务器后ntpd没开机启动

要把chronyd.service 禁用

systemctl disable chronyd
或
systemctl disable chronyd.service 

然后ntp设置开机自启生效

systemctl enable ntp

链接: Linux ntp时间服务器的搭建和配置

4.chrony服务配置

Chrony是网络时间协议(NTP)的另一种实现,与网络时间协议后台程序(ntpd)不同,它可以更快地且更准确地同步系统时钟。
chrony包含两个主要程序:chronyd和chronyc

chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步,确定计算机增减时间的比率,并对此进行补偿。
chronyc:命令行用户工具,用于监控性能并进行多样化的配置。

4.1 关闭、卸载ntp

 systemctl stop ntpd
 systemctl disable ntpd
 rpm -e ntp

4.2 安装chrony

 yum -y install chrony

4.3配置

 vim  /etc/chrony.conf
4.3.1 server端关键配置内容如下
server ntp.aliyun.com iburst #外部时钟源
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 0.0.0.0/0 #表示允许所有ip访问该chronyd服务,如果需要改节点做为ntp server,则必须配置allow选项
local stratum 5 #Server不可达时,将本地时钟作为时钟源
logdir /var/log/chrony
log measurements statistics tracking
initstepslew 20 ntp.aliyun.com
4.3.2 client端关键配置内容如下
server 192.168.1.2 iburst #server端ip
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
log measurements statistics tracking

4.4 启动服务并设置开机启动

systemctl start chronyd
systemctl enable chronyd
systemctl is-enabled chronyd

4.5 查看和上级服务区同步状态

chronyc sources -v
列名含义具体说明
M表示授时时钟源^表示服务器,= 表示二级时钟源 ,#表示本地连接的参考时钟,? 表示时间不同步,*表示时间已经同步
S指示源的状态*当前同步的源,+表示其他可接受的源,?表示连接丢失的源,x表示一个认为是falseticker 的时钟(即它的时间与大多数其他来源不一致),~表示其时间似乎具有太多可变性的来源
Name/IP address表示源的名称或IP地址,或者参考时钟的refid值
Stratum表示源的层级层级1表示本地连接的参考时钟,第2层表示通过第1层级计算机的时钟实现同步,依此类推。
Poll表示源轮询的频率以秒为单位,值是基数2的对数,例如值6表示每64秒进行一次测量,chronyd会根据当时的情况自动改变轮询频率
Reach表示源的可达性的锁存值(八进制数值)该锁存值有8位,并在当接收或丢失一次时进行一次更新,值377表示最后八次传输都收到了有效的回复
LastRx表示从源收到最近的一次的时间通常是几秒钟,字母m,h,d或y分别表示分钟,小时,天或年,值10年表示从未从该来源收到时间同步信息
Last sample表示本地时钟与上次测量时源的偏移量方括号中的数字表示实际测量的偏移值,这可以以ns(表示纳秒),us(表示微秒),ms(表示毫秒)或s(表示秒)为后缀;方括号左侧的数字表示原始测量值,这个值是经过调整以允许应用于本地时钟的任何偏差;方括号右侧表示偏差值,+/-指示器后面的数字表示测量中的误
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐