前言
单机 PVE 能承载大部分 Homelab 需求——跑几个 LXC、十来台 VM,配上 PBS 定时备份,已经相当可靠。
但总有那么几个时刻让你意识到单机的天花板:
- 需要滚动升级 PVE 内核,业务却不能停
- 宿主机硬件维护(换风扇、加内存),所有 VM 被迫关机
- 某个节点宕机后,所有服务直到你手动恢复才恢复
- 想在线迁移 VM 到另一台性能更强的机器上做负载均衡
这就是 PVE 集群 + 高可用(HA)出场的时机。
本文以 PVE 8.x 三节点集群为例,从集群创建、共享存储、Live Migration 热迁移到 HA 故障自愈,完整覆盖生产级 Homelab 虚拟化平台的搭建流程。
1. 集群基础架构
PVE 集群的底层组件并不复杂,理解它们就能在故障时从容应对:
| 组件 | 作用 |
|---|---|
| Corosync | 集群通信引擎(组播/UDP),心跳检测与消息广播 |
| pmxcfs | Proxmox Cluster File System,FUSE 挂载于 /etc/pve,底层用 SQLite 同步集群配置 |
| votequorum | 投票仲裁模块,决定集群是否拥有法定人数 |
| pve-ha-manager | 高可用管理器,监控资源状态并触发故障恢复 |
| watchdog | 看门狗定时器,节点失联后自动重启以释放资源 |
关于 Quorum(仲裁):
Quorum 是防止 Split-Brain(脑裂) 的核心机制。当集群网络分裂时,只有拥有多数票的"半区"能继续提供服务,失去 quorum 的半区会将 pmxcfs 切换为只读模式并停止 VM。
- 三节点集群:quorum = 2(需要≥2节点在线)
- 双节点集群:必须设置
two_node: 1,quorum 降为 1,但风险极高——单节点故障后集群直接不可用
Homelab 建议: 至少 3 节点。双节点 + QDevice(第三方仲裁设备,如树莓派)也是可行方案,但管理复杂度显著增加。
2. 三节点集群搭建
2.1 前提条件
- 三台安装了 PVE 8.x 的主机,版本一致
- 节点时间同步(NTP)
- 节点之间能通过 主机名 互相解析(推荐
/etc/hosts) - 防火墙放行集群通信端口:UDP 5404/5405(Corosync)和 TCP 22(SSH)
| |
2.2 创建集群
在 第一个节点(pve1) 上执行:
| |
成功后会看到集群已创建,/etc/pve/ 目录自动变为集群文件系统。
2.3 其他节点加入
| |
2.4 验证集群状态
| |
正常输出应显示三个节点都在线,quorum 为 2(3节点中需2票):
| |
生成的 corosync.conf 位于 /etc/pve/corosync.conf,由 pmxcfs 自动同步到所有节点:
| |
3. 共享存储配置
集群的威力需要共享存储来释放。没有共享存储时,VM 磁盘只在本地,迁移时连数据一起搬——速度慢、占用网络带宽。有了共享存储,迁移只需传输内存状态,快如闪电。
Homelab 常见共享存储方案对比:
| 方案 | 性能 | 配置复杂度 | 成本 | 适用规模 |
|---|---|---|---|---|
| NFS | 中 | ⭐ 低 | 免费 | 小型 Homelab |
| Ceph | 高 | ⭐⭐⭐ 很高 | 免费(需三节点) | 中型以上 |
| iSCSI + LVM | 高 | ⭐⭐ 中 | 免费 | 中型 |
| Starwind VSAN | 高 | ⭐⭐ 中 | 免费(2节点) | 小型 |
注:PVE 已内置 Ceph 支持(
pveceph install),3节点+万兆网络能跑出不错的性能。但 Ceph 配置维护复杂度较高,Homelab 入门推荐从 NFS 起步。
这里以 NFS 共享存储为例(将一台 NAS 或任意节点作为 NFS Server):
| |
在 PVE 集群的任一节点的 Web UI 中:
Datacenter → Storage → Add → NFS:
- ID:
nfs-share - Server: NFS Server IP
- Export:
/srv/nfs/pve-share - Content: 勾选
VZDump backup,Container,Snippets,ISO images
或者在 CLI 中执行:
| |
存储添加后,集群中所有节点的 /etc/pve/storage.cfg 会自动同步——这就是 pmxcfs 的魅力。
4. Live Migration 热迁移机制
热迁移(Live Migration)是 PVE 集群最令人舒适的特性之一。理解它的底层原理,有助于在遇到迁移失败时定位问题。
4.1 Pre-Copy 迁移算法
PVE 基于 QEMU/KVM 的 Pre-Copy 内存迁移算法,分为五个阶段:
- 初始同步: 将 VM 全量内存从源节点复制到目标节点
- 脏页迭代: VM 持续运行产生的脏页(Dirty Pages)被反复追踪并重传
- 收敛检测: 当脏页率低于传输率阈值,或达到最大迭代次数,进入停顿时段
- 暂停与最终复制: 暂停 VM(Downtime),复制最后一批脏页 + CPU/设备状态
- 切换执行: 在目标节点恢复 VM,源节点释放资源
整个过程中,VM 感知到的停机窗口通常只有 20~200ms——一次网络 Ping 的时间。
| |
4.2 影响迁移速度的关键因素
| 因素 | 影响 |
|---|---|
| 内存大小 | 256GB VM 比 4GB VM 迁移慢几十倍 |
| 内存脏化速率 | 数据库、缓存类 VM 脏页率高,可能导致永不收敛 |
| 网络带宽 | 推荐 10GbE 或专用迁移 VLAN |
| 加密开销 | 默认 secure 模式加密传输,约消耗 20-30% 带宽 |
| 存储类型 | 共享存储只需传内存;本地存储需同时传磁盘 |
4.3 迁移调优
在生产环境迁移前,建议先调优以下参数:
| |
为指定 VM 设置迁移参数:
| |
4.4 执行热迁移
| |
⚠️ 注意: 迁移中的 VM 会短暂暂停(~100ms 左右),对延迟敏感的应用(如游戏服务器、实时音频)可能造成可感知的卡顿。建议在低峰期执行。
5. HA 高可用配置
有了集群和共享存储,HA 高可用才能完整生效。HA 的核心逻辑很简单:检测到节点故障 → 在其他节点自动拉起 VM。
5.1 HA 架构
PVE 的 HA 栈由三部分组成:
- CRM(Cluster Resource Manager):集群资源管理器,运行在 master 节点,决策资源调度
- LRM(Local Resource Manager):本地资源管理器,每个节点上运行,执行具体操作
- Watchdog:硬件/软件看门狗,节点故障后触发自动重启以释放资源(fencing)
故障恢复流程:
| |
5.2 配置 HA 组
HA 组定义了 VM 可以在哪些节点上运行,以及优先级:
| |
5.3 设置 HA 资源
| |
HA 的 state 有四个常见值:
| State | 含义 |
|---|---|
started | VM 应始终运行,故障时自动在另一节点启动 |
stopped | VM 应保持停止 |
disabled | 不被 HA 管理,手动控制 |
freeze | 冻结,不自动迁移但保留资源定义 |
5.4 CPU 类型兼容性
HA 多节点之间必须确保 CPU 指令集兼容,否则迁移后的 VM 可能直接崩溃:
| |
Homelab 实践: 如果所有节点 CPU 同代同型号,大胆用
host模式获取最大性能。如果混合了不同代 CPU(如 i5-12500 和 N100),统一设置为x86-64-v2-AES是最优平衡。
6. 故障模拟与验证
搭建完成后,一定要做故障模拟测试,否则高可用只是心理安慰。
6.1 模拟节点宕机
| |
在 Web UI 上观察:
- pve1 状态变为未知/离线
- HA 资源状态变为
stoped并等待 fencing - Watchdog 超时后(约 60 秒),CRM 在其他节点自动启动 VM
查看 HA 日志:
| |
6.2 验证业务连续性
测试期间,从外部持续 Ping VM 的 IP 地址,观察断连持续时间:
| |
正常 HA 切换的停机时间 = Watchdog 超时(60s)+ QEMU 启动时间(10-30s)= 约 70-90 秒。这不是"零宕机",但对大部分 Homelab 场景已经足够。
加速建议: 如果业务对中断容忍度较低,可以缩短 Watchdog 超时:
修改 watchdog 超时时间(单位:秒,最小值 10)
echo 30 > /sys/devices/virtual/watchdog/watchdog0/timeout
持久化:在 /etc/systemd/system.conf 中设置 RuntimeWatchdogSec=30
| |
7. 踩坑记录
❌ 坑 1:迁移失败 — “could not start migration tunnel”
现象: 迁移进度卡在 0%,日志报 SSH 隧道建立失败。
根因: SSH 主机密钥认证失败,或节点间无法通过主机名解析。
解决:
| |
❌ 坑 2:双节点集群 + NFS 存储,关机维护时集群瘫痪
现象: 维护时关闭一个节点,剩余节点显示"no quorum",所有 VM 停止。
根因: 双节点集群 quorum = 2。一节点下线后只剩 1 票,失去 quorum。pmxcfs 变为只读,无法启动/迁移 VM。
解决方案:
| |
更好的方案: 直接升级到三节点,避免这个先天缺陷。
❌ 坑 3:HA Watchdog 在系统更新时误触发 Fencing
现象: 执行 apt upgrade 或重启 pve-ha-lrm 服务后,节点被 watchdog 重启。
根因: HA 模式下 watchdog 持续运行,如果 pve-ha-lrm 停止响应(升级过程中短暂暂停),watchdog 判定节点失联并触发重启。
解决: 维护操作前,先将 VM 移出 HA 管理:
| |
❌ 坑 4:高内存脏化率的 VM 迁移永不收敛
现象: 迁移进度达到 90%+ 后反复回退,VM 无法完成迁移。
根因: VM 内存写入速率超过了网络传输速率,脏页永远追不上。
解决:
| |
8. 总结
| 维度 | 结论 |
|---|---|
| ✅ 集群规模 | 最少 3 节点,避免双节点的 quorum 缺陷 |
| ✅ 共享存储 | NFS 入门,Ceph 进阶;共享存储是热迁移的关键前提 |
| ✅ 迁移模式 | 私有内网使用 insecure 模式,性能提升 30%+ |
| ✅ CPU 类型 | 异构节点统一用 x86-64-v2-AES,同代可用 host |
| ✅ HA 策略 | restricted=1 限制 VM 范围,nofailback=0 自动回迁 |
| ⚠️ 维护流程 | 维护前必须 ha-manager set <vmid> --state disabled |
| ⚠️ 定期演练 | 每月拔一次网线测试 HA 切换,确保故障恢复路径走通 |
最后一条忠告: HA 保护的是硬件故障,不保护数据损坏。HA 不是备份的替代品。即使上了集群,PBS 定时备份依然不可少。集群 + 共享存储 + HA + PBS = Homelab 虚拟化平台的终极形态。
有没有在 PVE 集群上踩过什么神奇的坑?欢迎在评论区分享你的经历。