共计 3272 个字符,预计需要花费 9 分钟才能阅读完成。
前言
在多主机协同工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,例如:加密协议、日志,集群等。利用 NTP(Network Time Protocol)协议网络中的各个计算机时间达到同步。
环境
系统 | selinux、firewalld | 实现方式 | 服务器端 | 客户端 |
---|---|---|---|---|
CentOS7 | 关闭 | chrony | 172.20.3.34 | 172.20.200.200 |
chrony
简介
实现 NTP 协议的自由软件。可以将时钟与 NTP 服务器,参考时钟(例如 GPS 接收器)以及使用手表和键盘通过 chronyc 进行手动输入进行同步。它还可以充当 NTPv4(RFC 5905)服务器并与之对等,以向网络中的其他计算机提供时间服务。设计用于在各种条件下良好运行,包括间歇性和高度拥挤的网络连接,温度变化(计算机时钟对温度敏感),以及不能连续运行或在虚拟机上运行的系统。通过 Internet 同步的两台机器之间的典型精度在几毫秒之内,在 LAN 上,精度通常为几十微秒。利用硬件时间戳或硬件参考时钟,可实现亚微妙的精度。
chrony 官网:https://chrony.tuxfamily.org
优势
- 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,对于并非全天 24 小时运行的虚拟计算机而言非常有用。
- 能够更好的响应时钟频率的快速变化,对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
- 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
- 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
- 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。
软件包及服务相关信息
软件包:chrony-3.4-1.el7.x86_64
监听端口:323/udp,123/udp
服务 unit 文件:/usr/lib/systemd/system/chronyd.service
两个主要程序:chronyd 和 chronyc
- chronyd:后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务
- chronyc:命令行用户工具,用于监控性能并进行多样化的配置。它可以在 chronyd 示例控制的计算机上工作,也可以在一台不同的远程计算机上工作。
配置文件:/etc/chrony.conf 相关参数解释
- server – 可用于时钟服务器,iburst 选项当服务器可达时,发送一个八个数据
包而不是通常的一个数据包。包间隔通常为 2 秒, 可加快初始同步速度 - driftfile – 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中,
会在重启后为系统时钟作出补偿 - rtcsync – 启用内核模式,系统时间每 11 分钟会拷贝到实时时钟(RTC)
- allow / deny – 指定一台主机、子网,或者网络以允许或拒绝访问本服务器
- cmdallow / cmddeny – 可以指定哪台主机可以通过 chronyd 使用控制命令
- bindcmdaddress – 允许 chronyd 监听哪个接口来接收由 chronyc 执行的命令
- makestep – 通常 chronyd 将根据需求通过减慢或加速时钟,使得系统逐步纠正
所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过
程消耗很长的时间来纠正系统时钟。该指令强制 chronyd 在调整期大于某个阀
值时调整系统时钟 - local stratum 10 – 即使 server 指令中时间服务器不可用,也允许将本地时间
作为标准时间授时给其它客户端
chronyc 命令相关参数解释
- help 命令可以查看更多 chronyc 的交互命令
- accheck 检查是否对特定主机可访问当前服务器
- activity 显示有多少 NTP 源在线 / 离线
- sources [-v] 显示当前时间源的同步信息
- sourcestats [-v]显示当前时间源的同步统计信息
- add server 手动添加一台新的 NTP 服务器
- clients 报告已访问本服务器的客户端列表
- delete 手动移除 NTP 服务器或对等服务器
- settime 手动设置守护进程时间
- tracking 显示系统时间信息
公共 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 服务
- s1a.time.edu.cn 北京邮电大学
- s1b.time.edu.cn 清华大学
- s1c.time.edu.cn 北京大学
国家授时中心服务器
- 210.72.145.44
chrony 时间同步实现步骤
服务端配置(172.20.3.34)
[root@CentOS7 ~]# egrep "^server|^allow|^local" /etc/chrony.conf
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server s1a.time.edu.cn iburst
allow 172.20.0.0/16
local stratum 10
[root@CentOS7 ~]# systemctl restart chronyd
[root@CentOS7 ~]# systemctl enable chronyd
说明:allow 172.20.0.0/16 表示哪些主机可以向该主机同步时间;local stratum 10 表示当互联网不能访问时间服务器时,仍然使用本机时间提供时间服务。
客户端配置(172.20.200.200)
[root@CentOS7 ~]#grep "^server" /etc/chrony.conf
server 172.20.3.34 iburst
[root@CentOS7 ~]#systemctl restart chronyd
[root@CentOS7 ~]#systemctl enable chronyd
验证时间同步
1. 查看服务端当前已同步的时间源信息
2. 查看访问过服务端的客户端列表
3. 在客户端查看当前已同步的时间源信息
4. 在客户端故意将时间设置为 1 年前,然后看是否能自动同步服务端的时间
[root@CentOS7 ~]#ifconfig eth0|awk -F"[]+" 'NR==2{print $3}'
172.20.200.200
[root@CentOS7 ~]#date -s '-1 -year'
Mon Nov 12 17:45:03 CST 2018
[root@CentOS7 ~]#systemctl restart chronyd
[root@CentOS7 ~]# pssh -h hosts.txt -i date
[1] 17:53:16 [SUCCESS] 172.20.3.34
Tue Nov 12 17:53:16 CST 2019
[2] 17:53:16 [SUCCESS] 172.20.200.200
Tue Nov 12 17:53:16 CST 2019
时间工具 timedatectl
查看日期时间、时区及 NTP 状态
[root@CentOS7 ~]# timedatectl
Local time: Tue 2019-11-12 17:49:16 CST
Universal time: Tue 2019-11-12 09:49:16 UTC
RTC time: Tue 2019-11-12 09:49:16
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
查看时区列表
[root@CentOS7 ~]# timedatectl list-timezones
修改时区
timedatectl set-timezone Asia/Shanghai
修改日期时间
timedatectl set-time "2019-11-12 18:30:00"
开启 NTP
timedatectl set-ntp true/flase