外观
给两节点集群加 QDevice
集群与高可用里说过:两节点集群需要 2 票才有 quorum,任何一台故障或断网,剩下那台也会失去 quorum。QDevice 就是为了解决这个问题——加一个只投票、不跑客户机的第三方仲裁角色。
为什么需要它
QDevice(全称 corosync QDevice)是跑在集群之外的一个轻量服务,给两节点集群提供第三票。有了它:
- 两台节点里任何一台故障,剩下那台仍然凑够多数票(2/3),能继续工作。
- QDevice 本身不加入集群、不跑虚拟机,可以是一台树莓派、一台闲置小主机,或者一台独立的 Linux 虚拟机(不能是集群里已有节点的客户机,否则那台节点故障时 QDevice 也一起没了)。
QDevice 只适合偶数节点集群
官方文档不建议在奇数节点集群上加 QDevice:如果集群已经有 N 个节点(N 为奇数),QDevice 会拿到 N-1 票,反而让它自己变成单点故障。QDevice 只用来补齐两节点(或其他偶数节点)集群缺的那一票。
开始之前
| 条件 | 说明 |
|---|---|
| 独立设备 | 一台常开、能被两个 PVE 节点都访问到的机器,架构不限。不能是集群内某台节点的客户机 |
| 网络 | PVE 节点需要能访问该设备的 TCP 5403(corosync-qnetd 监听端口);corosync 本身仍用 UDP 5405–5412 |
| 临时 SSH | 设置过程中,PVE 通过 SSH 用 root 登录该设备下发证书,设备需要暂时允许 root 登录 |
| 时间同步 | 该设备也要跑 NTP/chrony,和集群节点时间一致 |
设置过程会改动正在运行的集群配置
执行 pvecm qdevice setup 会更新 corosync 的投票配置并对所有节点生效。这个操作通常很快,但涉及集群仲裁机制,建议安排在维护窗口进行,并提前确认所有节点在线、quorum 正常。
回退方法:如果设置后集群状态异常,在任意集群节点执行 pvecm qdevice remove 撤掉 QDevice,集群会恢复成设置前的投票数(两节点情况下即恢复"各 1 票"的原状态)。
操作步骤
1. 在 QDevice 设备上安装 qnetd
sh
# 在 QDevice 设备(树莓派/小虚拟机)上执行,以该系统的 root 权限运行
apt update
apt install corosync-qnetd服务会自动启动,以非特权用户运行。
临时允许 root 通过密码 SSH 登录(编辑 /etc/ssh/sshd_config,把 PermitRootLogin 改成 yes 并重启 sshd),设置完成后记得改回去。
2. 在每个 PVE 节点上安装 qdevice 客户端
sh
# 在每一台 PVE 节点的宿主机 shell 上执行
apt update
apt install corosync-qdevice3. 从任意一个 PVE 节点发起设置
sh
pvecm qdevice setup <QDevice 设备的 IP>会要求确认 QDevice 设备的 SSH 指纹并输入其 root 密码,PVE 借这条 SSH 连接把证书下发过去。如果之前配置过又想覆盖,加 --force。
设置完成后,把 QDevice 设备上的 PermitRootLogin 改回 no 或更严格的设置。
检查结果
sh
pvecm status输出里应该多出一个 Qdevice 投票成员,Expected votes 变成 3(两节点 + QDevice)。
QDevice 不会出现在 Web UI 里
这是正常现象,QDevice 只在 pvecm status 的命令行输出里可见,Web UI 的节点列表不会显示它。
之后可以做一次演练:关闭其中一台 PVE 节点,确认另一台仍然 Quorate: Yes,能正常操作。
常见问题
报错 "Certificate database already exists"。 QDevice 设备上有旧的证书残留,删除 /etc/corosync/qnetd/nssdb 后重试;如果还不行,在 QDevice 设备上彻底卸载并重装 corosync-qnetd,在 PVE 端重新执行一次 pvecm qdevice setup。
设置卡住或提示网络地址不可用。 检查 QDevice 设备上 corosync-qnetd 服务是否真的在运行(systemctl status corosync-qnetd),以及 TCP 5403 有没有被防火墙挡住。
QDevice 设备本身没有 SSH(比如跑在容器里)。 pvecm qdevice setup 依赖 SSH 下发证书,没有 SSH 服务的设备需要手工交换证书,复杂得多,不建议新手采用,优先选一台能跑标准 SSH 服务的机器。
要移除节点前,QDevice 要不要紧? 见安全移除节点:移除集群节点前必须先移除 QDevice(pvecm qdevice remove),否则会影响 quorum 计算。