Proxmox è una piattaforma di virtualizzazione open source basata su Debian e KVM che nell’ultimo periodo sta prendendo sempre più piede nelle piccole e medie imprese che decidono di voler rimpiazzare i propri cluster VMware.
Una configurazione tipica di un cluster VMware per una piccola azienda è l’utilizzo di due nodi ESXi con il VCenter virtualizzato.
Su Proxmox non viene utilizzato un server esterno per orchestrare il cluster, come avviene su VMware tramite il VCenter, ma invece sono gli stessi hosts che lo gestiscono tramite il servizio Corosync.
Per far sì che le modifiche al cluster siano valide è necessario che venga raggiunto il quorum, perciò in caso di numero pari di nodi sarebbe possibile il fenomeno denominato “Split Brain”.
Lo “Split Brain” avviene quando metà dei nodi falliscono, poiché i voti dell’altra metà non sono sufficienti al raggiungimento del quorum (essendo i nodi di numero pari).
In caso di “Split Brain” non è possibile effettuare modifiche al cluster, questo implica che non è possibile accendere, spegnere, creare e modificare le virtual machines ed i containers, oltre che essere impossibilitati alla modifica di qualsiasi impostazione del cluster (impostazioni del firewall, aggiungere o rimuovere un nodo…).
Nonostante questa limitazione è comunque possibile creare un cluster a due nodi che grantisca l’alta affidabilità tramite l’utilizzo del Qdevice (Quorum Device).
QUORUM DEVICE
Il Qdevice è un server che partecipa alla votazione del cluster e viene utilizzato nei cluster Proxmox formati da un numero pari di nodi per evitare il fenomeno dello “Split Brain”.
Il Qdevice può essere configurato su qualsiasi distribuzione compatibile con il pacchetto “corosync-qnetd” e non è necessario che il server abbia risorse equivalenti agli hosts di Proxmox.
Ad esempio i test effettuati per la stesura di questo articolo sono stati effettuati con due server HPE ed un mini PC utilizzato come Qdevice.
PREREQUISITI
Prima di configurare il Qdevice è necessario aver installato e configurato i nodi di Proxmox, aver creato un cluster ed aver aggiunto i nodi a quest’ultimo.
Il cluster deve aver un numero pari di nodi, altrimenti l’utilizzo del Qdevice è sconsigliato.
PREPARAZIONE
Prima di incominciare la configurazione del Qdevice è consigliato disabilitare l’IPv6 se non viene utilizzato:
0
1
|
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.conf
sysctl -p
|
Inoltre in caso di un mini PC è suggeribile disabilitare la scheda Wi-Fi.
Per farlo è necessario disabilitare il servizio “wpa_supplicant“:
0
1
|
systemctl stop wpa_supplicant.service
systemctl mask wpa_supplicant.service
|
Successivamente è necessario identificare lo slot PCI della scheda di rete:
0
1
|
root@qdev01:~# lspci -m
b1:00.0 "Network controller" "MEDIATEK Corp." "MT7921K (RZ608) Wi-Fi 6E 80MHz" -p00 "MEDIATEK Corp." "MT7921K (RZ608) Wi-Fi 6E 80MHz"
|
In questo caso lo slot PCI è b1:00.0.
Eseguire i seguenti comandi per identificare il driver utilizzato per la scheda di rete ed inserirlo nella black list (sostituire “b1:00.0” con lo slot identificato nel precedente step):
0
1
2
|
SLOT_PCI="b1:00.0"
DRIVER=$(find /sys | grep drivers.*$SLOT_PCI | cut -d '/' -f6)
echo "blacklist $DRIVER" > /etc/modprobe.d/blacklist-wireless.conf
|
Infine ricaricare i servizi e riavviare il Qdevice:
0
1
|
systemctl daemon-reload
reboot
|
CONFIGURAZIONE DI RETE DEL QDEVICE
Per raggiungere l’alta disponibilità è possible assegnare più IP al Qdevice, se Corosync non dovesse riuscire a contattare i nodi tramite una scheda di rete (un IP), esso ne utilizzerebbe un’altra senza bisogno di intervenire manualmente; altrimenti è possibile configurare un bond (port channel) per raggruppare una o più schede di rete fisiche.
Per configurare più IP è sufficiente aggiungere al file /etc/network/interfaces la configurazione dell’IP statico per ogni interfaccia di rete:
0
1
2
3
4
5
6
7
8
|
auto eth0
iface eth0 inet manual
address 192.168.22.182/24
gateway 192.168.22.1
auto eth1
iface eth1 inet manual
address 192.168.22.183/24
gateway 192.168.22.1
|
Se invece si volesse effettuare un bond, sarebbe necessario installare il pacchetto ifenslave:
0 |
apt install ifenslave -y
|
Per configurare un bond active standby con due interfacce di rete aggiungere al file /etc/network/interfaces la seguente configurazione e rimuovere la configurazione delle interfacce fisiche (eg. ethx):
0
1
2
3
4
5
6
7
8
9
10
11
|
auto bond0
iface bond0 inet static
address 192.168.22.182
netmask 255.255.255.0
network 192.168.22.0
gateway 192.168.22.1
bond-slaves eth0 eth1
bond-mode active-backup
bond-miimon 100
bond-downdelay 200
bond-updelay 200
mtu 1500
|
Per effettuare un bond LACP è possibile modificare la bond-mode da ctive-backup a 802.3ad.
Per applicare la configurazione delle schede di rete installare il pacchetto ifupdown2:
0 |
apt install ifupdown2 -y
|
Ed infine eseguire:
0 |
ifreload -a
|
In alternativa per applicare la configurazione è possibile riavviare il servizio networking:
0 |
systemctl restart networking.service
|
In caso venga mostrato un errore, ricaricare i servizi ed effettuare nuovamente il riavvio:
0
1
|
systemctl daemon-reload
systemctl restart networking.service
|
ATTENZIONE: Eseguire con cautela la modifica delle configurazione di rete se si è connessi in SSH, perché in caso di errore la connessione al server potrebbe venir definitivamente persa.
INSTALLAZIONE DEL QDEVICE
Sul Qdevice eseguire:
0 |
apt install corosync-qnetd
|
Sui nodi di Proxmox eseguire:
0 |
apt install corosync-qdevice
|
Su un qualsiasi nodo di Proxmox appartenente al cluster:
0 |
pvecm qdevice setup <QDEVICE-IP>
|
Se viene visualizzato l’errore Host key verification failed eseguire:
0 |
pvecm updatecerts
|
Per verificare il successo dell’operazione eseguire:
0 |
pvecm status
|
L’output mostrato dovrebbe essere simile al seguente:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Votequorum information
~~~~~~~~~~~~~~~~~~~~~
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate Qdevice
Membership information
~~~~~~~~~~~~~~~~~~~~~~
Nodeid Votes Qdevice Name
0x00000001 1 A,V,NMW 192.168.22.180 (local)
0x00000002 1 A,V,NMW 192.168.22.181
0x00000000 1 Qdevice
|
Lo stato del Qdevice nell’output precedente è composto tipicamente da tre colonne:
- A / NA (“Alive” oppure “Not Alive”): questa colonna indica se la comunicazione tra il Qdevice e il nodo di Proxmox sta funzionando
- V / NV (“Vote” oppure “Not Vote”): questa colonna indica se il Qdevice può esprimere il proprio voto al nodo *1
- MW / NMW (“Master Wins” oppure “Not Master Wins”): questa colonna indica se la modalità “Master Win” è attiva *2
- NR (“Not Registered”): questa colonna è presente se il Qdevice non è registrato sul nodo
*1
Prendendo in considerazione un cluster con due nodi di Proxmox, supponendo un caso di “Split Brain” in cui i due nodi non riescono a comunicare, però riescono a contattare il Qdevice, allora esso esprimerà il proprio voto solamente ad un nodo.
*2 La modalità “Master Wins”, che di default è disabilitata, prevede che il Qdevice possa imporre il proprio voto ignorando i voti del resto del cluster.
CONSIDERAZIONI SUL QDEVICE
L’utilizzo del Qdevice in un cluster Proxmox con numero dispari di nodi è sconsigliato, tuttavia nella pratica è come se esso non ci fosse (che fallisca o meno non cambia nulla).
Se le due metà equivalenti dei nodi del cluster non riescono a contattarsi tra di loro, ma contattano il Qdevice, allora esso deciderà in modo casuale una metà ed esprimerà il proprio voto solo ad essa.
Prima di aggiungere o rimuovere un nodo dal cluster è necessario rimuovere il Qdevice ed eventualmente aggiungerlo nuovamente in un secondo momento in caso di parità del numero di nodi.
RIMOZIONE DEL QDEVICE
Per rimuovere il Qdevice dal cluster, per esempio per aggiungere o rimuovere un nodo di Proxmox, eseguire su un qualsiasi nodo appartenente al cluster:
0 |
pvecm qdevice remove
|
0 commenti