跳转到内容

组建集群 ​

组建集群之后,几台 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 nodes
  • pvecm status 里 Quorate 应为 Yes,Expected votes 和 Total votes 应等于当前节点数。
  • pvecm nodes 应列出所有已加入的节点。
  • 到 Web UI 左侧树,应该能看到所有节点,且能从任意一个节点管理其他节点上的客户机。

常见问题 ​

加入时报错说节点不是空的。 待加入节点上还有虚拟机或容器定义。先迁走或删除(记得先备份),再重试。

加入后节点证书变了,浏览器报警告。 正常现象,集群会给节点签发统一的证书体系。清一下浏览器对该地址的例外记录,重新访问即可。

两节点集群,其中一台掉线后另一台也不能操作了。 这是 quorum 机制的预期行为,不是故障。两节点集群必须加 QDevice 才能避免这个问题。

想把一台已经在跑客户机的节点拉入现有集群。 先用 vzdump 把它的客户机全部备份,加入集群后在集群里用新的 VMID 恢复,而不是直接执行 pvecm add。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。