CentOS 8上配置Chronyd作为NTP服务

官方文档链接: https://chrony.tuxfamily.org/documentation.html

CentOS8目测也已经发行了有小半年了,近期的几个项目基本上也都是以CentOS8为测试环境。由于前几个月已经将Kubernetes迁移到Vendor,且家里有一些特殊的情况,故家里的测试环境目前只保留了几个基本的点,放在一台机器上跑。而所有的项目都放在Mac的虚拟机里,需要哪个就启动哪个。

今天在调用Python的datetime模块的时候发现无论怎么调用,都说今天是周五……WTF?周日被后羿射熄火了,周六和周一被谁吃了?

退到系统里,用date命令看了一眼,妈蛋,时间居然没有同步……

然而,在打算同步时间的时候又遇到了问题,他大爷的,CentOS8 居然不提供ntp这个包了。也不知道红帽的脑子是不是抽了?这些年来从CentOS7开始就瞎改,通用性搞的这么差,难道就为了推你自己家的ansible?无奈,只能查资料,确认一下CentOS8的时间服务应该怎么配置。

经过不断的寻找,发现又是CentOS7那个时代留下的大锅(chrony)搞的,只不过之前每次在初始化CentOS7的时候,都会跑脚本把chronyd服务彻底禁用掉,然后启用ntpd服务,看来现在不得不换掉原来的ntpd了,不知道这一刻每天做针对于F5等以CentOS为系统底层而进行二次开发的系统的devops前同事们,内心是不是想骂一句mmp?

简单看了一下,其实难度并不大,而且有迎合ntpd用户使用习惯的痕迹,从Redhat的角度来看,估计十有八九是想通过chrony和datetimectl这两个工具统一其他发行版的时间管理方案,就像systemd和NetworkManager一样,不过这样以建立在舍弃掉自己产品的用户使用习惯而做“大而全”的统一,除了一群“激进的开发者”以外,真的有人买账么?At least, I don’t think so.

闲话少说,其实玩法和ntpd都差不太多,首先还是万年不变的/etc/下的配置文件:
/etc/chrony.conf

然后就可以开始看里面的内容了:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.centos.pool.ntp.org iburst   
##貌似以Server或以pool开头都可以(https://chrony.tuxfamily.org/faq.html),关于后面都iburst参数, 一般用此参数即可. 含义是在头四次NTP请求以2s或者更短的间隔, 而不是minpoll x指定的最小间隔, 可以让chronyd启动时快速同步一次
其他的参数有minpoll x 默认值是6,代表64s; maxpoll x 默认值是9,代表512s.

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
##driftfile /var/lib/chrony/drift chrony会根据实际时间计算修正值, 并将补偿参数记录在该指令指定的文件里. 与ntpd或者ntpdate最大的区别就是, chrony的修正是连续的,通过减慢时钟或者加快时钟的方式连续的修正. ntpd或者ntpdate搭配crontab的校时工具是直接调整时间, 会出现间断, 并且相同时间可能会出现两次. 因此请放弃使用ntpd, ntpdate来校时

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
##如上所示 makestep 1.0 3, 当头三次校时如果时间相差1.0s, 则跳跃式校时

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
##启用内核时间与RTC时间同步(自动写回硬件),在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
##

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16  ##允许该网段客户端来同步时间
#deny 172.28.0.0/18



#cmdallow
#cmddeny

bindcmdaddress ::1
bindcmdaddress 127.0.0.1
##该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
## 指定包含NTP验证密钥的文件。

# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC

# Specify directory for log files.
logdir /var/log/chrony

# 指定日志文件的目录。

# Select which information is logged.
#log measurements statistics tracking

在配置好之后,即可使用:systemctl restart chronyd命令对服务进行重启。

查看时间情况:
timedatectl show

设置时区:timedatectl set-timezone Asia/Shanghai

!!!关键点!!!
启动时间同步功能:timedatectl set-ntp yes(用于NTPSynchronized为no时)
强制同步时间:chronyc -a makestep

校准时间服务器:chronyc tracking

查看时间同步状态:chronyc sourcestats -v

查看时间源:chronyc sources -v

firewalld命令开墙:

sudo firewall-cmd --add-service=ntp --permanent 
sudo firewall-cmd --reload
This entry was posted in Linux, Servuce and tagged , , , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *