在ubuntu上使用chrony进行系统时间同步的配置方法

 1.为什么需要时间同步

在了解这个问题前,需要先了解RTC、CST、UTC这些时间概念。

(1) RTC

在linux的系统中我们还可以看见一个 RTC时间,这个时间一般叫做硬件时间。也就是由计算机主板上的专门时钟芯片硬件产生的滴答信号计时得到。

(2)UTC

世界协调时间,UTC是世界上不同国家用来统一时间的标准。可以理解为我们地球的标准时间,基于SI标准的原子时间,由精度非常高的铯原子钟产生的滴答信号计时得到。UTC也就是零时区的时间。

(3)CST

关于CST有多重含有,但简单点理解就是各个国家所在时区的具体时间。

Central Standard Time (USA) UT-6:00(美国cst时间:零区时减6个小时)

Central Standard Time (Australia) UT+9:30(澳大利亚cst:加9个半小时)

China Standard Time UT+8:00(中国cst:加8个小时)

Cuba Standard Time UT-4:00  (古巴cst:减4个小时)
比如当UTC时间为0点时,中国的北京时间处于东8时区,因此中国CST时间为8点(UTC时间+8小时)。

现在就可以解释为什么需要时间同步了,因为RTC采用主板上的专门时钟芯片硬件计时,一方面是每个人电脑上的RTC起始计时时间都不一样,另一方面RTC计时精度误差较大。为了统一大家的时间,就需要让RTC在一段时间内去与UTC做个同步。可以理解为每天晚上8点整中央电视台在报时的时候,我们每个人将自己手表的时间同步调准。只不过计算机中的这个同步调准的周期要频繁很多,比如几分钟一次。

虽然RTC与UTC同步能解决时间统一的问题,但是如果世界上所有地方的人都使用UTC时间的话可能在生活上并不方便。最简答的一个例子就是,每个地区太阳升起的时间将不一样,对人们的依靠日出而作日落而息的生活习惯将有很大影响。因此需要根据UTC时间和地区所在的时区,将UTC换算成具体时区的时间CST,然后让RTC与CST进行同步。

2.常用时间同步工具

时间同步工具,其实就是在计算机之间执行时间同步请求的一个软件。遵循一套协议,让本地计算机向远程提供时间同步功能的服务器发起同步请求,然后远程提供时间同步功能的服务器将同步时间值返回给本地计算机,然后本地计算机利用服务器返回的时间值经过一定的计算得到本地时间。

目前比较流行的时间同步工具有ntp和chrony,ntp采用123/UDP端口通信,chrony采用323/UDP端口通信。由于ntp比较旧了,这里就采用chrony来进行时间同步。在ubuntu系统安装chrony,只需要运行下面这句命令:

sudo apt install chrony

chrony分为服务端程序chronyd和客户端程序chronyc,我们既可以用chronyd为其他计算机提供时间同步服务,也可以利用chronyc向其他时间同步服务器发起时间同步请求。下面将依次介绍chrony服务端和chrony客户端的配置方法。

3.配置chrony服务端

如果要让我们的chrony服务端能为互联网的所有计算机提供时间同步服务,需要将这个chrony服务端运行在公网服务器上,通常选用云服务器(我这里选的是一台阿里云服务器)。由于chrony采用323/UDP端口通信,因此需要先去我们的服务器控制台将进入服务器的323/UDP端口权限打开。

然后进入ubuntu服务器的/etc/chrony/chrony.conf对chrony服务端进行配置,这里主要关注一下几个参数:

  • server:用于指定外部时间同步服务器源地址,可以添加任意多个源地址。
  • pool:用于指定外部时间同步服务器池。
  • allow:允许特定IP的客户端计算机向本chrony服务器发送时间同步请求,如果设置成allow all表示允许所有网段的客户端计算机发送请求过来。
  • local stratum:允许在外部时间同步服务器不可用时,使用服务器本地时间作为返回值返回给发起请求的客户端计算机。

这里server源地址可以直接用阿里云默认提供的源,如下所示:

server ntp.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp1.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp10.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp11.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp12.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp2.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp2.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp3.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp3.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp4.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp4.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp5.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp5.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp6.aliyun.com minpoll 4 maxpoll 10 iburst
server ntp6.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp7.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp8.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst
server ntp9.cloud.aliyuncs.com minpoll 4 maxpoll 10 iburst

为了方便测试,这里allow配置成allow all,也就是允许所有网段的客户端发送请求过来:

allow all

这里设置local stratum 10,允许在外部时间同步服务器不可用时,使用服务器本地时间作为返回值返回给发起请求的客户端计算机。

local stratum 10

对chrony服务端进行启动、停止、状态检查的方法,如下:

#启动chrony服务
service chrony start

#重动chrony服务
service chrony restart

#查看chrony服务状态
service chrony status

#停止chrony服务
service chrony stop

4.配置chrony客户端

对应ubuntu系统客户端,进入ubuntu服务器的/etc/chrony/chrony.conf对chrony客户端进行配置。配置参数与上面chrony服务端的类似,只不过客户端不需要对外提供时间同步服务而只去请求数据,因此allow参数可以不用。

这里server源地址指定为上面我们chrony服务端的IP地址(具体IP地址去自己的云服务器控制台查看一下就知道了),大家可以将下面my_chrony_test.aliyuncs.com替换成自己的服务器地址,如下所示:

server my_chrony_test.aliyuncs.com minpoll 4 maxpoll 10 iburst

对chrony客户端进行启动、停止、状态检查的方法与上面服务端一样,如下:

#启动chrony客户端
service chrony start

#重动chronyd客户端
service chrony restart

#查看chrony客户端
service chrony status

#停止chrony客户端
service chrony stop

然后就是chrony客户端上的一些常用命令:

#查看可用的时间同步源
chronyc sources -v

#查看时间同步源的状态
chronyc sourcestats -v

#对客户端系统时间进行强制同步
chronyc -a makestep

使用timedatectl管理本地系统时间:

#修改本地系统时间
timedatectl set-time "2022-03-01 10:01:01"

#查看时区列表
timedatectl list-timezones
timedatectl list-timezones |grep Asia/S

#修改时区
timedatectl set-timezone Asia/Shanghai

#让RTC去和UTC进行同步
timedatectl set-local-rtc 0
#让RTC去和本地系统时间CST进行同步(不推荐)
timedatectl set-local-rtc 1

#启用向外部时间同步服务器发起同步的功能
timedatectl set-ntp yes
#关闭向外部时间同步服务器发起同步的功能
timedatectl set-ntp no
 

5.总结

假设本地客户端计算机叫A,我们的服务器计算机叫B,外网时间同步源计算机叫C,时间同步的过程实际上就是A->B->C->...

A向B发起时间同步请求,让A与B的时间保持一致;

B为了维护自身的系统时间,以同样的方法要向C发起时间同步请求,让B与C的时间保持一致;

C可能还要进一步与其他外网时间同步源保持同步,总之就是时间同步时一层一层进行的。

猜你喜欢

转载自blog.csdn.net/m0_68732180/article/details/130251743