时间同步服务

Posted 凭栏听枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间同步服务相关的知识,希望对你有一定的参考价值。

时间同步服务

加密和安全都离不开时间的同步,否则各种网络服务可能不能正常运行

公共NTP服务

pool.ntp.org:项目是一个提供可靠易用的NTP服务的虚拟集群cn.pool.ntp.org,0-3.cn.pool.ntp.org

阿里云公共NTP服务器
Unix/linux类:ntp.aliyun.com,ntp1-7.aliyun.com
windows类: time.pool.aliyun.com

腾讯公共NTP
time1-5.cloud.tencent.com

大学ntp服务
s1a.time.edu.cn 北京邮电大学
s1b.time.edu.cn 清华大学

s1c.time.edu.cn 北京大学

国家授时中心服务器:210.72.145.44
美国标准技术院: time.nist.gov

一次性同步时间命令

范例:ntpdate一次性同步时间

#当时间同步出现问题的时候,可以使用ntpdate进行时间的一次性同步
[root@centos7 ~]# date -s '-1 year'
Wed May  6 23:35:02 CST 2020
[root@centos7 ~]# ntpdate ntp.aliyun.com
 6 May 14:45:22 ntpdate[1873]: step time server 203.107.6.88 offset 31503600.792913 sec
[root@centos7 ~]# date
Thu May  6 14:45:27 CST 2021

范例:rdate一次性同步时间

[root@centos7 ~]# yum install -y rdate
[root@centos7 ~]# date -s '-1 year'
Wed May  6 14:47:14 CST 2020
[root@centos7 ~]# rdate -s -u time.nist.gov
[root@centos7 ~]# date
Thu May  6 14:54:56 CST 2021

时间同步服务

时间同步软件服务

  • ntp
  • chrony

ntp

将系统时钟和世界协调UTC同步,精度再局域网内可达0.1ms,在互联网上绝大多是的地方精度可达到1-50ms

项目官网:http://www.ntp.org

chrony

实现NTP协议的自由软件,可使系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘的手动输入进行同步。还可作为NTPv4(RFC 5950)服务器和对等体运行,为网络中的计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。

通过internet同步的两台机器之间的典型精度在几毫秒之内,在LAN中,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微秒的精度

chrony

包:chrony

两个主要程序:chronyd和chronyc

  • chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿
  • chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作

服务unit文件:/usr/lib/systemd/system/chronyd.service

监听端口:服务端:123/udp,客户端:323/udp

配置文件:/etc/chrony.conf

chrony.conf文件详解:

server #可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包。 包间隔通常为2秒,可加快初始同步速度
pool #该指令的语法与server 指令的语法相似,不同之处在于它用于指定NTP服务器池而不是单个NTP服务器。池名称应解析为随时间可能会变化的多个地址
driftfile #根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,会在重启后为系统时钟作出补偿
rtcsync #启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)
allow / deny #指定一台主机、子网,或者网络以允许或拒绝访问本服务器
cmdallow / cmddeny #可以指定哪台主机可以通过chronyd使用控制命令
bindcmdaddress #允许chronyd监听哪个接口来接收由chronyc执行的命令
makestep # 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时调整系统时钟
local stratum 10 #即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端

ntp客户端工具:chronyc

chronyc可以运行交互式和非交互式两种方式,支持以下子命令

help 				命令可以查看更多chronyc的交互命令
accheck 			检查是否对特定主机可访问当前服务器
activity 			显示有多少NTP源在线/离线
sources [-v]		显示当前时间源的同步信息
sourcestats [-v]	显示当前时间源的同步统计信息
add server 			手动添加一台新的NTP服务器
clients 			报告已访问本服务器的客户端列表
delete 				手动移除NTP服务器或对等服务器
settime 			手动设置守护进程时间
tracking 			显示系统时间信息

实现私有的时间服务器

#服务器端设置
[root@centos7 ~]# yum install -y chrony

[root@centos7 ~]#vim /etc/chrony.conf
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
#allow 192.168.0.0/16
allow 0.0.0.0/0 #加此行,指定允许同步的网段
# Serve time even if not synchronized to a time source.
local stratum 10 #删除此行注释,当互联网无法连接,仍然可以为客户端提供时间同步服务

[root@centos8 ~]#systemctl restart chronyd

#服务启动后会自动打开端口123/udp
[root@centos8 ~]# ss -ntlu
Netid       State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      
udp         UNCONN       0            0                        0.0.0.0:111                   0.0.0.0:*         
udp         UNCONN       0            0                        0.0.0.0:123                   0.0.0.0:*         
udp         UNCONN       0            0                      127.0.0.1:323                   0.0.0.0:*         
udp         UNCONN       0            0                           [::]:111                      [::]:*         
udp         UNCONN       0            0                          [::1]:323                      [::]:*         
tcp         LISTEN       0            128                      0.0.0.0:22                    0.0.0.0:*         
tcp         LISTEN       0            128                      0.0.0.0:111                   0.0.0.0:*         
tcp         LISTEN       0            128                         [::]:22                       [::]:*         
tcp         LISTEN       0            128                         [::]:111                      [::]:*         

#客户端配置
#客户端配置
[root@centos8 ~]#vim /etc/chrony.conf
server 10.0.0.218 iburst					#服务器端的IP地址
[root@centos8 ~]#systemctl restart chronyd.service
#确认同步成功
[root@centos8 ~]#chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- 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
===============================================================================
^* 10.0.0.218 3 6 77 29 -229us[-1154us] +/- 17ms

以上是关于时间同步服务的主要内容,如果未能解决你的问题,请参考以下文章

#VSCode保存插件配置并使用 gist 管理代码片段

多线程 Thread 线程同步 synchronized

水合没有查询的中继片段

php 测试同步片段

Android:处理同步网络调用

从片段调用 Google Play 游戏服务