赞
踩
我可气死了,因为我这是在内网环境搭建的ntp嘛,所以真的搭建起来一堆问题 费我一天时间了,各种百度找文献,没有一篇文章是说内网环境的,而且网上文章的搭建服务真的超级简单,也不会出现不同步这种情况,我这各种照着网上的方法来弄,就是不同步。。。
网上不同步的的原因,翻来覆去就是那几种情况,可是我这都排除了。。。唉心累。
但是 网上没人发布内网环境搭建chronyd服务,我这不就发布了嘛~ 过程可谓一波三折了,但是不要紧,反正我最终各种尝试,弄出了真正可行的内网搭建ntp服务方法,你如果内网搭建遇到问题,直接留言,一起沟通学习。
另外,你在网上其他地方看的chrony,是不是感觉都很简单? 可是我用了4.7万字数
来做说明,你觉得这个还简不简单?
NTP 是 Network Time Protocol 的缩写,也即 网络时间协议,一种在 Linux 上保持准确时间的协议,它和网络上可用的 NTP 服务器保持着时钟同步
在 Linux 中,保持准确的日期和时间至关重要,因为许多服务(如 cron 作业和脚本)依赖于准确的时间才能得到预期的结果
用于同步日期和时间的 ntpd 服务,在新的Linux发行版 ( centos8、Ubuntu 20.04、Fedora 30 ) 中已经废弃了,取而代之的是 chrony
【低版本这个方法也是能用的】
当然,选择 chrony 是有原因的,相比 ntpd , 它有如下的优点:
1、时间同步的速度比 ntpd 更快
2、chrony 很好的处理了同步延迟以及网络延迟
3、即使出现网络降级,chrony 仍然能正常工作
4、本地机器可以作为时间服务器,其他机器从这台服务器上同步时间
所以我下面用服务是chrony而非ntp,但实现原理是一样的哈。
集群中节点之间需要时间同步,Chronyd不依赖外部的时间服务NTP,在内部搭建时间服务器。
Chrony是网络时间协议(NTP)的一种实现,是一个类Unix系统上NTP客户端和服务器的替代品。Chrony客户端可以与NTP servers同步系统时间,也可以与参考时钟(例如:GPS接受设备)进行同步,还与手动输入的时间进行同步。同样Chrony也可以作为一个NTPv4(RFC 5905) server为其他计算机提供时间同步服务。
Chrony 可以更快的同步系统时钟,具有更好的时钟准确度,并且它对于那些不是一直在线的系统很有帮助。Chrony在Internet上同步的两台机器之间的典型精度在几毫秒内,而在LAN上的机器之间的精度在几十微秒内。chronyd 更小、更节能,它占用更少的内存且仅当需要时它才唤醒 CPU。即使网络拥塞较长时间,它也能很好地运行。它支持 Linux 上的硬件时间戳,允许在本地网络进行极其准确的同步。Chrony 是自由开源的,并且支持 GNU/Linux 和 BSD 衍生版(比如 FreeBSD、NetBSD)、macOS 和 Solaris 等。
chrony 是由 守护进程 chronyd 以及 命令行工具 chronyc 组成的,具体如下图
chronyd 在后台静默运行并通过 123
端口与时间服务器定时同步时间,默认的配置文件是 /etc/chrony.conf
chronyc 通过 323
端口与 chronyd 交互,可监控 chronyd 的性能并在运行时更改各种操作参数
chronyc 通过下面的方式访问 chronyd
chronyd和ntp一样,端口都是udp
[root@yum-centos-dmz ~]# netstat -nulp | grep chro
udp 0 0 0.0.0.0:123 0.0.0.0:* 8938/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 8938/chronyd
udp6 0 0 ::1:323 :::* 8938/chronyd
[root@yum-centos-dmz ~]#
/var/run/chrony/chronyd.sock
, 如果失败(常见的原因是使用非 root 用户运行 chronyc ),将尝试通过 127.0.0.1 访问 chronydyum install chrony -y
#查询 chronyd 服务状态
systemctl status chronyd
#启动 chronyd 服务
systemctl start chronyd
#关闭 chronyd 服务
systemctl stop chronyd
#重启 chronyd 服务
systemctl restart chronyd
#设置 chronyd 服务开机自启
systemctl enable chronyd
systemctl daemon-reload
另外,启动 chronyd 服务的时候如果出现下面截图中的错误,需要安装或者升级 libsepol
、policycoreutils-python
【最小化安装的系统可能会出现这种问题】
查看日志或者执行journalctl -xe
均可查看报错内容~
具体的问题说明详见Red Hat Bugzilla – Bug 1592775
解决方法 安装 libsepol 和 policycoreutils-python
yum install libsepol policycoreutils-python -y
/etc/chrony.conf
,其中可配置项很多,这里介绍一些常用的配置项 | 说明 |
---|---|
server | 客户端需找哪个服务器询问当前时间 |
pool | 同 server 配置项 |
driftfile | 本地时钟和服务器时钟的预估漂移保存到哪个文件中 |
makestep | 纠正客户端时间的步进参数 |
rtcsync | 是否允许内核同步实时时钟 |
allow | 允许客户端通过内网地址同步时钟 |
local stratum 10 | 开启,即使server指令种时间服务器不可用,也允许将本地时间作为标准时间授予其他客户端 |
logdir | 日志目录 |
chronyc sourcestats -v
【-v是列出详细,可以不要】chronyc tracking
【配置的时候默认是自动校准的,一般用于服务端修改时间了,客户端立即校准用】 timedatectl set-ntp yes
【默认是启用的,timedatectl命令可以查看状态】chronyc clients
timedatectl
timedatectl set-local-rtc 1/0
timedatectl set-local-rtc 1
timedatectl set-local-rtc 0
timedatectl set-ntp yes
timedatectl set-ntp true/flase
chronyc tracking
[root@yum-centos-dmz ~]# timedatectl
Local time: Wed 2022-07-06 09:53:00 CST
Universal time: Wed 2022-07-06 01:53:00 UTC
RTC time: Wed 2022-07-06 01:44:58
Time zone: Asia/Shanghai (CST, +0800) # 当前zone【我们要 +8 才正常】 最后timedatectl命令有说如何定义
NTP enabled: yes # ntp是否启用
NTP synchronized: yes # 是否完成过一次ntp同步
RTC in local TZ: no #是否启用rtc时间【我们为cst+8,所以这为no才是正常的】
DST active: n/a
[root@yum-centos-dmz ~]#
[root@ccx_server128 ~]# date 2022年 03月 01日 星期二 01:10:04 CST [root@ccx_server128 ~]# timedatectl set-time "2022-02-28 17:10:34" Failed to set time: Automatic time synchronization is enabled [root@ccx_server128 ~]# timedatectl Local time: 二 2022-03-01 01:13:18 CST Universal time: 一 2022-02-28 17:13:18 UTC RTC time: 一 2022-02-28 17:13:18 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a [root@ccx_server128 ~]# timedatectl set-time "2022-06-28 17:10:34" Failed to set time: Automatic time synchronization is enabled [root@ccx_server128 ~]# timedatectl set-ntp no [root@ccx_server128 ~]# timedatectl set-time "2022-02-28 17:13:55" [root@ccx_server128 ~]# date 2022年 02月 28日 星期一 17:13:57 CST [root@ccx_server128 ~]# timedatectl Local time: 一 2022-02-28 17:14:02 CST Universal time: 一 2022-02-28 09:14:02 UTC RTC time: 一 2022-02-28 09:14:02 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a [root@ccx_server128 ~]# timedatectl set-ntp yes [root@ccx_server128 ~]# # 然后我去客户端立即获取。。。多香啊 [root@ccx_server129 ~]# date Tue Mar 1 01:15:13 CST 2022 [root@ccx_server129 ~]# [root@ccx_server129 ~]# ntpdate 192.168.59.128 28 Feb 17:15:37 ntpdate[46458]: step time server 192.168.59.128 offset -28789.784156 sec [root@ccx_server129 ~]# date Mon Feb 28 17:15:39 CST 2022 [root@ccx_server129 ~]#
^*
了,然后重启一下又恢复正常,所以,可能这个netdate和重启服务效果一样吧。[root@ccx_server129 ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? ccx_server128 0 6 377 - +0ns[ +0ns] +/- 0ns [root@ccx_server129 ~]# systemctl restart chronyd #重启了 [root@ccx_server129 ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? ccx_server128 10 6 1 2 -3874ns[-3874ns] +/- 106us [root@ccx_server129 ~]# chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ccx_server128 10 6 7 1 +1884ns[-7831ns] +/- 99us [root@ccx_server129 ~]#
守护进程 chronyd 既可作为客户端 与 服务器同步时间,又可作为一个服务器,接受其他客户端同步时间的请求
下面以配置局域网时间服务器为例来说明 chronyd 的客户端和服务器的配置,虚拟机规划如下:
用途 | ip | 系统 | 配置前系统时间 |
---|---|---|---|
服务端ip | 192.168.59.128 | CentOS Linux release 7.6.1810 (Core) | 2022年 02月 28日 星期一 19:41:38 CST |
客户端ip | 192.168.59.129 | CentOS Linux release 7.6.1810 (Core) | Mon Feb 28 06:46:54 EST 2022 |
UTC,+0
,则需要修改时区[root@test21 ~]# timedatectl
Local time: Wed 2022-07-06 06:50:32 UTC
Universal time: Wed 2022-07-06 06:50:32 UTC
RTC time: Wed 2022-07-06 06:50:32
Time zone: UTC (UTC, +0000)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@test21 ~]#
timedatectl set-timezone Asia/Shanghai
,修改后正确信息如下[root@test21 ~]# timedatectl set-timezone Asia/Shanghai
[root@test21 ~]# timedatectl
Local time: Wed 2022-07-06 14:54:56 CST
Universal time: Wed 2022-07-06 06:54:56 UTC
RTC time: Wed 2022-07-06 06:54:56
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
[root@test21 ~]#
[root@ccx_server128 ~]# yum install -y chrony
[root@ccx_server128 ~]#
[root@ccx_server128 ~]# systemctl enable chronyd --now
[root@ccx_server128 ~]# systemctl is-active chronyd
active
[root@ccx_server128 ~]#
安装 chrony 之后,默认的配置是客户端的启动配置的,要想作为一个时间服务器来运行的话, 需要在配置中增加 allow
配置项,它表示允许客户端通过该地址和服务器同步时间
默认配置文件:/etc/chrony.conf
另外,时间服务器的时间也需要从网络上其他的时间服务器进行同步,这里直接用默认的即可,具体的配置如下
【其实我没做啥修改,就把allow取消注释,然后加上服务端的ip即可】
我给没注释的代码都加上说明了,可以看看哦。
[root@ccx_server128 ~]# cat /etc/chrony.conf # Use public servers from the pool.ntp.org project. # 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 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #表示与本机IP同步时间,其他server注释或删除 #注:内网环境必须这么做,否则其他会无法同步成功。 如果通公网,可以使用公网的服务器时间 server 127.127.1.0 # Record the rate at which the system clock gains/losses time. # 为了在下次启动时稳定的同步,系统时钟的预估漂移需要保存到指定的文件中 driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. # 如果系统时钟由于某种原因与启动后的服务器时间相差甚远,允许 chronyd # 通过步进而不是回转来快速纠正它,这个过程将花费很长时间 makestep 1.0 3 # Enable kernel synchronization of the real-time clock (RTC). # 为了使客户端实时时钟接近服务器的时钟,以便下次时钟启动时更接近真实的时间 # 增加了一种 rtcsync 模式,该模式下,系统时间会定期的拷贝到实时时钟里 rtcsync # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # the system clock. #minsources 2 # Allow NTP client access from local network. # 允许指定网络的主机同步时间,不指定就是拒绝所有,且默认不开启。 # 如果要允许所有则: allow 0.0.0.0/24 #如下,允许一个网段,如果有多个网段,则添加多个allow allow 192.168.59.0/24 #allow ... # Serve time even if not synchronized to a time source. # 不去同步任何人的时间,时间同步服务级别 # 开启后,即使server指令中时间服务器不可用,也允许将本地时间作为标准时间授予其他客户端 #注:内网环境必须开,否则其他虚拟机无法同步时间 local stratum 10 # Specify file containing keys for NTP authentication. #keyfile /etc/chrony.keys # Specify directory for log files. # chrony日志存放路径 logdir /var/log/chrony # Select which information is logged. #log measurements statistics tracking [root@ccx_server128 ~]#
[root@ccx_server128 ~]# netstat -nulp | grep chro
udp 0 0 0.0.0.0:123 0.0.0.0:* 11048/chronyd
udp 0 0 127.0.0.1:323 0.0.0.0:* 11048/chronyd
udp6 0 0 ::1:323 :::* 11048/chronyd
[root@ccx_server128 ~]#
systemctl restart chronyd
】[root@ccx_server128 ~]# ip a | grep 128
inet6 ::1/128 scope host
inet 192.168.59.128/24 brd 192.168.59.255 scope global noprefixroute ens33
[root@ccx_server128 ~]# systemctl is-active firewalld.service
active
[root@ccx_server128 ~]# systemctl stop firewalld.service
[root@ccx_server128 ~]#
[root@ccx_server128 ~]# systemctl is-active firewalld.service
inactive
[root@ccx_server128 ~]#
[root@ccx_server128 ~]# firewall-cmd --permanent --add-port=123/udp
success
[root@ccx_server128 ~]# firewall-cmd --reload
success
[root@ccx_server128 ~]# firewall-cmd --permanent --remove-port=123/udp
success
[root@ccx_server128 ~]# firewall-cmd --reload
success
[root@ccx_server128 ~]# systemctl restart chronyd
[root@ccx_server128 ~]# systemctl is-active chronyd
active
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。