在 Linux 系统里设定 NTP 服务并不难,但是 NTP 本身确是一个很复杂的协议. 你都了解细节么?
1. 时间和时区
date 命令可显示时间与市区
[root@T_PV1_DB ~]# date
Tue Feb 7 16:32:16 CST 2017
[root@T_PV1_DB ~]# cat /etc/sysconfig/clock
ZONE=”Asia/Shanghai”
CST=true
在地球环绕太阳旋转的 24 个小时中, 世界各地日出日落的时间是不一样的. 所以我们才有划分时区 (timezone) 的必要, 也就是把全球划分成 24 个不同的时区. 所以我们可以把时间的定义理解为一个时间的值加上所在地的时区 (注意这个所在地可以精确到城市)
格林威治时间 (GMT), 它也就是 0 时区时间. 但是我们在计算机中经常看到的是 UTC. 它是 Coordinated Universal Time 的简写. 虽然可以认为 UTC 和 GMT 的值相等 (误差相当之小), 但是 UTC 已经被认定为是国际标准, 所以我们都应该遵守标准只使用 UTC
那么假如现在中国当地的时间是晚上 8 点的话, 我们可以有下面两种表示方式
20:00 CST
12:00 UTC
这里的 CST 是 Chinese Standard Time, 也就是我们通常所说的北京时间了. 因为中国处在 UTC+8 时区
如果时区设定错了,你看到的日志时间也不正确了。
补充:
CST 同时可以代表如下 4 个不同的时区:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
可见,CST 可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。
2 、 ntp 的配置
#cat /etc/ntp.conf
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 11.107.13.100 //允许该 NTP 站群服务器进入
restrict 11.80.81.1 //没有任何何引数的话,这表示『该 IP 或网段不受任何限制』
restrict 202.112.1.199
restrict 127.0.0.1
restrict -6 ::1
restrict 192.168.0.0 mask 255.255.0.0 nomodify //该网段可以进行校时
restrict 0.0.0.0 mask 0.0.0.0 notrust //拒绝没有认证的使用者端
server time-nw.nist.gov prefer //prefer 该站群服务器优先
server 0.rhel.pool.ntp.org iburst //设定时间站群服务器
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
fudge 127.127.1.0 stratum 6
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
broadcastdelay 0.008
上边只是简单设定,没有考虑安全方面如认证等等。
许可权管理使用 restrict 公式如下:
restrict IP mask [引数] / restrict 192.168.0.0 mask 255.255.0.0 nomodify
其中引数主要有底下这些:
* ignore:拒绝所有型别的 NTP 的连线;
* nomodfiy:使用者端不能使用 NTPC 与 ntpq 这两支程式来修改站群服务器的时间引数,但使用者端仍可透过这部 WordPress 主机来进行互联网校时的;
* noquery:使用者端不能够使用 ntpq,NTPC 等指令来查询发表站群服务器,等于不提供的 NTP 的互联网校时幂;
* notrap:不提供陷阱这个远端事件邮箱(远端事件日志)的功能。
* notrust:拒绝没有认证的使用者端。
配置档案中的 driftfile 是什么?
我们每一个 system clock 的频率都有小小的误差, 这个就是为什么机器执行一段时间后会不精确. NTP 会自动来监测我们时钟的误差值并予以调整. 但问题是这是一个冗长的过程, 所以它会把记录下来的误差先写入 driftfile. 这样即使你重新开机以后之前的计算结果也就不会丢失了。
最后,别忘了启动 NTP 站群服务器
/etc/init.d/ntp start
[root@localhost ~]# chkconfig ntpd on #在执行级别 2 、 3 、 4 、 5 上设定为自动执行
[root@localhost ~]# chkconfig –list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
检视 ntp 站群服务器有无和上层 ntp 连通
[root@localhost ~]# ntpstat
synchronised to NTP server (192.168.7.49) at stratum 6
time correct to within 440 ms
polling server every 128 s
[root@localhost ~]#
检视 ntp 站群服务器与上层 ntp 的状态
[root@localhost ~]# watch ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.7.49 192.168.7.50 5 u 13 64 3 5.853 1137178 2.696
3 、 ntpd 的配置
配置/etc/sysconfig/ntpd 档案
ntp 服务,预设只会同步系统时间。如果想要让 ntp 同时同步硬体时间,可以设定/etc/sysconfig/ntpd 档案,在/etc/sysconfig/ntpd 档案中,新增 SYNC_HWCLOCK=yes 这样,就可以让硬体时间与系统时间一起同步。
#允许 BIOS 与系统时间同步,也可以通过 hwclock -w 命令
SYNC_HWCLOCK=yes
# Drop root to id ‘ntp:ntp’ by default.
OPTIONS=”-x -u ntp:ntp -p /var/run/ntpd.pid -g”
有时会在 messages 日志里看到 NTP 程序正在做 DELETING 动作,不过 NTP 程序并不会真正删除虚拟互联网介面,但这个动作会造成互联网短暂不通。红帽官方有个对应的解决办法是:
就是在这个档案里增加-L 引数。
还有-x 和-g 引数:
ntpd 服务的方式,又有两种策略,一种是平滑、缓慢的渐进式调整(adjusts the clock in small steps 所谓的微调);一种是步进式调整(跳跃式调整)。两种策略的区别就在于,微调方式在启动 NTP 服务时加了个 “-x” 的引数,而预设的是不加 “-x” 引数。
假如使用了-x 选项,那么 ntpd 只做微调,不跳跃调整时间,但是要注意,-x 引数的负作用:当时钟差大的时候,同步时间将花费很长的时间。-x 也有一个阈值,就是 600s,当系统时钟与标准时间差距大于 600s 时,ntpd 会使用较大 “步进值” 的方式来调整时间,将时钟 “步进” 调整到正确时间。
假如不使用-x 选项,那么 ntpd 在时钟差距小于 128ms 时,使用微调方式调整时间,当时差大于 128ms 时,使用 “跳跃” 式调整。
这两种方式都会在本地时钟与远端的 NTP 站群服务器时钟相差大于 1000s 时,ntpd 会停止工作。在启动 NTP 时加了引数 “-g” 就可以忽略 1000S 的问题。
4 、时间同步
利用 crontab 可以让 LINUX NTP 定时更新时间
注:让 linux 执行 ntpdate 更新时间时,linux 不能开启 NTP 服务,否则会提示埠被占用:如下
[root@ESXI ~]# ntpdate 1.rhel.pool.ntp.org
20 May 09:34:14 ntpdate[6747]: the NTP socket is in use, exiting
如果想定时进行时间校准,可以使用 crond 服务来定时执行。
编辑 /etc/crontab 档案
加入下面一行:
30 8 * * * root /usr/sbin/ntpdate 192.168.0.1; /sbin/hwclock -w #192.168.0.1 是 NTP 站群服务器的 IP 地址
然后重启 crond 服务
service crond restart
这样,每天 8:30 Linux 系统就会自动的进行互联网时间校准。
如果是 WINDOWS ,则需要开启 windows time 服务和 RPC 的二个服务
如果在开启 windows time 服务,时报 错误 1058,进行下面操作
1. 执行 cmd 进入命令列,然后键入
w32tm /register 进行注册
正确的响应为:W32Time 成功注册。
2. 如果上一步正确,用 net start “windows time” 或 net start w32time 启动服务。
5 、 Linux 的硬体时间
Linux 硬体时间的设定
硬体时间的设定,可以用 hwclock 或者 clock 命令。其中,clock 和 hwclock 用法相近,只用一个就 行,只不过 clock 命令除了支援 x86 硬体体系外,还支援 Alpha 硬体体系。
//检视硬体时间 可以是用 hwclock ,hwclock –show 或者 hwclock -r
[root@localhost ~]# hwclock –show
2008 年 12 月 12 日 星期五 06 时 52 分 07 秒 -0.376932 seconds
//设定硬体时间
[root@localhost ~]# hwclock –set –date=”1/25/09 00:00″ <== 月/日/年时: 分: 秒
[root@localhost ~]# hwclock
2009年01月25日 星期日 00时00分06秒 -0.870868 seconds
几个引数和命令:
ntpq -p显示结果中的offset
本地时间+offset=远端时间, 因此如果offset为负数, 则本地时钟比远端快. offset值0-500,接近0是正常的。
执行ntpq -c asso, 如果显示sys.peer则已经处于同步状态了.
使用以下命令检查ntp的版本: # ntpq -c version
错误问题处理
用于收集安装,配置和应用中出现的问题
错误1:ntpdate -u ip -> no server suitable for synchronization found
判断:在 ntp 客户端用 ntpdate –d serverIP 检视,发现有 “Server dropped: strata too high” 的错误,并且显示 “stratum 16” 。而正常情况下 stratum 这个值得范围是 “0~15” 。
原因:NTP server 还没有和其自身或者它的 server 同步上。在 ntp server 上重新启动 ntp 服务后,ntp server 自身或者与其 server 的同步的需要一个时间段,这个过程可能是 5 分钟,在这个时间之内在客户端执行 ntpdate 命令时会产生 no server suitable for synchronization found 的错误。
处理:等待几分钟后,重试一般解决。
其它造成无法成功更新的原因:
1 、客户端的日期必须要设定正确,不能超出正常时间 24 小时,不然会因为安全原因被拒绝更新。其次客户端的时区必须要设定好,以确保不会更新成其它时区的时间。
2 、 fudge 127.127.1.0 stratum 10 如果是 LINUX 做为 NTP 站群服务器,stratum(层级) 的值不能太大,如果要向上级 NTP 更新可以设成 2
3 、 LINUX 的 NTP 站群服务器必须记得将从上级 NTP 更新的时间从系统时间写到硬体里去 hwclock –systohc
NTP 一般只会同步 system clock. 但是如果我们也要同步 RTC(hwclock) 的话那么只需要把下面的选项开启就可以了
程式码:
# vi /etc/sysconfig/ntpd
SYNC_HWCLOCK=yes
4 、 Linux 如果开启了 NTP 服务,则不能手动执行 ntpdate 更新时间(会报埠被占用),它只能根据/etc/ntp.conf 里 server 栏位后的站群服务器地址按一定时间间隔自动向上级 NTP 站群服务器更新时间。可以执行命令 ntpstat 检视每次更新间隔如:
[root@ESXI ~]# ntpstat
synchronised to NTP server (210.72.145.44) at stratum 2 #本 NTP 站群服务器层次为 2,已向 210.72.145.44 NTP 同步过
time correct to within 93 ms #时间校正到相差 93ms 之内
polling server every 1024 s #每 1024 秒会向上级 NTP 轮询更新一次时间
补充:
ntpd 、 ntpdate 的区别
下面是网上关于 ntpd 与 ntpdate 区别的相关资料。如下所示所示:
使用之前得弄清楚一个问题,ntpd 与 ntpdate 在更新时间时有什么区别。 ntpd 不仅仅是时间同步站群服务器,它还可以做客户端与标准时间站群服务器进行同步时间,而且是平滑同步,并非 ntpdate 立即同步,在生产环境中慎用 ntpdate,也正如此两者不可同时执行。
时钟的跃变,对于某些程式会导致很严重的问题。许多应用程式依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线性的,一些操作,例如资料库事务,通常会地依赖这样的事实:时间不会往回跳跃。不幸的是,ntpdate 调整时间的方式就是我们所说的” 跃变 “:在获得一个时间之后,ntpdate 使用 settimeofday(2) 设定系统时间,这有几个非常明显的问题:
第一,这样做不安全。 ntpdate 的设定依赖于 ntp 站群服务器的安全性,攻击者可以利用一些站群软件设计上的缺陷,拿下 ntp 站群服务器并令与其同步的站群服务器执行某些消耗性的任务。由于 ntpdate 采用的方式是跳变,跟随它的站群服务器无法知道是否发生了异常(时间不一样的时候,唯一的办法是以站群服务器为准)。
第二,这样做不精确。一旦 ntp 站群服务器宕机,跟随它的站群服务器也就会无法同步时间。与此不同,ntpd 不仅能够校准计算机的时间,而且能够校准计算机的时钟。
第三,这样做不够优雅。由于是跳变,而不是使时间变快或变慢,依赖时序的程式会出错(例如,如果 ntpdate 发现你的时间快了,则可能会经历两个相同的时刻,对某些应用而言,这是致命的)。因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服务的那个时候。其余的时候,理想的做法是使用 ntpd 来校准时钟,而不是调整计算机时钟上的时间。
NTPD 在和时间站群服务器的同步过程中,会把 BIOS 计时器的振荡频率偏差——或者说 Local Clock 的自然漂移 (drift)——记录下来。这样即使互联网有问题,本机仍然能维持一个相当精确的走时。
ntpq –p 引数详解
ntpq -p
remote refid st t when poll reach delay offset jitter
==================================================================
*10.247.160.31 10.240.241.5 4 u 53 64 377 0.240 0.374 0.240
remote:响应这个请求的 NTP 站群服务器的名称。
refid:NTP 站群服务器使用的上一级 ntp 站群服务器。
st :remote 远端站群服务器的级别. 由于 NTP 是层型结构, 有顶端的站群服务器, 多层的 Relay Server 再到客户端. 所以站群服务器从高到低阶别可以设定为 1-16. 为了减缓负荷和互联网堵塞, 原则上应该避免直接连线到级别为 1 的站群服务器的.
when: 上一次成功请求之后到现在的秒数。
poll : 本地机和远端站群服务器多少时间进行一次同步 (单位为秒). 在一开始执行 NTP 的时候这个 poll 值会比较小, 那样和站群服务器同步的频率也就增加了, 可以尽快调整到正确的时间范围,之后 poll 值会逐渐增大, 同步的频率也就会相应减小
reach: 这是一个八进位制值, 用来测试能否和站群服务器连线. 每成功连线一次它的值就会增加
delay: 从本地机传送同步要求到 ntp 站群服务器的 round trip time
offset:WordPress 主机通过 NTP 时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。 offset 越接近于 0,WordPress 主机和 ntp 站群服务器的时间越接近
jitter: 这是一个用来做统计的值. 它统计了在特定个连续的连线数里 offset 的分布情况. 简单地说这个数值的绝对值越小,WordPress 主机的时间就越精确
本文永久更新连结地址:http://www.linuxidc.com/Linux/2017-03/141435.htm