Chrony 设置服务器集群系统时间同步

Chrony 设置服务器集群系统时间同步

RHEL7/CentOS7 新的 NTP 对时服务 Chrony

什么是Chrony?

Chrony 是一个开源的自由软件,CentOS7/RHEL7 操作系统,已经是默认服务,默认配置文件在 /etc/chrony.conf 它能保持系统时间与时间服务器(NTP)同步,让时间始终保持同步。相对于 NTP 时间同步软件,占据很大优势。其用法也很简单。Chrony 应用本身已经有几年了,它其实是网络时间协议的 (NTP) 的另一种实现。一直以来众多发行版里标配的都是 ntpd 对时服务,自 CentOS7/RHEL7 起,Chrony 做为了发行版里的标配服务,不过老的 ntpd 服务依旧在 CentOS7/RHEL7 里可以找到。

Chrony 两个核心组件

Chrony 可以同时做为 NTP 服务的客户端和服务端。默认安装完后有两个程序 chronydchronyc

chronyd(主程序文件)
是守护 daemon 进程程序,主要用于调整内核中运行的系统时间和时间服务器同步。它确定计算机增减时间的比率,并对此进行调整补偿。

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

OS环境

10.28.204.65 客户端
10.28.204.66 服务端
CentOS Linux release 7.6.1810 (Core)

安装 Chrony

系统默认已经安装,如未安装,请执行以下命令安装

1
yum -y install chrony

启动并加入开机自启动

1
2
3
4
5
6
7
# 启动服务
systemctl start chronyd.service
systemctl enable chronyd.service
systemctl -l status chronyd.service
systemctl stop chronyd.service
# 设置开机自启,默认是enable的
systemctl restart chronyd.service

防火墙 Firewalld 设置

因 NTP 使用 123/UDP 端口协议,所以允许 NTP 服务即可

1
2
3
firewall-cmd --add-service=ntp --permanent
firewall-cmd --add-port=123/udp --permanent
firewall-cmd --reload

配置 Chrony

以下是系统默认配置文件,对此加以说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
vim /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

server 0.cn.pool.ntp.org iburst minpoll 4 maxpoll 10
server 1.cn.pool.ntp.org iburst minpoll 4 maxpoll 10
server 2.cn.pool.ntp.org iburst minpoll 4 maxpoll 10
server 3.cn.pool.ntp.org iburst minpoll 4 maxpoll 10

server ntp1.aliyun.com iburst minpoll 4 maxpoll 10
server ntp2.aliyun.com iburst minpoll 4 maxpoll 10
server ntp3.aliyun.com iburst minpoll 4 maxpoll 10
server ntp4.aliyun.com iburst minpoll 4 maxpoll 10
server ntp5.aliyun.com iburst minpoll 4 maxpoll 10
server ntp6.aliyun.com iburst minpoll 4 maxpoll 10

# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
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.0.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

设置时区

查看当前系统时区

1
2
3
4
5
6
7
8
9
timedatectl
Local time: Fri 2018-2-29 13:31:04 CST
Universal time: Fri 2018-2-29 05:31:04 UTC
RTC time: Fri 2018-2-29 08:17:20
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

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

查看所有可用的时区

1
timedatectl list-timezones

筛选式查看在亚洲 S 开的上海可用时区

1
2
3
4
5
6
7
timedatectl list-timezones |  grep  -E "Asia/S.*"
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk

设置当前系统为 Asia/Shanghai 上海时区

1
timedatectl set-timezone Asia/Shanghai

设置完时区后,强制同步下系统时钟

1
2
chronyc -a makestep
200 OK

服务器集群之间的系统时间同步

在生产环境中,其网络都是内网结构,那么内网如何保证服务器之间的时间同步呢?其实这个问题很简单,只需要搭建一台内网时间服务器,然后让所有计算机都到服务端(10.28.204.66)去同步时间即可。

具体操作:在服务端注释以下内容

1
2
3
4
#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

并添加以下内容:表示与本机同步时间

1
server 10.28.204.66 iburst

这样我们需求的一台内网时间服务器已经配置完毕。
同样在客户端注释掉其他 server,并在客户端 10.28.204.65 添加以下

1
server 10.28.204.66 iburst

到此已经完成系统时间的同步。如有多台机器,操作也是如此。

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 检查 时间同步 详细源状态
chronyc sources
chronyc sources -v

# 查看 时间同步源服务器 状态
chronyc sourcestats
chronyc sourcestats -v

# 设置硬件时间
# 硬件时间默认为UTC
timedatectl set-local-rtc 1

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

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

# 其他时间设置相关指令
# 查看日期时间、时区及NTP状态
timedatectl
# 查看时区列表
timedatectl list-timezones
# 修改时区
timedatectl set-timezone Asia/Shanghai
# 修改日期时间
timedatectl set-time "2015-01-21 11:50:00" # 可以只修改其中一个
# 开启NTP
timedatectl set-ntp true/flase

还有另一个有趣的命令 system-config-date,在 rhel7/centos7 里也给了我们一个可以图形化配置chrony 服务的工具 。

1
yum -y install system-config-date

安装完成后运行 system-config-date 命令,界面如下

system-config-date.png

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

Chrony的优势

Chrony 的优势包括:

  • 更快的同步只需要数分钟而非数小时时间,从而最大程度减少了时间和频率误差,这对于并非全天 24 小时运行的台式计算机或系统而言非常有用。
  • 能够更好地响应时钟频率的快速变化,这对于具备不稳定时钟的虚拟机或导致时钟频率发生变化的节能技术而言非常有用。
  • 在初始同步后,它不会停止时钟,以防对需要系统时间保持单调的应用程序造成影响。
  • 在应对临时非对称延迟时(例如,在大规模下载造成链接饱和时)提供了更好的稳定性。
  • 无需对服务器进行定期轮询,因此具备间歇性网络连接的系统仍然可以快速同步时钟。

参考文档

https://renwole.com/archives/1032
https://www.jianshu.com/p/dfdedfb9c59f
https://my.oschina.net/91devel/blog/2878266
http://www.pool.ntp.org/zone/asia
http://www.pool.ntp.org/zone/cn

---------------- The End ----------------
0%