Proxmox VE 高可用集群:HA Manager、节点 Fencing、VIP 漂移实战
详解 Proxmox VE 高可用集群的构建与运维:Corosync 集群通信配置、HA Manager 自动故障转移原理、节点 Fencing(STONITH)防止脑裂、LVM-thin/Ceph 共享存储集成、HA 资源配置与优先级管理,覆盖节点宕机时的自动恢复流程。
Proxmox VE 内置高可用(HA)集群能力:当某台节点宕机时,运行在该节点上的虚拟机自动迁移到其他节点恢复运行。实现这个能力需要三个核心组件:Corosync(集群通信/心跳)、HA Manager(故障检测与编排)、Fencing(隔离故障节点防止脑裂)。
HA 集群架构
3 节点 Proxmox HA 集群(最小配置)
[节点1 - pve1] [节点2 - pve2] [节点3 - pve3]
VM 101, 102 VM 103, 104 VM 105
│ │ │
└──────────────────────┴──────────────────────┘
Corosync 心跳网络
(建议专用网段)
│ │ │
└──────────────────────┴──────────────────────┘
共享存储(Ceph / SAN / NFS)
节点1 宕机时:
HA Manager 检测到节点1 心跳超时
执行 Fencing(IPMI 关机/重启节点1)
等待 Fencing 确认后
在节点2/3 上启动 VM 101, 102
整个过程约 60-120 秒
一、集群初始化
创建集群(在第一个节点)
# 在 pve1 上创建集群
pvecm create my-cluster
# 查看集群状态
pvecm status
# Quorum information
# ------------------
# Date: Wed Jul 22 09:00:00 2026
# Quorum provider: corosync_votequorum
# Nodes: 1
# Node votes: 1
# Expected votes: 1
# Total votes: 1
# Quorum: 1 (Activity blocked if below)
# Active nodes: 1
# Votes needed for quorum: 1
加入集群(在其他节点)
# 在 pve2 和 pve3 上执行
pvecm add pve1 # 加入 pve1 所在的集群
# 需要输入 pve1 的 root 密码(用于传输集群密钥)
# 加入后验证
pvecm nodes
# Nodeid Votes Quorum Name State
# 1 1 1 pve1 Online
# 2 1 0 pve2 Online
# 3 1 0 pve3 Online
Corosync 网络配置(双网卡冗余)
# 查看 Corosync 配置
cat /etc/corosync/corosync.conf
# 生产推荐:配置两个心跳接口(防止单网卡故障导致假脑裂)
# 编辑 /etc/corosync/corosync.conf
totem {
version: 2
cluster_name: my-cluster
transport: knet
interface {
linknumber: 0
knet_link_priority: 1 # 主心跳
}
interface {
linknumber: 1
knet_link_priority: 2 # 备用心跳
}
}
nodelist {
node {
name: pve1
nodeid: 1
ring0_addr: 192.168.1.101 # 主心跳 IP
ring1_addr: 10.0.0.101 # 备用心跳 IP(管理网络)
}
node {
name: pve2
nodeid: 2
ring0_addr: 192.168.1.102
ring1_addr: 10.0.0.102
}
node {
name: pve3
nodeid: 3
ring0_addr: 192.168.1.103
ring1_addr: 10.0.0.103
}
}
quorum {
provider: corosync_votequorum
}
# 修改后重启
systemctl restart corosync
pvecm status
二、Fencing 配置(关键!防止脑裂)
Fencing(也叫 STONITH,Shoot The Other Node In The Head)是 HA 的必要条件:当检测到节点故障时,必须先确认该节点已被隔离(关机/重启),才能在其他节点启动它的 VM,否则两个节点同时运行同一 VM 会导致数据损坏。
IPMI/DRAC Fencing(物理服务器推荐)
# 在 Proxmox Web UI 中配置:
# Datacenter → HA → Fencing Devices
# 或通过命令行(使用 pvesh)
pvesh create /cluster/ha/fence \
--type pve-fence-hardware \
--hardware-pve-node pve1 \
--hardware-method ipmi \
--hardware-address 192.168.1.201 \ # IPMI/DRAC IP
--hardware-user admin \
--hardware-password secret
# 验证 Fencing 设备
pvesh get /cluster/ha/fence
配置 HA 模拟 Fencing(无硬件管理口的测试环境)
# 使用 pve-fence-plugin(Proxmox 自带软件 Fencing)
# 仅适合所有节点都能通过 API 互相访问的场景
# 在每个节点安装 watchdog
apt install pve-kernel-helper
modprobe softdog
# 配置 watchdog
echo "softdog" >> /etc/modules-load.d/modules.conf
cat > /etc/pve/watchdog.conf << 'EOF'
WATCHDOG_MODULE=softdog
EOF
systemctl restart pve-ha-lrm
验证 Fencing 工作
# 模拟节点故障(注意:这会真的关掉节点!)
# 先确认 HA 资源已配置
# 查看 HA 状态
ha-manager status
# 临时暂停一个节点的心跳(测试用)
# 在 pve2 上:
systemctl stop corosync
# 观察 pve1 日志
journalctl -u pve-ha-crm -f
# 预期行为:
# pve2 心跳超时(默认 20s)
# HA CRM 等待 Fencing 完成
# pve2 上的 VM 在 pve1/pve3 上重启
三、HA 资源配置
添加 VM 到 HA
# Web UI:VM → More → Manage HA
# 或命令行:
# 添加 VM 101 到 HA 管理
ha-manager add vm:101
# 设置 HA 优先级和偏好节点
ha-manager set vm:101 \
--state started \ # 期望状态:started/stopped/disabled
--max_restart 3 \ # 同一节点最多重启次数
--max_relocate 1 \ # 迁移到其他节点的次数限制
--group ha-group-a # HA 资源组
# 查看 HA 资源列表
ha-manager status
# quorum OK
# master pve1 (pve1.my-cluster)
# lrm pve1: active
# lrm pve2: active
# lrm pve3: active
#
# Resources:
# vm:101 (VM 101) = started
# node: pve1
# vm:102 (VM 102) = started
# node: pve2
HA 资源组(控制 VM 运行偏好节点)
# 创建 HA 资源组
# Web UI:Datacenter → HA → Groups → Add
# 或:
pvesh create /cluster/ha/groups \
--group ha-group-a \
--nodes "pve1:3,pve2:2,pve3:1" \ # 格式:节点名:优先级(数字越大越优先)
--nofailback 0 # 原节点恢复后是否自动迁移回去(0=是)
# 将 VM 分配到资源组
ha-manager set vm:101 --group ha-group-a
四、共享存储集成
HA 必须使用共享存储(故障转移后新节点需要能访问 VM 磁盘)。
Ceph 集成(推荐)
# Proxmox 内置 Ceph 管理
# Web UI → Datacenter → Ceph
# 安装 Ceph(在所有节点)
pveceph install --version reef # Ceph Reef (18.x)
# 初始化(在第一个节点)
pveceph init --network 10.0.1.0/24 # Ceph 专用网络
# 创建 Monitor(每个节点一个)
pveceph createmon # 在当前节点创建 Mon
ssh pve2 'pveceph createmon'
ssh pve3 'pveceph createmon'
# 添加 OSD(每个磁盘一个 OSD)
pveceph createosd /dev/sdb # 专用磁盘给 Ceph,会被格式化
pveceph createosd /dev/sdc
# 创建 Pool(存放 VM 镜像)
pveceph createpool vm-pool \
--size 3 \ # 副本数
--pg_autoscale_mode on
# 创建 RBD 存储
pvesh create /storage \
--storage ceph-vm \
--type rbd \
--pool vm-pool \
--monhost "pve1,pve2,pve3" \
--content images,rootdir
# 验证
pvesh get /storage
ceph status
# cluster:
# id: xxxxx
# health: HEALTH_OK
# services:
# mon: 3 daemons, quorum pve1,pve2,pve3
# osd: 6 osds: 6 up, 6 in
# data:
# pools: 1 pools, 128 pgs
五、HA 故障场景演练
场景:节点意外宕机
# 模拟 pve2 突然宕机(在 pve2 上执行)
echo c > /proc/sysrq-trigger # 触发 kernel panic
# 在 pve1 上观察 HA 日志
journalctl -u pve-ha-crm -f --since "1 min ago"
# ha-manager: Got heartbeat timeout from node pve2 at ...
# ha-manager: Starting fencing process for node pve2
# ha-manager: Fencing of pve2 done
# ha-manager: Relocating vm:103 to pve1
# ha-manager: Started vm:103 on pve1
# ha-manager: Relocating vm:104 to pve3
# ha-manager: Started vm:104 on pve3
# 整个过程时间线(典型值):
# 0s - 心跳超时检测开始
# 20s - 确认节点下线(Fencing 开始)
# 40s - Fencing 完成(IPMI 关机确认)
# 60s - 在其他节点启动 VM
# 90s - VM 全部恢复运行
场景:手动维护节点
# 优雅维护:先迁移所有 VM,再停节点
# 在 pve2 上执行
ha-manager crm-command node-maintenance --node pve2
# 或通过 Web UI:Datacenter → HA → Status → 对应节点右键 → Maintenance Mode
# 维护完成后恢复
ha-manager crm-command node-maintenance-leave --node pve2
六、监控与告警
# 实时 HA 状态
watch -n 5 'ha-manager status'
# 查看 HA 日志
journalctl -u pve-ha-crm -u pve-ha-lrm --since "1 hour ago"
# Corosync 网络状态
corosync-quorumtool -s
# Quorum information
# ------------------
# Quorum: 1 (Activity blocked if below)
# Flags: Quorate
# 集群节点状态
pvecm nodes
pvecm status
# Proxmox 内置告警(7.x+)
# Web UI → Datacenter → Notifications
# 配置 HA 节点故障邮件告警:
pvesh create /cluster/notifications/endpoints/sendmail \
--name email-admin \
--mailto "admin@company.com" \
--mailto-user root@pam
小结
Proxmox HA 集群的三个核心是:Corosync 提供心跳检测和仲裁(>=3 节点才有仲裁能力);Fencing 是数据安全的保障(没有 Fencing 的 HA 等于没有 HA,因为会脑裂);共享存储 是 VM 能在任意节点启动的前提(Ceph 是 Proxmox 官方推荐方案)。生产配置关键点:心跳网络要与业务网络分离(专用心跳链路);Fencing 必须配置(IPMI/DRAC 是最可靠的方式);HA 资源组设置节点优先级(控制 VM 在哪个节点优先运行)。
