风险告知
- 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!
- 相关配置操作是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。
- 生产环境全新安装后(业务上线前)或者自行测试都可放心参考该图解内容,该教程是完全站在生产业务角度去做的建议配置(业务厂商有特殊要求的除外)。
- 图解内容可能存在一些自动执行的shell脚本,所以,一定要全面评估并且备份有价值数据后再进行。因为任何操作都是有丢失数据风险的可能,比如说误操作覆盖或移动有价值数据进而影响到生产业务都无异于删库,无论是你是否即将跑路!
- 删除跑路的方式千万条,不仅仅有你最熟悉的rm rf /*,有时候一个空格都能要了你的小(老)命,小心是的万年船,最好的归宿是阖家欢乐,是团团圆圆,是你好我好大家好,是博主真好!
废话翩翩
解释下为什么要码这么多文字说明,包括后续的内容中也是如此,注释说明真的多。因为我觉得我们在学习过程过应该有点儿逼数,那就是学习一定不仅仅为了学会某一条命令,某一个技巧......更重要的是尽可能的理解这件事儿的来龙去脉、因果关系,最好能形成自己的思路。图解内容完全手打,所以难免有所纰漏,欢迎评论区指正,同时内容处于一个不断(随时)更新的状态,以最新的内容为准!
开拓视野
时间同步服务器更准确来讲就应该叫时间戳服务器,因为所有的时间戳服务器都是以1970年1月1日00:00:00协调世界时(UTC)为基础定义的时间,时间戳服务器一般是从地球同步卫星上获取一个精确时间,像我们国家就有一个官方的授时中心(中国科学院国家授时中心),位于陕西省西安市临潼区。我们从时间戳服务器上获取的并不是一个某某年几时几分几秒的时间,而是一个相对于基础定义时间之间的一个差值,称为时间戳,然后我们在根据本地操作系统所处的时区配合时间戳做本地时间调整。相关的时间同步协议有NTP、SNTP、PTP等,相关的时间同步应用有ntp、Chrony、Windows 时间服务 (W32Time)等等。
食用范围
目前测试结果来讲适用于几乎所有GNU/Linux发行版。
避坑指南
0、所有配置都是在操作系统安装时时区配置正确的情况下进行的,如果时区不正确的情况,请查阅相关资料进行修改。
1、服务端默认使用UDP端口123,在有防火墙等安全设备时,需要放通,可以暂时先关闭防火墙进行测试,但是不建议永久关闭防火墙。
2、服务端默认不允许任何客户端接入该服务,需要修改使用参数allow all或者更细粒度控制
3、服务端如果局域网内,或者某个独立集群内只需要保持内部时间一致,对精确度要求不高的情况下,可以自定搭建纯纯的本地时间戳服务器,妥妥以以本地时间为准,这时候需要使用参数local stratum 10,参数中的10代表层级,是可以修改的,不过习惯上一般保持默认。
4、客户端不需要特殊配置,只需要配置上游时间戳服务器地址即可。
5、服务端和客户端安装完成后,默认是开机自动启动,但是当前是停止状态,不重启情况下需要手动开启服务,配置文件有任何修改的情况下都需要重启服务生效。
言归正传
chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器、参考时钟(如GPS接收器)以及使用手表和键盘的手动输入同步。它还可以作为NTPv4(RFC 5905)服务器和对等端操作,为网络中的其他计算机提供时间服务。 它设计用于在各种条件下运行良好,包括间歇性网络连接、严重拥塞的网络、不断变化的温度(普通计算机时钟对温度敏感)以及无法连续运行或在虚拟机上运行的系统。 通过互联网同步的两台机器之间的典型精度在几毫秒内;在局域网上,精度通常以几十微秒为单位。利用硬件时间戳或硬件参考时钟,亚微秒精度是可能的。 chrony中包含两个程序,chronyd是一个可以在启动时启动的守护进程,chronyc是一个命令行界面程序,可以用来监视chronyd的性能,并在其运行时更改各种操作参数。
# 使用yum install chrony命令安装chrony软件包
[root@centos85 ~]# yum install chrony
local 3.8 MB/s | 3.9 kB 00:00
依赖关系解决。
================================================================================================================================================================================================================
软件包 架构 版本 仓库 大小
================================================================================================================================================================================================================
安装:
chrony x86_64 4.1-1.el8 local 327 k
安装弱的依赖:
timedatex x86_64 0.5-3.el8 local 32 k
事务概要
================================================================================================================================================================================================================
安装 2 软件包
总计:359 k
安装大小:710 k
确定吗?[y/N]: y
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : timedatex-0.5-3.el8.x86_64 1/2
运行脚本: timedatex-0.5-3.el8.x86_64 1/2
运行脚本: chrony-4.1-1.el8.x86_64 2/2
安装 : chrony-4.1-1.el8.x86_64 2/2
运行脚本: chrony-4.1-1.el8.x86_64 2/2
验证 : chrony-4.1-1.el8.x86_64 1/2
验证 : timedatex-0.5-3.el8.x86_64 2/2
已安装:
chrony-4.1-1.el8.x86_64 timedatex-0.5-3.el8.x86_64
完毕!
# chronyd服务安装完成后默认开机自动启动,但是默认处于停止状态,不重启服务器的情况下需要手动启动chronyd服务
# 查看chronyd服务状态
[root@centos85 ~]# systemctl status chronyd.service
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)
# 启动chronyd服务
[root@centos85 ~]# systemctl start chronyd.service
# 设置chronyd服务开机自动启动(通过前面查看服务状态可以看出,默认就时开机自动启动)
[root@centos85 ~]# systemctl enable chronyd.service
# chronyd作为服务器的配置清单(编辑/etc/chrony.conf配置文件,仅修改我中文标注的位置),保存配置文件后记得重启chronyd服务
[root@centos85 ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 如下所示,注释掉默认的ntp服务池地址
# pool 2.centos.pool.ntp.org iburst
# 时间同步上游服务器分3种情况,任选且只选任一种即可,切记不可贪多
# 情况1:使用上游服务器时间,且上游服务器时间为ntp服务器池(能接入外网的情况优选)
pool cn.pool.ntp.org iburst
# 情况2:使用上游服务器时间,且上游服务器时间为ntp服务器池(能接入外网的情况优选)
server ntp.aliyun.com iburst
# 情况3:不使用上游服务器时间,以服务器本地时间为准(内网自建NTP服务器优选)
server 127.0.0.1 iburst
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
# 默认不允许所有客户端同步,可以使用allow all允许所有,也可以使用模板中的例子加以限定
#allow 192.168.0.0/16
allow all
# Serve time even if not synchronized to a time source.
#如果服务器角色类似上述情况3的场景,则需要取消下面一行参数的注释,即local stratum 10,表示以服务器本身时间为准
#local stratum 10
local stratum 10
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
# 重启服务以确保新配置生效
[root@centos85 ~]# systemctl restart chronyd.service
# 查看NTP服务器时间同步的整体情况
[root@centos85 ~]# chronyc -n sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 193.182.111.14 2 6 17 14 -8201us[ -20ms] +/- 142ms
^- 78.46.102.180 2 6 161 8 +26ms[ +26ms] +/- 94ms
^? 84.16.67.12 1 6 30 15 +25ms[ +14ms] +/- 105ms
^* 193.182.111.143 2 6 17 14 +12ms[ +54us] +/- 148ms
# 查看NTP服务器时间戳的具体信息
[root@centos85 ~]# chronyc tracking
Reference ID : C1B66F8F (ntp8.flashdance.cx)
Stratum : 3
Ref time (UTC) : Thu Jan 25 10:06:35 2024
System time : 0.005802411 seconds fast of NTP time
Last offset : +0.001469315 seconds
RMS offset : 0.001469315 seconds
Frequency : 1.523 ppm slow
Residual freq : +23.727 ppm
Skew : 1.793 ppm
Root delay : 0.288379759 seconds
Root dispersion : 0.008044729 seconds
Update interval : 128.5 seconds
Leap status : Normal
# 首次使用chronyc makestep向上游服务器同步时间
[root@centos85 ~]# chronyc makestep
200 OK
[root@centos85 ~]#
# chronyd作为客户端的配置清单(编辑/etc/chrony.conf配置文件,仅修改我中文标注的位置),保存配置文件后记得重启chronyd服务
[root@centos85 ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
# 如下所示,注释掉默认的ntp服务池地址
# pool 2.centos.pool.ntp.org iburst
# 时间同步上游服务器分3种情况,任选且只选任一种即可,切记不可贪多
# 情况1:使用上游服务器时间,且上游服务器时间为ntp服务器池(能接入外网的情况优选)
pool cn.pool.ntp.org iburst
# 情况2:使用上游服务器时间,且上游服务器时间为ntp服务器池(能接入外网的情况优选)
server ntp.aliyun.com iburst
# 情况3:不使用上游服务器时间,以服务器本地时间为准(内网自建NTP服务器优选)
server <内网NTP服务器IP地址> iburst
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
# Allow NTP client access from local network.
#allow 192.168.0.0/16
# Serve time even if not synchronized to a time source.
#local stratum 10
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
# Specify directory for log files.
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
# 重启服务以确保新配置生效
[root@centos85 ~]# systemctl restart chronyd.service
# 查看NTP服务器时间同步的整体情况
[root@centos85 ~]# chronyc -n sources -v
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 193.182.111.14 2 6 17 14 -8201us[ -20ms] +/- 142ms
^- 78.46.102.180 2 6 161 8 +26ms[ +26ms] +/- 94ms
^? 84.16.67.12 1 6 30 15 +25ms[ +14ms] +/- 105ms
^* 193.182.111.143 2 6 17 14 +12ms[ +54us] +/- 148ms
# 查看NTP服务器时间戳的具体信息
[root@centos85 ~]# chronyc tracking
Reference ID : C1B66F8F (ntp8.flashdance.cx)
Stratum : 3
Ref time (UTC) : Thu Jan 25 10:06:35 2024
System time : 0.005802411 seconds fast of NTP time
Last offset : +0.001469315 seconds
RMS offset : 0.001469315 seconds
Frequency : 1.523 ppm slow
Residual freq : +23.727 ppm
Skew : 1.793 ppm
Root delay : 0.288379759 seconds
Root dispersion : 0.008044729 seconds
Update interval : 128.5 seconds
Leap status : Normal
# 首次使用chronyc makestep向上游服务器同步时间
[root@centos85 ~]# chronyc makestep
200 OK
[root@centos85 ~]#
chrony项目拓展资料
阅读官方文档有助于身体健康!
官方网站https://chrony-project.org/
官方文档 https://chrony-project.org/documentation.html