Step4—时间同步(Chrony)
# 一、集群间的时间同步(Chrony 配置指南) ⏰
在 分布式系统 和 多节点集群 运行环境中,时间同步 是一个至关重要的任务。时间不同步会导致:
- 日志时间错乱 📜:不同节点的日志记录时间不一致,影响排查问题。
- 分布式任务调度异常 ⏳:如 Hadoop、Spark、Flink 等大数据组件依赖时间戳同步执行任务。
- 数据库事务不一致 🛠️:数据同步和一致性要求精确的时间同步,否则可能导致数据丢失或事务失败。
- 身份认证失败 🔐:某些安全协议(如 Kerberos)依赖精确的时间,否则身份验证可能无法通过。
很多 老旧的系统 仍然使用 ntpd(Network Time Protocol Daemon) 进行时间同步,但现代系统推荐使用 Chrony,它相比 ntpd 同步更快、容错性更强、占用资源更少。
# 1. 为什么选择 Chrony? ⚖️
Chrony 是 NTP 协议的一个更现代的实现,相比于 ntpd 具有以下优势:
特性 | ntpd(传统方案) | Chrony(推荐方案) |
---|---|---|
同步速度 ⏳ | 需要几分钟 | 几秒内同步 |
适用场景 🔄 | 适用于长期运行的服务器 | 适用于各种服务器、云环境和容器 |
资源占用 💾 | 较高,适用于持久运行 | 更低,适用于轻量级服务器 |
离线恢复 🔄 | 断网后恢复较慢 | 即使断网也能稳定调整时间 |
动态 IP 支持 🌐 | 适用于固定 IP 服务器 | 适用于动态 IP 服务器 |
💡 结论:Chrony 更适合现代服务器和集群环境,并且对 时间漂移的自适应能力更强,特别适用于 云计算、虚拟机 和 * 不稳定网络环境*。
# 2. Chrony 在集群中的部署架构 🏗️
在分布式环境中,通常采用 层级时间同步:
- 1 台服务器 作为 NTP 服务器,对外同步 公网时间源(如阿里云、国家授时中心)。
- 集群内所有其他服务器 作为 NTP 客户端,同步主服务器时间。
# 示例架构
角色 | 服务器 IP | 说明 |
---|---|---|
Chrony 服务器(NTP 主节点) | 192.168.3.1 | 负责同步公网时间,并提供时间服务 |
Chrony 客户端(NTP 从节点) | 192.168.3.2 | 从主节点同步时间 |
Chrony 客户端(NTP 从节点) | 192.168.3.3 | 从主节点同步时间 |
在这个环境中:
- 192.168.3.1 从 公网 NTP 服务器 获取时间。
- 192.168.3.2 和 192.168.3.3 直接从 192.168.3.1 获取时间。
# 3. Chrony 服务器端(NTP 服务器)配置
# 3.1 安装 Chrony
在 192.168.3.1 服务器上执行:
yum install -y chrony
1
# 3.2 修改 Chrony 配置
编辑 Chrony 服务器端配置文件:
vim /etc/chrony.conf
1
修改或添加以下内容:
# 使用公网时间服务器
server ntp.ntsc.ac.cn iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
# 允许集群内的机器同步时间
allow 192.168.3.0/24
# 本地时钟(仅当公网 NTP 不可用时使用)
local stratum 10
# Drift 文件存储路径
driftfile /var/lib/chrony/drift
# 日志文件存放路径
logdir /var/log/chrony
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 3.3 启动 Chrony 服务
systemctl restart chronyd
systemctl enable chronyd
1
2
2
# 3.4 验证 NTP 服务器是否同步
chronyc tracking
1
如果输出包含 Leap status : Normal
,表示时间同步正常。
# 4. Chrony 客户端(NTP 从节点)配置
# 4.1 安装 Chrony
在 192.168.3.2 和 192.168.3.3 服务器上执行:
yum install -y chrony
1
# 4.2 配置 Chrony
编辑客户端配置:
vim /etc/chrony.conf
1
修改为:
# 设定时间同步的服务器(NTP 服务器)
server 192.168.3.1 iburst
# Drift 文件存储路径
driftfile /var/lib/chrony/drift
# 日志文件存放路径
logdir /var/log/chrony
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 4.3 启动 Chrony
systemctl restart chronyd
systemctl enable chronyd
1
2
2
# 4.4 验证客户端是否同步
chronyc sources -v
1
如果输出包含 192.168.3.1
且 MS Name/IP address
前面有 *
,表示客户端同步成功:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.3.1 10 6 377 28 -12us[ -33us] +/- 22ms
1
2
3
2
3