Chrony使用设置参考
2018-10-14 14:37:11 阿炯

Chrony是一个能帮助你保持系统时钟与时钟服务器(NTP)同步,因此让服务器的时间保持精确;它由两个程序组成,分别是chronyd和chronyc。chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步,它确定计算机增减时间的比率,并对此进行补偿。chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。在像CentOS 7之类基于RHEL的操作系统上,已经默认安装有Chrony,它使用123/UDP端口协议(NTP)。

其两个核心组件分别为:
chronyd:是守护进程,主要用于调整内核中运行的系统时间和时间服务器同步。它确定计算机增减时间的比率,并对此进行调整补偿。

chronyc:提供一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

当Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置,CentOS7操作系统上最重要的设置有:
server - 该参数可以多次用于添加时钟服务器,必须以"server "格式使用。一般而言,你想添加多少服务器,就可以添加多台服务器:
server 0.centos.pool.ntp.org
server 2.europe.pool.ntp.org

stratumweight - stratumweight指令设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。默认情况下,CentOS中设置为0,让chronyd在选择源时忽略源的层级。

driftfile - chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。

rtcsync - rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
allow / deny - 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。
allow 192.168.4.5
deny 192.168/16

cmdallow / cmddeny - 跟上面相类似,只是你可以指定哪个IP地址或哪台主机可以通过chronyd使用控制命令。

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

makestep - 通常chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效。

#指定允许的客户端网段来当前时间服务器节点同步时间,我们可以使用deny all拒绝所有客户端。
allow 172.200.0.0/21
#注意:如果主机位是0的话可以简写,比如下面的地址可以简写为"127/8"
allow 127.0.0.0/8

#如果使用server字段配置的时间服务器同步时间失败,默认情况下当前时间服务器是不会向客户端同步时间的,
#这是因为担心当前节点的时间不准确(因为当前节点没有和定义中的server中的时间服务器进行同步),如果想要在
#server指定的时间服务器同步失败的情况下依旧返回当前时间服务器的时间给客户端,需要开启该参数,该参数
#配置在生产环境中还是有点危险的,因此建议在server字段中指定可靠的时间源,否则可能导致整个集群时间都一致的错
local stratum 10


使用chronyc

可以通过运行chronyc命令来修改设置,命令如下:
accheck - 检查NTP访问是否对特定主机可用
activity - 该命令会显示有多少NTP源在线/离线
add server - 手动添加一台新的NTP服务器。
clients - 在客户端报告已访问到服务器
delete - 手动移除NTP服务器或对等服务器
settime - 手动设置守护进程时间
tracking - 显示系统时间信息

可以通过使用帮助命令查看完整的命令列表。


配置Chrony

以下是系统默认配置文件(/etc/chrony.conf)

# 使用pool.ntp.org项目中的公共服务器。以server开,理论上你想添加多少时间服务器都可以。
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
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

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
driftfile /var/lib/chrony/drift

# chronyd根据需求减慢或加速时间调整,
# 在某些情况下系统时钟可能漂移过快,导致时间调整用时过长。
# 该指令强制chronyd调整时期,大于某个阀值时步进调整系统时钟。
# 只有在因chronyd启动时间超过指定的限制时(可使用负值来禁用限制)没有更多时钟更新时才生效。
makestep 1.0 3

# 将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
rtcsync

# Enable hardware timestamping on all interfaces that support it.
# 通过使用hwtimestamp指令启用硬件时间戳
#hwtimestamp eth0
#hwtimestamp eth1
#hwtimestamp *

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

# 指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器
#allow 192.168.1.0/16
#deny 192.168/16

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

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

# 指定日志文件的目录。
logdir /var/log/chrony

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


设置时区

查看当前系统时区:$ timedatectl

如果当前的时区不正确,可按照以下操作设置。

查看所有可用的时区:
$ timedatectl list-timezones

筛选式查看在亚洲S开的上海可用时区:
$ timedatectl list-timezones |  grep  -E "Asia/S.*"
Asia/Shanghai

设置当前系统为Asia/Shanghai上海时区:
$ timedatectl set-timezone Asia/Shanghai

设置完时区后,强制同步下系统时钟:
$ chronyc -a makestep
200 OK


常用命令

查看chrony服务的监听端口(UDP:123/323)
# ss -untlp

查看时间同步源:
$ chronyc sources -v

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

设置硬件时间

硬件时间默认为UTC:
$ timedatectl set-local-rtc 1

启用NTP时间同步:
$ timedatectl set-ntp yes

校准时间服务器:
$ chronyc tracking

注意:配置完/etc/chrony.conf后,需重启chrony服务,否则可能会不生效。

Debian下对chrony进行配置来进行时间同步

安装 chrony 作为时间同步软件:
apt-get install chrony

编辑配置文件 /etc/chrony/chrony.conf,修改 ntp 服务器配置:
vim /etc/chrony/chrony.conf
# 删除所有的 pool 配置
pool 2.debian.pool.ntp.org iburst
# 增加国内的 ntp 服务器,或是指定其他常用的时间服务器
server ntp.api.bz iburst

重启 chrony 服务:
systemctl restart chrony

验证 chrony 同步状态:
# 执行查看命令
chronyc sourcestats -v


以交互式方式(支持命令补全)查看时间同步资源
# chronyc
chronyc> sources
chronyc> sourcestats