网络时间服务和chrony

2022-07-31 10:03:29 浏览数 (2)

前言

在多主机协同工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,例如:加密协议、日志,集群等。利用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)
代码语言:javascript复制
[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)
代码语言:javascript复制
[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年前,然后看是否能自动同步服务端的时间

代码语言:javascript复制
[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状态

代码语言:javascript复制
[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

查看时区列表

代码语言:javascript复制
[root@CentOS7 ~]# timedatectl list-timezones

修改时区

代码语言:javascript复制
timedatectl set-timezone Asia/Shanghai

修改日期时间

代码语言:javascript复制
timedatectl set-time "2019-11-12 18:30:00"

开启NTP

代码语言:javascript复制
timedatectl set-ntp true/flase

0 人点赞