Dans cette documentation nous allons voir ensemble comment créer un cluster Proxmox avec trois nœuds.
Le but étant de mettre en place un cluster fiable et tolérant aux pannes.
Un cluster Proxmox repose sur le moteur Corosync, qui assure :
Nous mettrons également en place la haute disponibilité (HA) afin que les machines virtuelles puissent redémarrer automatiquement en cas de défaillance d’un nœud.
L'environnement Proxmox que j'utilise pour faire cette documentation est un environneent virtuel.
C'est à dire que les serveurs Proxmox que je vais utiliser sont des VMs cependant la procédure reste identique avec du matériel physique.
Avant de commencer la configuration nous allons parler un peu du QDevice.
Dans beaucoup de labs ou de petites infrastructures, il n'est pas rare de trouvever un ou plusieurs Cluster avec seulement deux nœuds pour lesquels il est vivement conseillé de mettre en place un QDevice.
J'ai d'ailleurs fais une documentation qui traite du sujet.
Cependant dans cette documentation nous allons créer un cluster avec 3 nœuds.
La question qui se pose est donc assez simple : Faut-il configurer un QDevice dans un cluster 3 nœuds ?
La réponse est tout aussi simple : Dans un cluster à trois nœuds l’ajout d’un QDevice n’est pas nécessaire.
En effet, chaque nœud possède un vote, ce qui donne un total de trois votes.
Le quorum, qui correspond à la majorité nécessaire pour que le cluster fonctionne, est donc de deux votes.
Cela signifie concrètement que si un nœud tombe en panne, les deux nœuds restants continuent de fonctionner normalement, car ils conservent la majorité.
Il existe donc déjà un mécanisme d’arbitrage naturel et le risque de split-brain est fortement réduit
Je ne traiterai donc pas ici de la configuration d'un QDevice car ce n'est pas nécessaire.
Idéalement il faut à minima deux interfaces réseau sur les serveurs Proxmox :
Exemple :
| Usage | Interface | IP |
|---|---|---|
| Management | vmbr0 | 192.168.60.x |
| Cluster | vmbr1 | 192.168.70.x |
Cette configuration sera a réaliser sur chacun des nœuds qui composeront le Cluster.
Voici un exemple de la configuration réseau nécessaire pour créer le Cluster.
On y retrouvera nos deux cartes réseau ainsi que les subnets dédiés à chacune d'elles.
Cette configuration est à mettre dans /etc/network/interfaces et sera a faire sur les trois serveurs en prennant évidemment soin de ne pas utiliser les mêmes adresses.
auto lo
iface lo inet loopback
iface ens192 inet manual
iface ens224 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.60.1/24
gateway 192.168.60.254
bridge-ports ens192
bridge-stp off
bridge-fd 0
auto vmbr1
iface vmbr1 inet static
address 192.168.70.1/24
bridge-ports ens224
bridge-stp off
bridge-fd 0
Pour créer le Cluster en utiliant les lignes de commande (CLI) il faudra effectuer la commande suivante depuis le premier serveur Proxmox:
# Sur le premier serveur Proxmox
pvecm create Cluster-Name

Une fois la commande passée on peut vérifier que le Cluster est correctement créé à l'aide de la commande suivante : pvecm status
Le résultat sera comme ceci :

Le cluster étant créé, il faut à présent y ajouter les deux autres serveurs :
# Sur le second serveur Proxmox
pvecm add 192.168.60.1 # adresse IP du premier serveur PVE
# Sur le troisème serveur Proxmox
pvecm add 192.168.60.1 # adresse IP du premier serveur PVE
Il faudra entrer le password du compte root du premier serveur Proxmox puis valider en tapant "yes"

Après avoir ajouté les deux autres serveurs Proxmox au Cluster, ils seront tous visibles dans le Datacenter depuis n'importe quelle interface graphique.

Il sera également possible de vérifier le Cluster avec les commandes suivantes :
pvecm nodes

pvecm status

Nous venons créer un Cluster et d'y ajouter nos 3 nœuds cependant le réseau utilisé ne correspond pas à celui que nous avons configuré et qui sera dédié à Corosync.
Pour utiliser le réseau dédié nous allons devoir faire quelques modifications.
/etc/pve/corosync.confAVANT
nodelist {
node {
name: Nested-Cluster1-Prox9-01
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.60.1
}
node {
name: Nested-Cluster1-Prox9-02
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.60.2
}
node {
name: Nested-Cluster1-Prox9-03
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.60.3
}
}
APRES
nodelist {
node {
name: Nested-Cluster1-Prox9-01
nodeid: 1
quorum_votes: 1
ring0_addr: 192.168.70.1 # <== ICI
}
node {
name: Nested-Cluster1-Prox9-02
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.70.2 # <== ICI
}
node {
name: Nested-Cluster1-Prox9-03
nodeid: 2
quorum_votes: 1
ring0_addr: 192.168.70.3 # <== ICI
}
}
ATTENTION : Pour la modification soit prise en compte il faudra redémarrer les deux PVE.
Nous pouvons vérifier que la modification a bien été prise en compte en utilisant à nouveau la commande pvecm status











systemctl enable pve-ha-lrm
systemctl enable pve-ha-crm
systemctl start pve-ha-lrm
systemctl start pve-ha-crm
Ces services sont indispensables au fonctionnement du HA.
Le service pve-ha-crm prend les décisions globales. Il analyse l’état du cluster et décide où les machines doivent être exécutées.
Le service pve-ha-lrm, quant à lui, exécute les actions localement sur chaque nœud.
Ces deux services communiquent via Corosync.
Tous les fichiers du HA sont dans le répertoire /etc/pve/ha/
Je n'ai pas créé de VM pour cette documentation, je ne ferai donc pas de carpture d'écran.
Je me contenterai de donner les commandes en exemple
ha-manager add vm:100
ha-manager status
ha-manager set vm:100 --max_restart 5 --max_relocate 2
Il est possible de simuler une panne en arrêtant un nœud :
shutdown now
Lorsque le nœud s’arrête :