Skip to content

时间同步服务主要有两种ntp和chrony,各有各的优势,ntp和chrony对比

需要注意的一点是,在chrony和ntpd,当客户端与服务端时间差距太大时,客户端会不同步,所以,当本机的时间与服务器的机器相差太大时,需要手动调整,或者重启chrony服务,它会自动的去同步时间(在时间差距很大的时候可以生效)。

chrony

有的Linux版本没有安装chrony需要自己手动安装

chrony可以作为服务端可以去给其他服务器提供时间服务,也可以作为客户端去同步其他服务器的时间

服务端

我是使用ubuntu18.04安装的chrony,配置文件在/etc/chrony/chrony.conf,其他的系统版本可能有所不同

shell
~]# chronyd --version #版本
chronyd (chrony) version 3.2 (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 -DEBUG)

备份一下配置文件,以及查看默认配置文件,使用gpt3.5给出了注释

shell
~]# cp /etc/chrony/chrony.conf{,.bak}
[root@ceph-0 /etc/chrony]# cat chrony.conf.bak |grep -v "^#"  |grep -v "^$"
# 使用ntp.ubuntu.com作为时间服务器池,最多使用4个时间源来同步时间
pool ntp.ubuntu.com iburst maxsources 4

# 使用0.ubuntu.pool.ntp.org作为时间服务器池,最多使用1个时间源来同步时间
pool 0.ubuntu.pool.ntp.org iburst maxsources 1

# 使用1.ubuntu.pool.ntp.org作为时间服务器池,最多使用1个时间源来同步时间
pool 1.ubuntu.pool.ntp.org iburst maxsources 1

# 使用2.ubuntu.pool.ntp.org作为时间服务器池,最多使用2个时间源来同步时间
pool 2.ubuntu.pool.ntp.org iburst maxsources 2

# 指定用于认证的密钥文件的路径
keyfile /etc/chrony/chrony.keys

# 指定用于保存本地时钟漂移信息的文件路径
driftfile /var/lib/chrony/chrony.drift

# 指定Chrony日志文件的存储路径
logdir /var/log/chrony

# 设置最大更新偏差,用于控制时钟调整的大小
maxupdateskew 100.0

# 启用RTCSYNC功能,用于将系统时钟同步到硬件时钟
rtcsync

# 设置在系统启动时进行时间调整时的参数
# '1'表示在第一个时间同步时进行时间步进调整,'3'表示允许的最大步进调整为3秒
makestep 1 3

看了上面的配置文件,想要做的就是替换一下pool的服务器,这解释以下,pool和server的区别:

  1. pool:
    • pool用于指定一个时间服务器池,该池包含多个服务器。Chrony会从该池中选择一个或多个服务器来同步时间。
    • 时间服务器池通常由多个服务器组成,这些服务器位于不同的位置,并提供相同的时间服务。Chrony会根据需要从池中选择服务器,以提高时间同步的可靠性和准确性。
    • 例如,pool ntp.ubuntu.com指定了使用ntp.ubuntu.com作为时间服务器池,Chrony会从该池中选择服务器进行时间同步。
  2. server:
    • server用于指定单个时间服务器。Chrony会直接连接到指定的服务器进行时间同步。
    • pool不同,server指定的是一个具体的服务器,而不是一个服务器池。
    • 例如,server time.example.com指定了使用time.example.com作为单个时间服务器。

总的来说,pool用于指定一个包含多个服务器的时间服务器池,而server用于指定单个时间服务器。在选择使用哪种方式时,取决于你的需求以及网络环境的特点。

显而易见,我们想让一个服务器编程一个时间服务器,向内网机器同步时间,只需要修改pool指向的服务器为自己想要同步时间的服务器就行,或者可以不指定任何服务器,使用自己时钟时间,同步给其他机器

想要将这个内网机器同步给其他的机器,需要使用allow指令,可以使用 man chrony.conf 查看相关指令或者去这个网站查看相关信息,下面直接给出配置文件示例:

shell
cat <<EOF >/etc/chrony/chrony.conf
allow 10.0.0.0/24
server ntp.aliyun.com iburst
local stratum 10 
driftfile /var/lib/chrony/drift
rtcsync
makestep 10 3
maxupdateskew 100.0
keyfile /etc/chrony/chrony.keys
logchange 0.5
logdir /var/log/chrony
EOF
systemctl restart chronyd

下面显示的这些信息,具体解释在这个文章中,要是需要,可以去查看,这些信息是上游服务器的相关信息

shell
[root@ceph-0 /etc/chrony]# chronyc sources 
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* 203.107.6.88                  2   6    77    20   +386us[ +188us] +/-   25ms

客户端

配置客户端,只需要将server指向服务端的ip,然后重启chronyd就行

注意,这里我看到一个参数,server指令上的配置maxpoll,指定在一般情况下,客户端多久从服务器同步一次数据

shell
server 10.0.0.80 ibrust maxpoll 6 #最小值是6,也就是64秒