外观
组建集群
组建集群之后,几台 PVE 主机共用一套 Web UI、一份配置数据库,客户机可以在节点之间迁移。这是迁移和高可用的前提。
在动手之前,请先读完集群与高可用里关于 quorum(仲裁)的说明——组建集群不是没有代价的,尤其是两节点的情况。
为什么需要它
单机场景下,每台 PVE 都是一座孤岛:各自登录、各自配置、客户机搬家只能靠备份/恢复。组集群之后:
- 一个 Web UI 管理所有节点。
- 客户机可以在线迁移到别的节点(见在线迁移与离线迁移)。
/etc/pve下的配置(用户、存储定义、防火墙规则等)自动同步到所有节点。- 具备了做高可用的前提条件之一。
不是所有场景都需要集群
如果几台机器各跑各的、互不相关,不组集群反而更简单——组集群会引入新的依赖(corosync 网络、时间同步)和新的故障模式(集群本身失联)。组集群的理由应该是:需要迁移、需要统一管理、或者需要 HA。
开始之前
| 前置条件 | 要求 |
|---|---|
| 节点数量 | 建议 3 个以上;2 个节点必须额外配 QDevice,否则任何一台故障都会让两台都失去 quorum |
| 网络 | 所有节点之间能互通 UDP 5405–5412(corosync)和 TCP 22(SSH);延迟低且稳定,建议低于 5 ms |
| 时间同步 | 各节点时间必须同步(NTP/chrony),否则加入会失败或产生诡异问题 |
| PVE 版本 | 建议所有节点版本一致 |
| 主机名与 IP | 加入前就要定好最终的主机名和 IP,加入集群后不能再改 |
| 集群名 | 建集群时一次性确定,之后不能改 |
| 待加入节点 | 必须是"空"节点:节点上不能已经有虚拟机或容器 |
加入集群会覆盖待加入节点的 /etc/pve
pvecm add(或 Web UI 的 Join Cluster)会用现有集群的配置整体覆盖待加入节点的 /etc/pve。如果这台节点上已经有虚拟机、容器或自定义的存储/防火墙配置:
- 虚拟机和容器的定义会丢失(磁盘文件本身通常还在存储里,但配置文件没了,需要手工重建
.conf才能找回)。 - 之前单机时做的自定义配置(用户、ACME、备份任务等)会被现有集群的配置覆盖。
前置条件:加入前用 vzdump 把这台节点上所有客户机做一次完整备份。
回退方法:如果加入后发现数据丢失,用备份在集群里以新的 VMID 恢复客户机;/etc/pve 本身没有"撤销加入"这个操作,只能恢复到备份状态,或者退出集群后重装该节点。
操作步骤
1. 在第一个节点上创建集群
在其中一台节点的宿主机 shell 里执行:
sh
pvecm create <集群名><集群名> 只在集群内部使用,选一个不会和其他集群冲突的名字即可,例如 home-cluster。
也可以在 Web UI:数据中心 → 集群 → Create Cluster。如果这台节点有多张网卡,可以在这一步就为 corosync 指定专用的 Link 0(以及备用的 Link 1),网络规划的细节见集群进阶:corosync 冗余链路规划。
2. 在其他节点上加入集群
命令行:在待加入节点的宿主机 shell 里执行:
sh
pvecm add <已建好集群的某节点 IP>会提示输入该节点 root@pam 的密码,并要求确认对方证书指纹。推荐用 IP 而不是主机名,避免依赖 DNS 解析。
如果要给 corosync 走独立网络:
sh
pvecm add <集群节点 IP> --link0 <本机在该网络里的 IP>Web UI:在已在集群里的节点上,数据中心 → 集群 → Join Information → Copy Information;到待加入的节点,数据中心 → 集群 → Join Cluster,粘贴信息后手动输入密码。加入完成后节点证书会更换,可能需要刷新页面重新登录。
3. 逐台重复
一台台加入,每加完一台确认一次状态(见下文),再加下一台。
检查结果
在任意节点执行:
sh
pvecm status
pvecm nodespvecm status里Quorate应为Yes,Expected votes和Total votes应等于当前节点数。pvecm nodes应列出所有已加入的节点。- 到 Web UI 左侧树,应该能看到所有节点,且能从任意一个节点管理其他节点上的客户机。
常见问题
加入时报错说节点不是空的。 待加入节点上还有虚拟机或容器定义。先迁走或删除(记得先备份),再重试。
加入后节点证书变了,浏览器报警告。 正常现象,集群会给节点签发统一的证书体系。清一下浏览器对该地址的例外记录,重新访问即可。
两节点集群,其中一台掉线后另一台也不能操作了。 这是 quorum 机制的预期行为,不是故障。两节点集群必须加 QDevice 才能避免这个问题。
想把一台已经在跑客户机的节点拉入现有集群。 先用 vzdump 把它的客户机全部备份,加入集群后在集群里用新的 VMID 恢复,而不是直接执行 pvecm add。