1 基础知识
1.1 NTP
1.1.1 NTP的概念
– NTP是Network Time Protocol的英文缩写
– NTP中文范围为网络时间协议
– NTP透过网络将计算机时间同步为世界统一时间(UTC)
注:UTC专业叫法是时间基准(Timebase),是世界最精确的时间尺度
1.1.2 NTP的作用
– 精准的时间戳可以减少维护和降低故障排查的复杂度
– 精准的时间戳可确定依赖性检查需要重建的代码
– 精准的时间戳可支持关联分布式通讯事件
– 精准的时间戳可以解决时间敏感交易的纠纷
– 精准的时间戳可作为法医分析和刑事诉讼的证据
– 精准的时间戳是调试、安全和审核的基础
– 精准的时间戳是网络设备的唯一参考框架
1.2 Chrony
1.2.1 chrony的介绍
– chrony是网络时间协议(NTP)的具体实现之一
1.2.2 chrony的功能
– chrony可以将系统时钟与NTP服务器、参考时钟(例如 GPS接收器)、手表和键盘等
– chrony可充当NTPv4(RFC5905)服务器并向网络中的其他计算机提供时间服务
1.2.3 chrony的特点
– chrony被设计得适应能力极强,包括间歇性网络连接、拥堵等
-chrony两台计算机之间的因特网同步可达毫秒以内的典型精度
– chrony两台计算机之间的以太网同步可达数十微妙的典型精度
– chrony使用硬件时间戳记或参考时钟,可达亚微妙级的精度
1.2.4 chrony的架构
– chronyd,chrony的守护进程
– chronyc,chrony的命令程序,用于监视chronyd性能并更改各种操作参数
1.2.5 支持的系统
– Linux
– FreeBSD
– NetBSD
– macOS
– Solaris
– 其他类Linux与Unix系统
2 最佳实践
2.1 系统环境
OS = CentOS 7.3 x86_64
IP Address = any
Host Name = any
2.2 安装前的准备
2.2.1 设置正确的时区
timedatectl set-timezone Asia/Shanghai
2.2.2 安装GnuTLS合适的版本(可选)
需要注意的是,
– 以上仅适用于开启NTS协议时需求,否则不用安装
– NTS安装默认启用状态,不会提示此依赖关系
2.2.3 安装其他依赖包(可选)
yum install -y pkgconfig nettle-devel nss-devel libtomcrypt-devel libseccomp-devel libedit asciidoc
官方建议安装的依赖包,但测试过可以不安装,另外请注意以下包无法通过测试,个人不建议安装,只列举,
#yum install -y libcap-devel
2.2.4 卸载旧版本
yum remove -y chrony
2.2.5 准备编译环境
yum -y install gcc make
2.2.6 准备安装包
cd ~/ wget https://download.tuxfamily.org/chrony/chrony-4.0.tar.gz tar -xf chrony-4.0.tar.gz
2.3 安装部署
2.3.1 预编译安装包
cd ~/chrony-4.0 ./configure --prefix=/usr
2.3.2 编译软件包
cd ~/chrony-4.0 make make docs
2.3.3 安装软件包
cd ~/chrony-4.0 make install make install-docs
安装完毕后,你需要运行以下命令确认安装符合要求,
chronyd -v
可见如下显示,
chronyd (chrony) version 4.0 (+CMDMON +NTP +REFCLOCK +RTC -PRIVDROP -SCFILTER -SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)
注:本章默认要求开启“NTP”和“NTS”协议的支持,方便后面章节的配置。
2.3.4 部署配置范例文件
cd ~/chrony-4.0 cp examples/chrony.conf.example2 /etc/chrony.conf
2.3.5 部署服务控制脚本
cd ~/chrony-4.0 cp examples/chrony*.service /usr/lib/systemd/system/
可使用如下命令检查脚本部署,
ls /usr/lib/systemd/system/chrony*.service
可见如下显示,
/usr/lib/systemd/system/chronyd.service /usr/lib/systemd/system/chrony-wait.service
然后,你可以使用如下命令启动并设置服务自启动,
systemctl start chronyd.service systemctl enable chronyd.service
启动服务后,请使用如下命令检查服务的状态,
systemctl status chronyd.service
2.3.6 定制自己的服务
vim /etc/chrony.conf
配置修改如下,
server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst stratumweight 0 driftfile /var/lib/chrony/drift rtcsync makestep 10 3 noclientlog logchange 0.5 logdir /var/log/chrony
– 参数“server”声明NTP时间源服务器,“iburst”选项以4-8个请求同时更新
– 参数“stratumweight”声明时间源的层级,范例“0”表示忽略时间源的层级
– 参数“driftfile”声明记录时间漂移比率文件,重启服务时系统时钟根据记录值进行时间补偿。
– 参数“rtcsync”声明启用RTC(实时时钟)的内核同步
– 参数“makestep”声明如系统时钟偏移量大于10秒,参数3限制只在前三个时钟中更新
– 参数“noclientlog”声明不记录客户端访问(如果记录可使用“chronyc clients”命令查看)
– 参数“logchange”声明调整系统日志的系统时钟阀值
– 参数“logdir”声明日志的目录(目录不存在,则自创建)
配置修改后,你需要使用如下命令重启服务使配置生效,
systemctl restart chronyd.service
然后,我们 可以通过如下命令检查服务的倾听,
netstat -anp | grep chronyd
可见如下显示,
udp 0 0 127.0.0.1:323 0.0.0.0:* 9660/chronyd udp 0 0 10.168.0.80:46484 193.182.111.142:123 ESTABLISHED 9660/chronyd udp 0 0 10.168.0.80:57780 202.112.31.197:123 ESTABLISHED 9660/chronyd udp6 0 0 ::1:323 :::* 9660/chronyd unix 2 [ ] DGRAM 96275 9660/chronyd
2.4 NTP公共服务端的配置方法
如果你有需要,请参阅以下章节配置NTP公共服务端,
2.5 NTS公共服务端的配置方法
如果你有需要,请参阅以下章节配置NTS公共服务端,
===================
安装教程
—————–
https://chrony.tuxfamily.org/doc/4.0/installation.html
官方首页
——————
https://chrony.tuxfamily.org/
chrony的配置
—————-
https://chrony.tuxfamily.org/doc/2.1/manual.html#Configuration-file
https://chrony.tuxfamily.org/documentation.html
系统时钟
———–
https://baike.baidu.com/item/%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F/3736888?fr=aladdin
参考时钟
———–
http://www.ntp.org/ntpfaq/NTP-s-algo.htm#Q-REFCLK
NTP的简介
————
http://support.ntp.org/bin/view/Main/WebHome
NTS的介绍
————-
https://tools.ietf.org/html/rfc8915
https://linux.cn/article-12860-1.html
错误解决
————-
https://access.redhat.com/solutions/3552561
https://access.redhat.com/discussions/4394471
没有评论