Cluster Proxmox — qdevice (3 votes)¶
Deployé 2026-04-19 suite à incident perte-de-quorum sur cluster 2-node.
Problème initial (2-node)¶
Cluster Proxmox homelab = 2 nodes (galahad + lancelot), chacun 1 vote. Quorum exige 2/2 votes. Conséquence : si UN node tombe, le survivant a 1/2 → pas de quorum → /etc/pve passe en read-only → aucune action cluster possible (pas de pct start, pas de modif config, pas de backup vzdump, etc.).
Apparait structurellement a chaque panne d'un node. L'incident 2026-04-19 (lancelot down ~6h) l'a démontré : galahad seul mais paralysé.
Solution : qdevice sur penny¶
corosync-qnetd tourne sur penny (hors cluster PVE), fournit un 3e vote arbitraire aux 2 nodes PVE. Quorum devient 2/3 — un node peut tomber, le survivant + qdevice = 2/3 = quorate.
+--------+ +--------+
|galahad | |lancelot|
| 1 vote |-------| 1 vote |
+--------+ +--------+
\ /
\ /
\ /
+---------+
| penny |
| qnetd |
| 1 vote |
+---------+
Deploiement effectué¶
Penny (qnetd host)¶
apt install corosync-qnetd
# firewall
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 5403 -j ACCEPT
iptables -I INPUT -s 100.64.0.0/10 -p tcp --dport 5403 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
Galahad + Lancelot (qdevice hosts)¶
apt install corosync-qdevice
# Config SSH port override pour penny (penny SSH = port 2806 hardened)
cat >> /root/.ssh/config <<EOF
Host 192.168.1.28
Port 2806
StrictHostKeyChecking accept-new
EOF
Setup initial¶
Depuis UN node PVE (peu importe lequel), une fois :
Script PVE qui :
1. SSH root@penny pour copier les certs corosync
2. Genere cert qdevice sur chaque node
3. Met a jour /etc/corosync/corosync.conf (config_version incremente)
4. Demarre corosync-qdevice.service sur chaque node
Pre-requis SSH root penny
pvecm qdevice setup utilise root@qnetd. Si penny a PermitRootLogin no (hardening), enable temporaire via drop-in /etc/ssh/sshd_config.d/99-qdevice-setup.conf avec PermitRootLogin prohibit-password + depose les pubkeys root galahad+lancelot dans /root/.ssh/authorized_keys penny. Revert immediat apres setup.
Verification¶
Attendu :
Quorate: Yes
Expected votes: 3
Total votes: 3
Flags: Quorate Qdevice
Membership node list: 1, 2
0x00000001 1 A,V,NMW 192.168.1.18 (local)
0x00000002 1 A,V,NMW 192.168.1.19
0x00000000 1 Qdevice
Doit afficher Model: Net + membership list des 2 nodes PVE.
Gain resilience¶
- Perte d'un node : l'autre + qdevice = 2/3, reste quorate.
/etc/pveRW maintenu. Les LXC du node survivant continuent, on peut meme migrer les LXC du node mort si storage partage. - Perte de penny (qdevice) : les 2 nodes PVE ont 2/3 votes = quorate. Pas d'impact immediat cluster.
- Double perte (penny + 1 node PVE) : 1/3, KO. Mais c'est un double-fault extreme.
Piège : pmxcfs stuck RO¶
Voir operations/depannage.md section "pmxcfs stuck read-only". Le qdevice ne previent pas ce bug transitionnel. Apres une recovery, si /etc/pve reste RO malgre Quorate: Yes, systemctl restart pve-cluster sur le node revenu.
DR : re-provisioning qnetd¶
Si penny brule, le cluster reste quorate avec 2/3 temporairement puis passe a 2 votes + 1 vote deficit au prochain hello corosync — re-dimensionnement automatique OK.
Pour restaurer qdevice apres re-installation penny :
# Sur penny reinstalle
apt install corosync-qnetd
# Re-open firewall 5403 TCP LAN + Tailscale
# Sur un node PVE (les 2 en fait, les certs sont par-node)
pvecm qdevice remove
pvecm qdevice setup 192.168.1.28 -f
Voir aussi¶
- Depannage : pmxcfs stuck RO
- Reseau — topologie 2-node cluster