一、计时方式的发展
1.1.古代计时方式
-
在远古时期,人类用来确定时间的方式是一些自然界“相对”宜古不变的周期。如地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的计时可以追溯到公元前大约2000年,古埃及人利用光线留下的影子用作计时的工具。影子拉得越长计时越精确。古埃及人修建高耸入云的大型方尖碑,来追踪太阳的移动,随后人们又利用了沙漏、日晷、钟摆等工具,巧妙地利用一些相对固定而准确的周期来计时
-
商朝人开发并使用了一种泄水型水钟-漏壶,后来又有用蜡烛和线香计时的
-
北宋元祐元年(1086年),天文学家苏颂将浑仪、浑象和报时装置结合,建造一个划时代的计时工具一"水远象台”
-
14世纪时,西方国家广泛使用机械钟。在十六世纪,奥斯曼帝国的科学家达兹·艾-丁(Taqla-Din)发明出了机械闹钟
-
1583年,伽利略提出了著名的等时性理论,即不论摆动幅度的大小,完成一次摆动的时间是相同的
-
1656年,荷兰科学家克里斯蒂安·惠更斯(Christiaan Huygens)应用他的理论,设计出了世界第一只钟摆
-
1868年,百达翡丽(Patek Philippe)发明了手表
1.2现代计时方式
-
石英晶体受到电池的电力影响时,会产生规律的振动。每秒的振动次数是32768次,可以设计电路来计算振动次数,当计数到32768次时,即计时1秒。1967年瑞士人发布了世界上首款石英表
-
当原子从一个相对高的“能量态“迁至低的”能量态”时,会释放出电磁波,产生共振频率。依据此原理,拉比构想出了一种全新的计时仪器-一原子钟(Atomic clock)
-
因为原子的共振频率是固定的。如:铯原子(Caesium133)的固有频率是9192631770赫兹,约合92亿赫兹,对铯原子钟计数9192631770次,即可测量出一秒钟。很多国家(包括我国和美国NIST)的标准局,就是用铯原子钟来作为时间精度标准的。GPS系统也是用铯原子钟来计时
-
2008年诞生的锣(Strontium87)原子钟,固有频率为429228004229873,约合430万亿赫兹,将精度提高到了10的17次方
-
2013年镱元素(yterbium)制成的原子钟问世,镱原子钟的固有频率约合518万亿赫兹,精度高达10的18次方。宇宙的年龄为138亿年。如果这台镜原子钟从宇宙诞生之初就开始计时,直到今天也不会发生1秒的误差
二、时间同步服务器
-
时间同步:多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(NetworkTime Protocol)协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一
-
时间同步实现: ntp(企业6之前),chrony
-
ntp:将系统时钟和世界协调时UTC同步,精度在局域网内可达0.1 ms,在互联网上绝大多数的地方精度可以达到1-50 ms,项目官网:Welcome to the home of the Network Time Protocol (NTP) Project.
-
chrony:实现NTP协议的的自由软件。可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可以作为NTPV4(RFC 5905)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上远行的系统。通过Internet周步的两台机器之间的典型精度在几毫秒之内,在LAN上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度
三、时间同步服务的使用
3.1系统时间及时区的管理
#时间查看
[root@sever100 ~]# date
2024年 09月 13日 星期五 17:56:18 CST
[root@sever100 ~]# timedatectl
Local time: 五 2024-09-13 17:56:37 CST #bios时间
Universal time: 五 2024-09-13 09:56:37 UTC #世界时间--伦敦时间
RTC time: 五 2024-09-13 09:56:37 #系统时间=时区+硬件时间(utc计算方式)
Time zone: Asia/Shanghai (CST, +0800) #
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[root@sever100 ~]#
#列出时区
[root@sever100 ~]# timedatectl list-timezones
#修改为上海时间
#先关闭时间同步服务
[root@sever100 ~]# systemctl stop chronyd.service
[root@sever100 ~]#
[root@sever100 ~]# timedatectl set-timezone Asia/Shanghai
[root@sever100 ~]#
#检查
[root@sever100 ~]# timedatectl
Local time: 五 2024-09-13 18:22:28 CST
Universal time: 五 2024-09-13 10:22:28 UTC
RTC time: 五 2024-09-13 10:22:28
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no
[root@sever100 ~]#
#监控
[root@sever100 ~]# watch -n 1 timedatectl
#修改系统时间
[root@sever100 ~]# timedatectl set-time "11:11:00"
[root@sever100 ~]# timedatectl set-time "2024-11-11 11:11:11"
[root@sever100 ~]#
#设定系统时间计算方式 0表示utc时间计算方式
[root@sever100 ~]# timedatectl set-local-rtc 0
[root@sever100 ~]#
3.2公共ntp地址
-
www.ntppool.org:项目是一个提供可靠易用的NTP服务的虚拟集群,[0-3].asia.pool.ntp.org
-
阿里云公共NTP服务器
-
Unix/linux类:ntp.aliyun.com, ntp1-7.aliyun.com
-
windows类:time.pool.aliyun.com
-
国家授时中心服务器:ntp.ntsc.ac.cn
-
3.3使用公共的ntp时间到本机
-
在RHEL9 中使用的同步时间软件为hrony
-
chrony由两个程序组成,分别是chronyd和chronyc。
-
chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
-
chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上作,也可以在一台不同的远程计算机上工作
-
chrony作为client(客户端)使用方法如下:
#chrony主配置文件
[root@sever100 ~]# rpm -qc chrony
/etc/chrony.conf
/etc/chrony.keys
/etc/logrotate.d/chrony
/etc/sysconfig/chronyd
[root@sever100 ~]#
#修改配置文件
[root@sever100 ~]# vim /etc/chrony.conf
#重启
[root@sever100 ~]# systemctl restart chronyd.service
[root@sever100 ~]#
#检测
[root@sever100 ~]# timedatectl
Local time: 五 2024-09-13 21:11:32 CST
Universal time: 五 2024-09-13 13:11:32 UTC
RTC time: 五 2024-09-13 13:11:32
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[root@sever100 ~]#
[root@sever100 ~]# chronyc sources -v
-
M:时间源模式“表示服务器,=表示对等方,#表示本地连接的参考时钟
-
S:指源的状态
-
*:表示chronyd当前已经同步到的源
-
+表示可接受的信号源,与选定的信号源组合在一起,
-
-:表示被合并算法排除的可接受源
-
? 指已失去连接性或者其数据包未通过所有测试的源。
-
x表示chronyd认为时虚假行情的时钟,即标记该时间与其他多数时间不一致
-
~表示时间似乎具有太多可变性
-
Name/lP address:显示源的名称或IP地址
-
Stratum:显示时间来源的层
-
Poll:显示查询询源的速率 2**N
-
Reach:显示源的可达性寄存器以八进制数字打印
-
LastRx:显示多长时间前从来源接收到了最后一个好的样本。
-
Last sample:此列显示上次测是时本地时钟与源之间的偏移
3.4 搭建本地时间服务器
-
在RHEL9中ntp的服务端同样默认使用chrony
-
chrony使用端口为udp 323,chrony兼容ntp所以在设定chrony为服务端是也会开启udp的123端口
-
chrony 的优势:
-
更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天24小时运行的虚拟计算机而言非常有用
-
能够更好地响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言常有用
-
在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响
-
在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟
-
-
chrony的参数说明
server #可用于时钟服务器
iburst #选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包;包间隔通常为2秒,可加快初始同步速度
driftfile #根据实际时间计算出计算机增减时间的比率 #将它记录到一个文件会在重启后为系统时钟作出补偿
rtcsync #启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow / deny #指定一台主机、子网,或者网络以允许或拒绝访问本服务器
bindcmdaddress #允许chronyd监听哪个接口来接收由chronyc执行的命令
lpcal stratum 10
#即使server指令中时间服务器不可用0-15 16个曾
#也允许将本地时间作为标准时间授时给其它客户端
5. 相关配置
#检查主机时间
[root@sever100 ~]# timedatectl
Local time: 五 2024-09-13 21:26:07 CST
Universal time: 五 2024-09-13 13:26:07 UTC
RTC time: 五 2024-09-13 13:26:07
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
#修改主配置文件
[root@sever100 ~]# vim /etc/chrony.conf
[root@sever100 ~]#
#重启
[root@sever100 ~]# systemctl restart chronyd.service
#查看
[root@sever100 ~]# netstat -antlupe | grep chrony
udp 0 0 127.0.0.1:323 0.0.0.0:* 0 125730 22166/chronyd
udp 0 0 0.0.0.0:123 0.0.0.0:* 0 125732 22166/chronyd
udp6 0 0 ::1:323 :::* 0 125731 22166/chronyd
[root@sever100 ~]#
# netstat 查看端口
# a 表示所有 all
# n 表示不做解析
# t 表示tcp协议
# l --listening 正在进行的、活跃的
# u 表示udp
# p 显示端口进程信息
# e 显示扩展信息
#检查网络与防火墙
[root@sever100 ~]# systemctl status firewalld.service
○ firewalld.service
Loaded: masked (Reason: Unit firewalld.service is masked.)
Active: inactive (dead)
[root@sever100 ~]#
#没关,关掉
[root@sever100 ~]# systemctl disable --now firewalld
#测试
[root@sever200 ~]# vim /etc/chrony.conf
[root@sever200 ~]# systemctl restart chronyd
chronyd-restricted.service chronyd.service
[root@sever200 ~]# systemctl restart chronyd
[root@sever200 ~]# chronyc 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
===============================================================================
^* 172.25.254.111 2 6 17 5 -6759ns[ -38us] +/- 103ms