《鸟哥的Linux私房菜 服务器架设篇(第三版)》 第15章 时间服务器:NTP服务器 笔记
2019-07-18 22:21 受匕图灵 阅读(656) 评论(0) 编辑 收藏 举报目录
时间介绍
NTP
NTP需要的软件
端口为123
时间误差不可超过 1000 秒
配置文件 /etc/ntp.conf
restrict 管理权限控制
server 设定上层 NTP 服务器
driftfile 记录时间差异
keys 客户端认证
实例
其他相关文件
/usr/share/zoneinfo/
/etc/sysconfig/clock
/etc/localtime
命令
ntpd
ntpstat
ntpq
date
hwclock
ntpdate
另一个时间服务器chronyd
/etc/chrony.conf
chronyc
时间介绍
格林威治时间为标准时间 (Greenwich Mean Time, GMT 时间)
在计算时间的时候,最准确的计算应该是使用『原子震荡周期』所计算的物理时钟了 (Atomic Clock, 也被称为原子钟),这也被定义为标准时间 (International AtomicTime)。而我们常常看见的UTC 也就是 Coordinated Universal Time (协和标准时间)就是利用这种 Atomic Clock 为基准所定义出来的正确时间。例如 1999 年在美国启用的原子钟 NIST F-1, 他所产生的时间误差每两千年才差一秒钟!
原子钟主要是利用计算芯片 (crystal) 的原子震荡周期去计时的,这是因为每种芯片都有自己的独特的震荡周期之故。
计算机内部所记录的时钟是记载于 BIOS (CMOS) 内的,但如果你的计算机上面的电池没电了,或者是某些特殊因素导致 BIOS 数据被清除, 此时计算机的时间就会不准。
『网络校时』(Network Time Protocol, NTP)
时间同步 (synchronize)
Digital Time Synchronization Protocol (DTSS)
Linux 操作系统当中其实有两个时间,分别是:
软件时钟: Linux 自己的系统时间,由 1970/01/01 开始记录的时间参数
硬件时钟: 计算机系统在 BIOS 记录的实际时间,这也是硬件所记录的
如果 Client 到 Server 的讯息传送时间过长怎么办?
为了这些延迟的问题,有一些 program 已经开发了自动计算时间传送过程的误差,以更准确的校准自己的时间!
NTP
NTP需要的软件
ntp:就是 NTP 服务器的主要软件啦,包括配置文件以及执行档等等。
tzdata:软件名称为『 Time Zone data 』的缩写,提供各时区对应的显示格式。
端口为123
时间误差不可超过 1000 秒
NTP 服务器之间的时间误差不可超过 1000 秒,否则 NTP 服务会自动关闭。启动ntp前先手动进行时间同步,然后再设定与启动时间服务器!
配置文件/etc/ntp.conf
/etc/ntp.conf,NTP 服务器的主要配置文件,也是唯一的一个;
restrict 管理权限控制
restrict [你的 IP] mask [netmask_IP] [parameter]
parameter 的参数主要有底下这些:
ignore: 拒绝所有类型的 NTP 联机;
nomodify: 客户端不能使用 ntpc 与 ntpq 这两支程序来修改服务器的时间参数, 但客户端仍可透过这部主机来进行网络校时的;
noquery: 客户端不能够使用 ntpq, ntpc 等指令来查询时间服务器,等于不提供 NTP 的网络校时啰;
notrap: 不提供 trap 这个远程事件登录 (remote event logging) 的功能。
notrust: 拒绝没有认证的客户端。那如果你没有在 parameter 的地方加上任何参数的话,这表示『该 IP 或网段不受任何限制』的意思喔!一般来说,我们可以先关闭 NTP 的权限,然后再一个一个的启用允许登入的网段。
server 设定上层 NTP 服务器
server [IP or hostname] [prefer]
在 server 后端可以接 IP 或主机名,鸟哥个人比较喜欢使用 IP 来设定说!至于那个perfer 表示『优先使用』的服务器
driftfile 记录时间差异
driftfile [可以被 ntpd 写入的目录与文件]
因为预设的 NTP Server 本身的时间计算是依据 BIOS 的芯片震荡周期频率来计算的,但是这个数值与上层 Time Server 不见得会一致啊!所以 NTP 这个 daemon (ntpd) 会自动的去计算我们自己主机的频率与上层 Time server 的频率,并且将两个频率的误差记录下来,记录下来的文件就是在 driftfile 后面接的完整档名当中了!关于档名你必须要知道:
driftfile 后面接的文件需要使用完整路径文件名;
该文件不能是连结档;
该文件需要设定成 ntpd 这个 daemon 可以写入的权限。
该文件所记录的数值单位为:百万分之一秒 (ppm)。
driftfile 后面接的文件会被 ntpd 自动更新,所以他的权限一定要能够让 ntpd写入才行。在 CentOS 6.x 预设的 NTP 服务器中,使用的 ntpd 的 owner 是 ntp ,这部份可以查阅 /etc/sysconfig/ntpd 就可以知道啦!
keys客户端认证
keys [key_file]
实例
[root@www ~]# vim /etc/ntp.conf
# 1. 先处理权限方面的问题,包括放行上层服务器以及开放区网用户来源:
restrict default kod nomodify notrap nopeer noquery <==拒绝 IPv4的用户
restrict -6 default kod nomodify notrap nopeer noquery <==拒绝 IPv6的用户
restrict 220.130.158.71 <==放行 tock.stdtime.gov.tw 进入本 NTP 服务器
restrict 59.124.196.83 <==放行 tick.stdtime.gov.tw 进入本 NTP 服务器
restrict 59.124.196.84 <==放行 time.stdtime.gov.tw 进入本 NTP 服务器
restrict 127.0.0.1 <==底下两个是默认值,放行本机来源
restrict -6 ::1
restrict 192.168.100.0 mask 255.255.255.0 nomodify <==放行区网来源
# 2. 设定主机来源,请先将原本的 [0|1|2].centos.pool.ntp.org 的设定批
注掉:
server 220.130.158.71 prefer <==以这部主机为最优先
server 59.124.196.83
server 59.124.196.84
# 3.预设时间差异分析文件与暂不用到的 keys 等,不需要更动它:
driftfile /var/lib/ntp/dr
其他相关文件
/usr/share/zoneinfo/
由 tzdata 所提供,为各时区的时间格式对应档。例如台湾地区的时区格式对应文件在 /usr/share/zoneinfo/Asia/Taipei 就是了!这个目录里面的文件与底下要谈的两个文件 (clock 与 localtime) 是有关系的喔!
/etc/sysconfig/clock
设定时区与是否使用 UTC 时间钟的配置文件。 每次开机后 Linux 会自动的读取这个文件来设定自己系统所默认要显示的时间说!举个例子来说, 在我们台湾地区的本地时间设定中,这个文件内应该会出现一行『ZONE="Asia/Taipei"』的字样, 这表示我们的时间配置文件案『要取用/usr/share/zoneinfo/Asia/Taipei 那个文件』的意思!
/etc/localtime
这个文件就是『本地端的时间配置文件』啦!刚刚那个clock 文件里面规定了使用的时间配置文件 (ZONE) 为/usr/share/zoneinfo/Asia/Taipei ,所以说这就是本地端的时间了,此时Linux 系统就会将 Taipei 那个文件复制一份成为 /etc/localtime ,所以未来我们的时间显示就会以 Taipei 那个时间配置文件案为准。
命令
ntpd
主要提供 NTP 服务的程序。
ntpd 启动:
[root@www ~]# /etc/init.d/ntpd start
ntpstat
show network time synchronisation status
[root@www ~]# ntpstat
synchronised to NTP server (220.130.158.71) at stratum 3
time correct to within 538 ms
polling server every 128 s
ntpq
standard NTP query program
[root@www ~]# ntpq -p
这个 ntpq -p 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,上头的几个字段的意义为:
remote:亦即是 NTP 主机的 IP 或主机名啰~注意最左边的符号
如果有『 * 』代表目前正在作用当中的上层 NTP
如果是『 + 』代表也有连上线,而且可作为下一个提供时间更新的候选者。
refid:参考的上一层 NTP 主机的地址
st:就是 stratum 阶层啰!
when:几秒钟前曾经做过时间同步化更新的动作;
poll:下一次更新在几秒钟之后;
reach:已经向上层 NTP 服务器要求更新的次数
delay:网络传输过程当中延迟的时间,单位为 10^(-6) 秒
offset:时间补偿的结果,单位与 10^(-3) 秒
jitter:Linux 系统时间与 BIOS 硬件时间的差异时间, 单位为 10^(-6)秒。
date
用于 Linux 时间 (软件时钟) 的修改与显示的指令。
查看当前时间
date
修改日期 时间
date -s "2019-05-5 15:00:00"
取得总秒数
date +%s
hwclock
用于 BIOS 时钟 (硬件时钟) 的修改与显示的指令。 这是一个 root 才能执行的指令,因为 Linux 系统上面 BIOS 时间与 Linux 系统时间是分开的,所以使用 date 这个指令调整了时间之后,还需要使用 hwclock才能将修改过后的时间写入 BIOS 当中!
#1、查看硬件时间
hwclock
hwclock --show #或者
hwclock -r #或者 #-r :亦即 read ,读出目前 BIOS 内的时间参数;
#2、设置硬件时间
hwclock --set --date "20140225 20:23:00"
#3、以系统时间为基准,修改硬件时间
hwclock --systohc <== sys(系统时间)to(写到)hc(Hard Clock)
hwclock -w #或者 #-w :亦即 write ,将目前的 Linux 系统时间写入 BIOS 当中啊!
#4、以硬件时间为基准,修改系统时间
hwclock --hctosys
hwclock -s #或者
ntpdate
用于客户端的时间校正,如果你没有要启用 NTP 而仅想要使用 NTP Client 功能的话,那么只会用到这个指令而已啦!
NTP 服务器本来就会与上层时间服务器进行时间的同步化, 所以在预设的情况下,NTP 服务器不可以使用 ntpdate !也就是说 ntpdate 与 ntpd 不能同时启用的,使用ntpdate前需要停止ntpd。
ntpdate [-dv] [NTP IP/hostname]
选项与参数:
-d :进入除错模式 (debug) ,可以显示出更多的有效信息。
-v :有较多讯息的显示。
[root@clientlinux ~]# ntpdate 192.168.100.254
28 Jul 17:19:33 ntpdate[3432]: step time server 192.168.100.254 offset -2428.396146 sec
另一个时间服务器chronyd
/etc/chrony.conf
[root@desktop ~]#vim /etc/chrony.conf
server server.group8.example.com iburst
chronyc
[root@desktop ~]# chronyc <‐‐‐‐ 手工让其马上同步时间
chrony version 2.1.1
Copyright (C) 1997‐2003, 2007, 2009‐2015 Richard P. Curnow and others chrony comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public License version 2 for details.
chronyc> waitsync <‐‐‐‐ 手工让其马上同步时间
try: 1, refid: 172.24.8.254, correction: 0.000001454, skew: 1000000.000 <‐‐‐‐ 看到类似的返回,说明已经成功同步了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架