Linux 时间同步相关整理

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. hwclock

  • hwclock 命令可以用来显示/设置硬件时钟命令。
  • Linux 中有 硬件时钟系统时钟 两种时钟。
    • 硬件时钟是指主机板上的时钟设备,也就是通常可在 BIOS 画面设定的时钟。
    • 系统时钟则是指 kernel 中的时钟。
    • 当 Linux 启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
    • 所有 Linux 相关指令与函数都是读取系统时钟的设定。
  • 命令格式:hwclock [参数]... [+格式]
参数 说明
-r, --show 读取并打印硬件时钟(read hardware clock and print result )
-s, --hctosys 将硬件时钟同步到系统时钟(set the system time from the hardware clock )
-w, --systohc 将系统时钟同步到硬件时钟(set the hardware clock to the current system time )
--adjust hwclock 每次更改硬件时钟时,都会记录在 /etc/adjtime 文件中。使用 --adjust 参数,可使 hwclock 根据先前的记录来估算硬件时钟的偏差,并用来校正目前的硬件时钟。
--debug 显示 hwclock 执行时详细的信息。
--directisa hwclock 预设从 /dev/rtc 设备来存取硬件时钟。若无法存取时,可用此参数直接以 I/O 指令来存取硬件时钟。
--set --date=<日期与时间> 设定硬件时钟。
--show 显示硬件时钟的时间与日期。
--test 仅测试程序,而不会实际更改硬件时钟。
--utc 若要使用格林威治时间,加入此参数 hwclock 会执行转换的工作。
--version 显示版本信息。
[root@localhost ~]# hwclock -r
Wed 24 Jul 2019 10:53:02 PM EDT  -0.053097 seconds
[root@localhost ~]# hwclock --version
hwclock from util-linux 2.23.2

2. ntpd

  • 安装 ntpd。
    • 若只有 ntpdate 而未见 ntp,则需删除原有 ntpdate。
yum –y install ntp

2.1 配置 NTP 服务端

  • NTP 服务器默认端口是 123。
  • 配置文件路径为 /etc/ntp.conf
server 127.127.1.0                            #以本机作为时间服务器
fudge 127.127.1.0 startnum 10                 #设置服务器层级
restrict 127.0.0.1                            # 允许本机使用这个时间服务器
restrict 192.168.102.0 netmask 255.255.255.0  #允许 192.168.102.0/24 网段的所有主机使用该时间服务器进行时间同步
driftfile /var/lib/ntp/                       #记录当前时间服务器,与上游服务器的时间差的文件
logfile /var/log/ntp/ntp.log                  #指定日志文件位置,需要手动创建

restrict [ 客户端IP ] mask [ IP掩码 ] [参数]

  • " 客户端 IP " 和 " IP 掩码 " 指定了对网络中哪些范围的计算机进行控制,如果使用 default 关键字,则表示对所有的计算机进行控制,参数指定了具体的限制内容。
常用参数 说明
ignore 拒绝连接到 NTP 服务器。
nomodiy 客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
noquery 不提供客户端的时间查询。
notrap 不提供 trap 远程登录功能,trap 服务是一种远程时间日志服务。
notrust 客户端除非通过认证,否则该客户端来源将被视为不信任子网 。
nopeer 提供时间服务,但不作为对等体。
kod 向不安全的访问者发送 Kiss-Of-Death 报文。

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

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

2.1.1 层次

  • stratum 根据上层 server 的层次而设定(+1)。
  • 对于提供 network time service provider 的主机来说,stratum 的设定要尽可能准确。
  • 而作为局域网的 time service provider,通常将 stratum 设置为 10。
fudge 127.127.1.0 startnum 10
  • 0 层的服务器采用的是原子钟、GPS 钟等物理设备,stratum 1 与 stratum 0 是直接相连的。
  • 往后的 stratum 与上一层 stratum 通过网络相连,同一层的 server 也可以交互。
  • ntpd 对下层 client 来说是 server,对于上层 server 来说它是 client。
  • ntpd 根据配置文件的参数决定是要为其他服务器提供时钟服务或者是从其他服务器同步时钟。所有的配置都在 /etc/ntp.conf 文件中。

2.1.2 启动服务

[root@localhost ~]# systemctl start ntpd
[root@localhost ~]# systemctl enable ntpd

2.1.3 查询状态

root@localhost ~]# ntpstat 
synchronised to local net at stratum 6 
   time correct to within 7948 ms
   polling server every 64 s
  • synchronised 表示时间同步完成(NTP 可以正常工作)。
  • unsynchronised:表示时间同步尚未完成。
  • 还可以通过 ntpq -p 命令查看状态。
[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.           5 l   38   64    7    0.000    0.000   0.000
状态参数 说明
remote 上游的时间服务器的 IP 或者主机名,如果是 * 表示本机。
refid .LOCL. 表示基于当前主机提供时间同步服务,如果是 IP 地址或者上游 remote 名称,表示基于一个上游服务器提供时间同步服务。
st 表示 remote 远程服务器的层级编号。
when 表示几秒之前做过一次时间同步。
poll 表示每隔多少秒做一次时间同步。
reach 表示向上游服务器成功请求时间同步的次数。
delay 从本地机发送同步要求到 NTP 服务器的时间延迟。
offset 主机通过 NTP 时钟同步与所同步时间源的时间偏移量,单位为毫秒(ms)。offset 越接近于 0,主机和 NTP 服务器的时间越接近。
jitter 这是一个用来做统计的值。它统计了在特定个连续的连接数里 offset 的分布情况。这个数值的绝对值越小,主机的时间越精确。

2.2 配置 NTP 客户端

  • 配置文件 /etc/ntp.conf 内容 。
server 192.168.102.45         #设置以 192.168.102.45 做为本机的时间服务器
restrict 127.0.0.1
logfile /var/log/ntp/ntp.log  #指定日志文件位置,需要手动创建
  • 其他操作与服务端一致。
[root@localhost ~]# ntpstat 
unsynchronised
  time server re-starting
   polling server every 8 s
[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 192.168.102.45  LOCAL(0)         6 u   31   64    1    0.558    0.082   0.000

2.3 同步硬件时钟

  • NTP 服务,默认只会同步系统时间。
  • 让 NTP 同时同步硬件时间,可以设置 /etc/sysconfig/ntpd 配置文件。
  • 在配置文件中,添加 SYNC_HWCLOCK=yes 可以让硬件时间与系统时间一起同步。
  • 当然允许 BIOS 与系统时间同步,也可以通过 hwclock -w 命令。

3. ntpdate

  • 使用网络计时协议(NTP)设置日期和时间。
  • 安装 ntpdate。
yum install ntpdate -y
  • ntpdate 命令用于设置本地日期和时间。它从指定的每个服务器获得了一些样本,并应用标准 NTP 时钟过滤器和选择算法来选择最好的样本。
  • ntpdate 命令使用以下方法进行时间调整。
    • 如果它确定时钟偏差超过 0.5 秒,它通过调用 settimeofday 子例程设置时钟时间。在引导时间,这是一个首选的方法。
    • 如果它确定时钟偏差小于 0.5 秒,它通过调用 adjtime 子例程和偏移量来调整时钟时间。
      • 此方法倾向于用牺牲一些稳定性来保持漂移时钟更加准确。
      • 当不是通过运行一个守护程序而是从 cron 命令有规则的运行 ntpdate 命令时,每一小时或两小时执行一次可以保证足够的走时精度,从而避免调整时钟。
  • 使用很多服务器可以大幅度改善 ntpdate 命令的可靠性与精度。
    • 尽管能使用单一服务器,但能通过提供至少三个或四个服务器以获得更好的性能。
  • 如果一个类似 xntpd 守护程序的 NTP 服务器守护程序正在同一主机上运行,命令将拒绝 ntpdate 设置日期。
  • 必须有 root 权限才能在主机上运行这个命令。
  • 命令格式:ntpdate [ -b] [ -d] [ -s] [ -u] [ -aKeyid] [ -eAuthenticationDelay] [ -kKeyFile] [ -oVersion] [ -pSamples] [ -tTimeOut] Server...
参数 说明
-a keyid 使用 Keyid 来认证全部数据包。
-b 通过调用 settimeofday 子例程来增加时钟的时间。
-d 指定调试方式。判断 ntpdate 命令会产生什么结果(不产生实际的结果)。这个标志使用无特权的端口。
-e authenticationDelay 指定延迟认证处理的时间秒数。
-k keyFile 当不使用缺省值 /etc/ntp.keys 文件时,为包含密钥的文件指定一个不同的名称。
-o version 当轮询它的发出数据包时,指定使用的 NTP 版本实现。Version 的值可以是 1,2,3。缺省值是 3。
-p samples 指定从每个服务器获取的样本的数目。 Samples 的值在 1 和 8 之间,并包括 1 和 8。它的缺省值是 4。
-s 指定日志操作 syslog 设施的使用,而不是使用标准输出。 当运行 ntpdate 命令和 cron 命令时很有用的。
-t timeOut 指定等待响应的时间。给定 TimeOut 的值四舍五入为 0.2 秒的倍数。缺省值是 1 秒。
-u 指定使用无特权的端口发送数据包。 当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。防火墙是一个系统或者计算机,它控制从外网对专用网的访问。
[root@localhost ~]# ntpdate -u 192.168.102.45
25 Jul 01:42:18 ntpdate[6896]: step time server 192.168.102.45 offset 63028802.594084 sec

3.1 ntpd 和 ntpdate 的区别

  • ntpd 不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时间,而且是平滑同步。
  • ntpdate 是立即同步,会产生时钟的跃变。

4. 国内外常用 NTP 服务器地址及 IP

地址或 IP 说明
210.72.145.44 国家授时中心服务器 IP 地址
133.100.11.8 日本福冈大学
time-a.nist.gov 或 129.6.15.28 NIST, Gaithersburg, Maryland
time-b.nist.gov 或 129.6.15.29 NIST, Gaithersburg, Maryland
time-a.timefreq.bldrdoc.gov 或 132.163.4.101 NIST, Boulder, Colorado
time-b.timefreq.bldrdoc.gov 或 132.163.4.102 NIST, Boulder, Colorado
time-c.timefreq.bldrdoc.gov 或 132.163.4.103 NIST, Boulder, Colorado
utcnist.colorado.edu 或 128.138.140.44 University of Colorado, Boulder
time.nist.gov 或 192.43.244.18 NCAR, Boulder, Colorado
time-nw.nist.gov 或 131.107.1.10 Microsoft, Redmond, Washington
nist1.symmetricom.com 或 69.25.96.13 Symmetricom, San Jose, California
nist1-dc.glassey.com 或 216.200.93.8 Abovenet, Virginia
nist1-ny.glassey.com 或 208.184.49.9 Abovenet, New York City
nist1-sj.glassey.com 或 207.126.98.204 Abovenet, San Jose, California
nist1.aol-ca.truetime.com 或 207.200.81.113 TrueTime, AOL facility, Sunnyvale, California
nist1.aol-va.truetime.com 或 64.236.96.53 TrueTime, AOL facility, Virginia
ntp.sjtu.edu.cn 或 202.120.2.101 上海交通大学网络中心 NTP 服务器地址
s1a.time.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学
s1c.time.edu.cn 北京大学
s1d.time.edu.cn 东南大学
s1e.time.edu.cn 清华大学
s2a.time.edu.cn 清华大学
s2b.time.edu.cn 清华大学
s2c.time.edu.cn 北京邮电大学
s2d.time.edu.cn 西南地区网络中心
s2e.time.edu.cn 西北地区网络中心
s2f.time.edu.cn 东北地区网络中心
s2g.time.edu.cn 华东南地区网络中心
s2h.time.edu.cn 四川大学网络管理中心
s2j.time.edu.cn 大连理工大学网络中心
s2k.time.edu.cn CERNET 桂林主节点
s2m.time.edu.cn 北京大学

你可能感兴趣的:(Linux 时间同步相关整理)