分布式数据库授时服务选择 - 从NTP到Chrony
当前很多数据库并不像之前的Oracle、MySQL一样只通过单独的一台机器对外提供服务,很多数据库是分布式数据库产品,是一个集群软件,通过横向扩展机器来提高整体性能,实现企业去O的需求。
分布式数据库对各个节点之间的时间同步性有要求。比如OceanBase在技术上要求所有节点之间的时间误差需控制在 50ms 以内。实际生产环境中为了稳定性和性能考虑,建议时间误差控制在 10ms 以内;Greenplum的集群也要求时间误差不能太大,否则并行入库gpfdist到表中时,产生的时间戳会有时间错乱感。
授时服务通常只要节点配置时间同步服务器跟公网时间保持同步即可。实际上在企业机房里,企业会有统一的时间服务器跟机房提供的时间服务器或者直接跟公网时间服务器同步。
1. Chrony是什么?Chrony是网络时间协议(NTP)的另一种实现,与ntpd相比,它能够更快地同步系统时钟并具有更好的准确性。Chrony还可以对时钟频率的快速变化提供更好的响应,这对于时钟不稳定或无法保持时钟频率恒定的节能技术的虚拟机很有用。
除NTP改进外,Red Hat Enterprise Linux 7还包括对IEEE 1588版本2规范精确时间协议(PTP)的支持。尽管与网络时间协议(NTP)相似,但PTP的主要优点是各种网络接口卡(NIC)和网络交换机中的硬件支持。与硬件支持一起使用时,PTP的精度可达到亚微秒,这比NTP通常可获得的精度要好得多。而且,通过使用基于GPS的时间源,PTP甚至可以用于高度精确地同步不同的网络。
2. 选择使用Chrony而不是NTP由于在RHEL 7中,ntpd被chronyd替换为默认网络时间协议守护程序,所以我们不必再次安装ntpd,采用Chrony即可,同步时间和日期的基本配置存储在文件 /etc/chrony.conf中 ;对于需要运行NTP服务的客户,ntpd仍包含在yum存储库中,可以自行按需安装;Chrony是与网络时间协议守护程序(ntpd)不同的网络时间协议(NTP)的实现,与ntpd相比,它可以更快地同步系统时钟,并且精度更高。
2.1 Chrony的好处包括:- 更快的同步仅需数分钟而不是数小时,以最大程度地减少时间和频率误差,这对于一天24小时不停运行的台式机或系统很有用。
- 更好地响应时钟频率的快速变化,这对于时钟不稳定的虚拟机或无法使时钟频率保持恒定的节能技术很有用。
- 初始同步后,它将不再计时,以免影响需要系统时间单调的应用程序。
- 处理临时的非对称延迟时,例如当链接被大量下载饱和时,它具有更好的稳定性。
- 不需要定期轮询服务器,因此具有间歇性网络连接的系统仍可以快速同步时钟。
systemctl status ntpd
Unit ntpd.service could not be found.
如果出现上述提示信息,表示没有使用 ntpd,您可继续进行后续步骤。
如果提示有 ntpd 服务,则需卸载 ntpd 软件。
3.2 安装 chrony 服务这里采用 YUM 安装方法。您也可以下载相应的 RPM 包安装。
yum -y install chrony
如果系统已经默认安装chrony,yum会直接提示,或者您可以提前使用ps命令查询后台是否启动chrony服务:
ps -ef | grep chronyd
3.3 chrony 配置说明
chrony 服务守护进程名为 chronyd,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。 chrony 的主配置文件为 /etc/chrony.conf 。配置方法如下:
vi /etc/chrony.conf
# server 后面跟时间同步服务器
# 使用 pool.ntp.org 项目中的公共服务器。按 server 配置,理论上您想添加多少时间服务器都可以。
# 或者使用 阿里云的 ntp 服务器
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
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 注释
#server 127.127.1.0
# 根据实际时间计算出服务器增减时间的比率,然后记录到一个文件中,在系统重启后为系统做出最佳时间补偿调整。
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
# 即使没有同步到时间源,也要服务时间
local stratum 10
# 指定包含 NTP 验证密钥的文件。
#keyfile /etc/chrony.keys
# 指定日志文件的目录。
logdir /var/log/chrony
# Select which information is logged.
#log measurements statistics tracking
最简单的配置文件如下:
server 127.127.1.0
allow 172.20.0.0/16
local stratum 10
常用命令:
使用 chrony 时间服务是为了保证分布式数据库集群各个节点时间尽可能同步,下面这些命令供参考。具体使用请查看 chrony 官方使用说明:
查看时间同步活动
chronyc activity
查看时间服务器
chronyc sources
查看同步状态
chronyc sources -v
校准时间服务器:
chronyc tracking
您可以使用 clockdiff 命令检查本机跟目标机器的时间同步误差,以该命令结果为准。机器之间的误差主要关注delta=部分即可。
4.写在最后至此为止,本次分享结束,欢迎大家添加博主交流。
最后,如果觉得文章对您有帮助,请给博主点赞、收藏、关注,博主会不断推出更多优质的文章。