nomad server cluster upgrade
升级 Nomad Server 集群同样遵循 “先备份、滚动升级、先 Follower 后 Leader” 的核心原则。Nomad 基于 Raft 共识协议,升级过程中必须始终保持 Quorum,否则集群将不可用。
以下是详细的升级操作规程:
1. 升级前准备
-
版本兼容性: 查阅 Nomad Upgrade Guides 确认目标版本的升级路径。Nomad 支持从前一个次要版本直接升级(例如 1.7.x → 1.8.x),不建议跳版本升级。
-
备份快照: 升级前务必保存 Raft 快照:
nomad operator snapshot save backup_$(date +%Y%m%d%H%M).snap -
检查集群状态: 确认所有 Server 节点健康:
nomad server members nomad operator raft list-peers -
排空待升级节点上的 Job(可选): 如果 Server 同时也跑 Client,先 drain:
nomad node drain -enable -yes <node-id>
2. Server 滚动升级步骤 (Rolling Upgrade)
以 3 节点 Server 集群为例(1 Leader + 2 Follower):
Step 1:确认 Leader
nomad operator raft list-peers记录当前 Leader 节点,最后升级它。
Step 2:逐个升级 Follower
对每个 Follower 节点执行:
# 1. 停止 nomad 服务
sudo systemctl stop nomad
# 2. 替换二进制文件
sudo cp /path/to/new/nomad /usr/local/bin/nomad
nomad version # 确认版本
# 3. 启动服务
sudo systemctl start nomad
# 4. 验证节点重新加入集群
nomad server members
nomad operator raft list-peers等待该节点状态变为 alive 且 Raft 日志同步完成后,再升级下一个 Follower。
Step 3:升级 Leader
所有 Follower 升级完成后,对 Leader 执行相同操作。停止 Leader 会触发重新选举,已升级的 Follower 会被选为新 Leader,这是预期行为。
3. 升级后验证
# 确认所有节点版本一致
nomad server members
# 检查集群健康
nomad operator raft list-peers
# 确认 Job 运行正常
nomad status
# 查看 Leader 日志是否有异常
journalctl -u nomad --since "10 minutes ago" --no-pager4. 回滚方案
如果升级后出现异常:
- 停止问题节点:
sudo systemctl stop nomad - 恢复旧版本二进制: 替换回旧版 nomad 二进制文件
- 如需恢复数据: 使用之前的快照还原:
nomad operator snapshot restore backup_xxx.snap - 重启节点:
sudo systemctl start nomad
5. 常见问题
-
升级后无法选举 Leader: 检查各节点 Raft 协议版本是否一致(
nomad agent-info | grep raft),确保网络连通性正常。 -
Job 调度异常: 升级后如果出现 eval 堆积,检查
nomad operator scheduler get-config确认调度器配置未变化。 -
Client 兼容性: Nomad Server 升级完成后再升级 Client。Server 版本必须 大于等于 Client 版本。