目录

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-pager

4. 回滚方案

如果升级后出现异常:

  1. 停止问题节点: sudo systemctl stop nomad
  2. 恢复旧版本二进制: 替换回旧版 nomad 二进制文件
  3. 如需恢复数据: 使用之前的快照还原:
    nomad operator snapshot restore backup_xxx.snap
  4. 重启节点: 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 版本。