好的,在 Linux 集群中配置时间同步服务是确保所有节点协调一致、避免因时间差异导致各种诡异问题的关键步骤。下面我将为您提供一个详细、分步的指南。
目前,最主流和推荐的工具是 Chrony,它比传统的 NTP 更适合现代系统,尤其是在动态环境(如虚拟机、云环境)中,它能更快地同步并更好地处理时钟漂移。
方案一:使用 Chrony(推荐)
这个方案通常包含一个主节点(作为集群的时间源,也可以从外部服务器同步)和多个从节点(从主节点同步时间)。
环境假设
- 主节点 IP: 192.168.1.10
- 从节点 IP: 192.168.1.11, 192.168.1.12, …
- 集群网段: 192.168.1.0/24
步骤 1:在所有节点上安装 Chrony
首先,在集群的所有节点上安装 Chrony 软件包。
对于 CentOS / RHEL / Rocky Linux / AlmaLinux:
sudo yum install -y chrony # 对于 CentOS 7/RHEL 7
sudo dnf install -y chrony # 对于 CentOS 8+/RHEL 8+/Rocky/AlmaLinux
对于 Ubuntu / Debian:
sudo apt update
sudo apt install -y chrony
步骤 2:配置主节点(时间源服务器)
-
编辑 Chrony 配置文件:
sudo vim /etc/chrony.conf -
修改配置(关键部分):
- 允许集群网段访问:找到
allow指令,添加你的集群网段。# 允许 192.168.1.0/24 网段的所有主机从此节点同步时间 allow 192.168.1.0/24 - 配置上游时间服务器(可选但推荐):注释掉原有的
pool行,添加更稳定的源。中国的用户可以使用阿里云或腾讯云的 NTP 服务器。# 使用阿里云 NTP 服务器 server ntp.aliyun.com iburst server time1.aliyun.com iburst # 或者使用腾讯云 NTP 服务器 # server ntp.tencent.com iburst # iburst 选项表示如果服务器无响应,会发送一串数据包加快初始同步 - 启用本地时间源(可选):如果主节点无法访问外网,你可以让它使用自己的本地时钟作为源(不推荐用于需要绝对精确时间的生产环境)。取消注释以下行:
这会将本地时钟设置为第 10 层(stratum 10)源,只有在完全隔离的网络中才使用。# 使用本地硬件时钟作为备份 # local stratum 10
- 允许集群网段访问:找到
-
保存并退出编辑器。
-
启动并启用 Chrony 服务:
sudo systemctl enable chronyd sudo systemctl restart chronyd -
验证主节点同步状态:
chronyc sources -v输出应该显示
^*或^+在你配置的外部服务器(如ntp.aliyun.com)旁边,表示已成功同步。
步骤 3:配置从节点(客户端)
-
编辑 Chrony 配置文件:
sudo vim /etc/chrony.conf -
修改配置:
- 注释掉默认的 pool 服务器:在前面加上
#。 - 添加主节点作为时间源:
server 192.168.1.10 iburst - (可选)允许其他节点从此节点同步:如果你希望集群内节点间可以互相冗余,也可以添加
allow指令,但通常从节点不需要。
- 注释掉默认的 pool 服务器:在前面加上
-
保存并退出编辑器。
-
启动并启用 Chrony 服务:
sudo systemctl enable chronyd # 或 chrony on Ubuntu/Debian sudo systemctl restart chronyd # 或 chrony on Ubuntu/Debian注意:在较新的 Ubuntu/Debian 上,服务名可能就是
chrony。可以用systemctl list-units | grep chrony确认。
步骤 4:验证所有节点的时间同步
在所有从节点上执行以下命令:
-
检查同步源:
chronyc sources -v输出应显示
^*或^+在你的主节点 IP (192.168.1.10) 旁边。^*表示当前正在使用的同步源。^+表示可选的候选同步源。
-
检查同步状态:
chronyc tracking查看
Last offset和Root delay等值,它们应该很小(通常是几毫秒或几十毫秒),表示同步良好。 -
检查节点间时间差:
你可以在主节点和从节点上分别执行date命令,观察输出时间是否一致。对于更精确的检查,可以使用:# 在一台机器上安装后,可以比较两台机器的时间差 # 需要先安装 sudo apt install ntpdate 或 sudo yum install ntpdate ntpdate -q 192.168.1.10
方案二:使用 NTP(传统方式)
虽然 Chrony 是趋势,但有些旧系统或特定环境可能仍在使用传统的 ntpd。
-
安装 NTP:
CentOS/RHEL:sudo yum install ntpUbuntu/Debian:
sudo apt install ntp -
配置主节点 (
/etc/ntp.conf):# 允许集群网段 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # 配置上游服务器 server ntp.aliyun.com iburst server time1.aliyun.com iburst -
配置从节点 (
/etc/ntp.conf):server 192.168.1.10 iburst -
启动服务:
sudo systemctl enable ntpd sudo systemctl restart ntpd -
验证:
ntpq -p
防火墙配置
确保主节点的 UDP 123 端口对从节点开放。
对于 firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="udp" port="123" accept'
sudo firewall-cmd --reload
对于 ufw (Ubuntu/Debian):
sudo ufw allow from 192.168.1.0/24 to any port 123 proto udp
总结
| 项目 | 推荐方案 (Chrony) | 传统方案 (NTP) |
|---|---|---|
| 适用场景 | 现代系统,动态环境(云、虚拟机) | 旧系统,稳定物理环境 |
| 同步速度 | 快,能快速收敛时间差 | 慢 |
| 配置易用性 | 配置文件简单直观 | 稍复杂 |
| 资源占用 | 低 | 相对较高 |
对于新建的 Linux 集群,强烈建议使用 Chrony。它更高效、更精准,并且是许多现代 Linux 发行版的默认时间同步工具。
按照上述步骤操作,你的 Linux 集群应该能够实现完美的时间同步。


被折叠的 条评论
为什么被折叠?



