Cicle formatiu: CFGS Administració de sistemes informàtics en xarxa (ASIX)
Mòdul: 0378 - Seguretat i alta disponibilitat
Proxmox Virtual Environment (Proxmox VE) és una plataforma de virtualització de codi obert, desenvolupada per l’empresa austríaca Proxmox Server Solutions GmbH. Combina gestió de màquines virtuals amb QEMU/KVM i contenidors amb LXC, tot des d’una interfície web única, i inclou eines de clúster, alta disponibilitat, xarxa i emmagatzematge integrades.
Dades tècniques rellevants:
- Escrit en Perl i Rust
- Primer llançament el 15 d’abril de 2008
- Es basa en Debian GNU/Linux, amb un kernel Linux personalitzat
- S’actualitza via APT (com qualsevol paquet Debian)
El codi de Proxmox VE està llicenciat sota la GNU Affero General Public License, versió 3 (AGPLv3). Això vol dir:
- És programari totalment lliure i de codi obert: es pot descarregar, instal·lar, executar i usar comercialment en producció sense cap cost de llicència.
- La llicència garanteix la llibertat d’ús per a qualsevol propòsit, incloent-hi entorns de producció comercial.
- No hi ha funcions bloquejades: totes les funcionalitats presents en la versió de pagament també hi són a la descàrrega gratuïta, a diferència del model d’edicions de VMware.
Què és de pagament, doncs? No la llicència, sinó la
subscripció. La subscripció dona accés al dipòsit
d’actualitzacions “enterprise” (el més provat, recomanat per a
producció) i a suport tècnic. El preu de la subscripció es calcula
segons el nombre de CPU físiques del servidor. És per això que en aquest
document desactivarem el dipòsit enterprise i activarem el no-subscription: es pot fer servir sense pagar, només amb
un dipòsit una mica menys “curat”.
L’alta disponibilitat (HA, High Availability) és un conjunt de mecanismes que fan que un servei continuï funcionant encara que falli el component que l’estava executant, minimitzant al màxim el temps d’aturada.
La idea de fons
En comptes de dependre d’una sola màquina perquè un servei estigui disponible, es distribueix la responsabilitat entre diversos nodes. Si un node cau, un altre assumeix el servei automàticament, sense (o amb mínima) intervenció humana.
Elements clau en un clúster com el de Proxmox
- Quòrum: els nodes han de posar-se d’acord (majoria de vots) sobre quins nodes formen part del clúster actiu. Sense quòrum, el clúster no actua per evitar decisions contradictòries.
- Detecció de fallada: el clúster ha de saber quan un node ha deixat de respondre (per exemple, perquè Corosync deixa de rebre’n senyal).
- Fencing (aïllament): abans de reiniciar un servei en un altre node, cal assegurar-se que el node original realment ha quedat fora de joc. Si no es fa bé, es pot arribar a tenir el mateix disc escrit des de dos llocs alhora (split-brain), amb corrupció de dades.
- Emmagatzematge compartit: perquè una VM es pugui aixecar en un altre node, aquest ha de poder accedir al mateix disc (Ceph, NFS/iSCSI, o replicació ZFS). Sense això, el node nou no té les dades de la VM.
- Failover: és el procés pel qual un servei (una VM o un contenidor) es trasllada automàticament d’un node que ha fallat a un altre node del clúster que sí que funciona, sense intervenció manual.
Un matís important
HA no és el mateix que tolerància a fallades sense interrupció. Hi ha sempre un temps de detecció + fencing + arrencada en què el servei no està disponible (típicament segons a pocs minuts, segons la configuració). L’objectiu és reduir aquest temps, no eliminar-lo del tot.
Nivells on es pot aplicar
- A nivell d’infraestructura (com el que es descriu en aquest document): si cau un node físic, les VM es reinicien en un altre.
- A nivell d’aplicació (per exemple, un balancejador HAProxy davant de diversos servidors web): si cau un servidor, el trànsit es redirigeix als altres sense ni tan sols reiniciar res.
Els dos nivells es complementen: pots tenir HA a nivell de VM (Proxmox) i, dins d’aquesta VM, HA a nivell d’aplicació.
Proxmox VE (Virtual Environment) integra:
- KVM per a màquines virtuals completes.
- LXC per a contenidors del sistema.
- Un gestor de clúster (Corosync + pmxcfs) per sincronitzar la configuració entre nodes.
- Alta disponibilitat (HA) per reiniciar automàticament serveis en cas de fallada d’un node.
- Suport natiu per a emmagatzematge distribuït amb Ceph o ZFS replicat.
Per a HA real (sense pèrdua de dades en cas de fallada d’un node), cal emmagatzematge compartit: Ceph, un NAS/SAN amb NFS o iSCSI, o ZFS amb replicació. Un clúster sense emmagatzematge compartit permet HA de contenidors/VM però amb possible pèrdua de l’últim estat no replicat.
| Element | Recomanació |
|---|---|
| Nodes | Mínim 3 (per quòrum) |
| CPU | Suport de virtualització (Intel VT-x / AMD-V) |
| RAM | 8 GB mínim per node (producció: molt més) |
| Xarxa | 3 interfícies (recomanades): administració, clúster i producció (vegeu més avall) |
| Emmagatzematge | Discos addicionals per a Ceph/ZFS si es vol HA amb migració |
| DNS/hosts | Noms resolubles entre tots els nodes |
Aquest document parteix de la base que es disposa d’almenys tres nodes físics o virtuals amb característiques similars (CPU, RAM, discs) i connectivitat de xarxa entre ells. El nombre mínim recomanat per a un clúster amb quòrum robust és de 3 nodes.
Cada node del clúster tindrà tres interfícies de xarxa, cadascuna amb un propòsit diferent. Separar-les evita que el trànsit de gestió, el de sincronització del clúster i el de les màquines virtuals es facin nosa entre ells:
| Interfície | Funció | Rang d’exemple |
|---|---|---|
| Administració | Accés a la interfície web (:8006) i gestió SSH del
node |
192.168.10.0/24 |
| Clúster | Trànsit de Corosync (sincronització i quòrum) i de Ceph (replicació de dades) | 10.10.10.0/24 |
| Producció | Trànsit de les VM/CT (vmbr0), connectat a la xarxa de
l’organització |
10.0.2.0/24 |
La xarxa de clúster és la més sensible: Corosync necessita latències baixes i estables per mantenir el quòrum, i si hi conviu amb trànsit de VM o de gestió, qualsevol pic de trànsit pot provocar pèrdues de quòrum falses. Sempre que sigui possible, usa-hi una NIC física (o VLAN) exclusiva.
La interfície de producció normalment no té una IP
pròpia al node: és una interfície pont (vmbr0) que fa de
passarel·la perquè cada VM tingui la seva pròpia adreça dins la xarxa de
producció.
Amb tres nodes, les IPs d’exemple que farem servir en aquest document són:
| Node | Administració | Clúster |
|---|---|---|
| pve1 | 192.168.10.11 | 10.10.10.11 |
| pve2 | 192.168.10.12 | 10.10.10.12 |
| pve3 | 192.168.10.13 | 10.10.10.13 |
Descarrega la darrera ISO d’instal·lació des de la web oficial:
https://www.proxmox.com/en/downloadsGrava-la a un USB amb dd o Rufus:
sudo dd if=proxmox-ve_*.iso of=/dev/sdX bs=4M status=progress conv=fsyncVerifica bé el dispositiu /dev/sdX abans d’executar dd. Un error pot esborrar el disc equivocat.
Arrenca des de l’USB i selecciona Install Proxmox VE (Terminal UI).
Accepta la llicència (EULA).
Selecciona el disc de destinació i el sistema de fitxers
(ext4, xfs o zfs). Per a nodes
que formaran part d’un clúster amb replicació ZFS, es recomana zfs (RAID1) com a mínim.
Configura país, zona horària i teclat.
Defineix la contrasenya de root i un correu
d’administració (per a alertes).
Configura la xarxa d’administració: nom del node (FQDN), IP estàtica, màscara, gateway i DNS.
Cal fixar una IP estàtica i un FQDN
coherent (p. ex. pve1.thos.local) a cada node
abans de crear el clúster. Els canvis d’IP després de crear el clúster
són problemàtics.
Confirma i espera que finalitzi la instal·lació. El sistema reiniciarà.
Un cop reiniciat, accedeix a la interfície web:
https://<ip-del-node>:8006Usuari root, domini Linux PAM, i la
contrasenya definida durant la instal·lació.
Per defecte s’activa el dipòsit pve-enterprise, que
requereix subscripció. Des de Proxmox VE 9 (basat en Debian trixie), els
dipòsits es defineixen amb el format DEB822
(.sources), no amb l’antic format d’una sola línia
(.list):
Per a un entorn sense subscripció, cal desactivar
aquest dipòsit i crear-ne un de nou apuntant al dipòsit no-subscription:
Desactiva el dipòsit enterprise afegint-hi “Enabled: no”:
echo "Enabled: no" >> /etc/apt/sources.list.d/pve-enterprise.sourcesCrea el dipòsit no-subscription:
tee /etc/apt/sources.list.d/pve-no-subscription.sources > /dev/null <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOFAjusta trixie al nom en clau de la versió de Debian
sobre la qual es basi la versió de Proxmox instal·lada.
Alternativament, es pot desactivar el dipòsit enterprise editant
directament pve-enterprise.sources i comentant-ne
(#) totes les línies, o esborrant-lo. El camp Enabled: no és, però, la manera recomanada des del format
DEB822, ja que manté el fitxer com a referència sense haver-lo de tocar
línia per línia.
A més del dipòsit general pve-enterprise, Proxmox VE 9
en registra un tercer, específic per a
Ceph (ceph-tentacle), en un fitxer
separat. També requereix subscripció, i si no es desactiva, apt update fallarà amb un error 401 Unauthorized:
Err:9 https://enterprise.proxmox.com/debian/ceph-tentacle trixie InRelease
401 Unauthorized [IP: 51.91.38.34 443]Cal aplicar-hi el mateix tractament:
Desactiva el dipòsit enterprise de Ceph:
echo "Enabled: no" >> /etc/apt/sources.list.d/ceph.sourcesCrea el dipòsit no-subscription de Ceph:
tee /etc/apt/sources.list.d/ceph-no-subscription.sources > /dev/null <<'EOF'
Types: deb
URIs: http://download.proxmox.com/debian/ceph-tentacle
Suites: trixie
Components: no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOFceph-tentacle fa referència a la versió de Ceph (nom en
clau “Tentacle” = Ceph 20) que instal·la aquesta versió de Proxmox VE.
Si en el futur s’actualitza a una versió de Ceph diferent, el nom del
component canviarà en conseqüència.
Actualitza la llista de paquets:
apt updateActualitza el sistema:
apt full-upgradeEn un entorn sense subscripció, la interfície web mostra un avís
emergent cada cop que hi accedeixes. És només un missatge cosmètic
(Ext.Msg.show) definit al fitxer JavaScript de la
interfície; no afecta cap funcionalitat.
sed -Ezi.bak "s/(Ext\.Msg\.show\(\{\s+title: gettext\('No valid sub)/void(\{ \/\/\1/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
systemctl restart pveproxy.serviceRefresca la pàgina (Ctrl+Shift+R) i l’avís hauria
d’haver desaparegut.
Aquest canvi modifica un fitxer del mateix Proxmox, així que
es desfà cada cop que s’actualitza el paquet pve-manager (apt full-upgrade el
sobreescriu). Cal repetir l’ordre després de cada actualització.
Verifica que cada node resol correctament els altres (via DNS intern
o /etc/hosts):
# /etc/hosts a cada node
192.168.10.11 pve1.thos.local pve1
192.168.10.12 pve2.thos.local pve2
192.168.10.13 pve3.thos.local pve3Corosync (el servei de comunicació del clúster) és molt sensible a la
latència de xarxa i a talls de resolució de noms. Es recomana usar IPs a /etc/hosts com a mètode principal, no només DNS.
L’instal·lador només ha configurat un NIC (el
d’administració, vmbr0). Abans de crear el
clúster cal donar IP al segon NIC de cada node, perquè és la interfície
que farà servir Corosync i, més endavant, Ceph. Si no ho fas, aquesta
interfície no apareixerà com a opció en crear el clúster.
Opció A — Des de la interfície web (repeteix a cada node):
<node> → Systema → Xarxa → Crea → Linux Bridge(o selecciona directament el NIC físic si no vols crear-hi un pont).
- Nom: p. ex.
eth1(o el nom real del segon NIC, comenp0s8).- Adreça IPv4/CIDR:
10.10.10.11/24(pve1),10.10.10.12/24(pve2),10.10.10.13/24(pve3).- Sense gateway (no cal per a una xarxa aïllada de clúster).
Un cop creada, marca Reinicia automàticament.
Opció B — Per línia d’ordres (a cada node, ajustant la IP i el nom del NIC):
cat >> /etc/network/interfaces <<'EOF' auto eth1 iface eth1 inet static address 10.10.10.11/24 EOF ifreload -a
Substitueix eth1 pel nom real de la interfície
(comprova-ho amb ip a) i l’adreça que correspongui a cada
node. ifreload -a aplica els canvis a l’instant gràcies a ifupdown2, sense necessitat de reiniciar el node.
Verifica que els tres nodes es veuen entre ells per aquesta xarxa abans de continuar:
ping -c 2 10.10.10.12
ping -c 2 10.10.10.13Des de la interfície web del node 1: Datacenter → Clúster → Crea Clúster.
- Nom del clúster: p. ex.
thos-cluster.- Xarxa del clúster: seleccionar la interfície dedicada de la xarxa de clúster (
10.10.10.0/24), no la d’administració ni la de producció.
O per línia d’ordres:
pvecm create thos-clusterDes de cada node addicional (2 i 3), obté la informació de connexió
del node 1: Datacenter → Clúster → Configuració d'unió,
copia el token.
Per línia d’ordres, des del node 2:
pvecm add 10.10.10.11S’hi indica la IP del node 1 a la xarxa de clúster
(10.10.10.11), no la d’administració. pvecm add estableix la connexió pel canal de Corosync, així
que ha d’apuntar a la mateixa interfície que es va triar en crear el
clúster (apartat 2.1).
Se sol·licitarà la contrasenya de root del node 1 i es
validarà l’empremta digital del certificat (fingerprint).
No creïs mai un clúster nou des d’un node que ja tingui
VM/contenidors configurats i importants sense fer-ne primer una còpia de
seguretat. Unir-se a un clúster reescriu la configuració de pmxcfs del node.
Repeteix el mateix procés per al node 3.
pvecm statusSortida esperada:
Cluster information
-------------------
Name: thos-cluster
Config Version: 3
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Mon Jul 20 17:54:35 2026
Quorum provider: corosync_votequorum
Nodes: 3
Node ID: 0x00000001
Ring ID: 1.d
Quorate: Yes
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate
Membership information
----------------------
Nodeid Votes Name
0x00000001 1 10.10.10.11 (local)
0x00000002 1 10.10.10.12
0x00000003 1 10.10.10.13pvecm nodesSortida esperada:
Membership information
----------------------
Nodeid Votes Name
1 1 pve1 (local)
2 1 pve2
3 1 pve3El quòrum (majoria de vots) és essencial: amb 3 nodes, calen almenys 2 actius per continuar operant. Si es preveu un nombre parell de nodes, es pot afegir un QDevice (dispositiu de vot extern) per evitar situacions d’empat (split-brain).
L’alta disponibilitat amb migració en calent requereix que el disc de les VM sigui accessible des de tots els nodes. Opcions habituals:
Instal·lació des de la interfície web: Datacenter → <node> → Ceph → Install Ceph.
Canvia el dipòsit. Tria: Sense subscripció
Configura les interfícies de xarxa de producció i de clúster.
Repeteix la instal·lació als nodes 2 i 3.
Alternativa:
En lloc de fer la configuració per la interfície gràfica, per línia d’ordres a cada node:
pveceph install
pveceph init --network 10.10.10.0/24
pveceph mon createCeph fa servir la xarxa de clúster
(10.10.10.0/24), no la d’administració. Així el trànsit de
replicació de dades no interfereix amb l’accés a la interfície web ni
amb Corosync (que ja hi conviu, però és preferible a barrejar-ho amb la
xarxa de gestió).
Crea els OSD (un per cada disc dedicat a Ceph) a cada node:
Alternativa:
En lloc de fer la configuració per la interfície gràfica, per línia d’ordres a cada node:
pveceph osd create /dev/sdbEl banc només s’ha de crear al primer node.
Crea un pool de tipus RBD per a discs de VM.
Alternativa:
En lloc de fer la configuració per la interfície gràfica, per línia d’ordres:
pveceph pool create thos-pool --add_storagesCeph necessita, com a mínim, 3 nodes amb discos dedicats (no el disc del sistema) per garantir replicació i tolerància a fallades.
Si es disposa d’un NAS/SAN, es pot afegir com a emmagatzematge
compartit des de Datacenter → Storage → Add → NFS (o iSCSI), indicant el servidor i la ruta exportada. Aquesta
opció és més senzilla que Ceph, però depèn de la disponibilitat del NAS
com a punt únic de fallada.
Sense emmagatzematge compartit real, es pot fer servir ZFS
local a cada node amb replicació periòdica
(Datacenter → <VM> → Replication). No és HA
instantani (hi ha una finestra de pèrdua de dades igual a l’interval de
replicació), però és una opció vàlida per a laboratoris o entorns amb
pressupost limitat.
Abans de poder crear un contenidor hem de descarregar una plantilla.
pve1 → local → Plantilles CT → Plantilles
Tria la plantilla que vulguis descarregar i prem el botó Descarrega.
A la interfície d’administració prem el botó Crea CT
Assigna identificador, hostname i contrasenya. Marca Add to HA perquè s’afegeixi automàticament als recursos
d’alta disponibilitat.
Tria la plantilla.
Tria el pool d’emmagatzematge i l’espai de disc.
Tria la quantitat de CPU.
Tria la quantitat de memòria que s’assignarà al contenidor i la swap.
Configura la interfície de xarxa.
Assigna el DNS.
Confirma la creació del contenidor amb les característiques seleccionades.
Crea el contenidor i l’afegeix als recursos d’alta disponibilitat.
El contenidor ja està disponible al pve1
Si en la configuració has marcat Add to HA veuràs que el
contenidor ja apareix als recursos d’alta disponibilitat.
Pots modificar la configuració del recurs.
Si no has marcat Add to HA en la creació del contenidor
pots afegir-lo anant a Datacenter → HA → Recursos → Afegeix
- Selecciona la VM o contenidor.
- Max. Reinicis: nombre d’intents de reinici en el mateix node abans de provar-ne un altre.
- Max. Trasllats: nombre d’intents de migració a altres nodes.
- Failback: equivalent invers de l’antic
nofailback— actiu per defecte, fa que el recurs torni al node original un cop es recupera. Desactiva’l si vols que s’hi quedi on hagi acabat després d’un failover.
O per línia d’ordres:
ha-manager add vm:100 --max_restart 2 --max_relocate 2Verifica l’estat dels recursos HA:
ha-manager statusUn cop afegit, ja el pots incloure a una regla d’afinitat si cal.
A partir de Proxmox VE 9, els antics Grups HA han estat substituïts per les Regles d’afinitat (Affinity Rules), més flexibles. Si vens d’una versió anterior, els grups es migren automàticament a regles equivalents en actualitzar.
Hi ha dos tipus de regles:
- Regla d’afinitat de node (node affinity): defineix a quins nodes es prefereix (o es restringeix) executar un recurs, amb prioritats — equivalent directe dels antics grups.
- Regla d’afinitat de recurs (resource affinity): defineix si dos o més recursos han d’anar junts al mateix node (p. ex. una app i la seva base de dades) o separats (p. ex. dues rèpliques del mateix servei, per repartir el risc de fallada).
Datacenter → HA → Affinity Rules → HA Node Affinity Rules → Afegeix
- Nom de la regla: p. ex.
regla-prioritaria.- Selecciona els nodes membres i assigna-hi prioritat (nombre més alt = més prioritat).
strict: equivalent alrestricteddels antics grups — si està marcat, el recurs només es pot executar als nodes de la regla.
O per línia d’ordres:
ha-manager rules add node-affinity regla-prioritaria \
--resources vm:100 \
--nodes "pve1:2,pve2:1"| Estat | Significat |
|---|---|
started |
En execució i gestionat per HA |
stopped |
Aturat intencionadament |
fence |
Node considerat no disponible, en procés d’aïllament |
recovery |
Recuperant el recurs en un altre node |
error |
S’ha superat el nombre màxim d’intents |
Quan un node deixa de respondre, el clúster l’ha de fer fence (aïllar-lo) abans de poder arrencar les seves VM/CT en un altre node, per evitar que el mateix disc s’utilitzi simultàniament des de dos llocs (split-brain a nivell de disc). En un entorn de laboratori sense fencing per maquinari (IPMI/iLO/iDRAC), Proxmox usa el mecanisme de watchdog del mateix node com a fencing per programari.
Des de Proxmox VE 9.2, la vista Datacenter → HA inclou
un interruptor general Arm HA / Disarm HA. Amb “Disarm
HA” el clúster deixa d’actuar sobre els recursos HA (útil durant
manteniment, per evitar migracions no desitjades), sense haver
d’eliminar cap recurs ni regla. Assegura’t que estigui en Arm
HA abans de fer la prova de failover.
Amb una VM en estat started dins de HA, es pot simular
una fallada al node on s’executa:
# Al node que allotja la VM
echo b > /proc/sysrq-triggerAquesta ordre força un reinici immediat i brusc del node (equivalent a tallar l’alimentació). Fes-la servir només en un entorn de proves, mai en producció sense avisar.
Observa des d’un altre node com el clúster detecta la pèrdua de quòrum del node caigut, l’aïlla (fence) i migra/arrenca la VM en un node disponible:
watch ha-manager statusDatacenter → Backup amb un Storage de tipus Directory/NFS dedicat, i planificar còpies
periòdiques (vzdump).pvecm status i configurar alertes de correu
(Datacenter → Notifications).| Símptoma | Causa probable | Solució |
|---|---|---|
pvecm status mostra Quorate: No |
Pèrdua de connexió entre nodes o majoria de nodes caiguts | Revisar xarxa de Corosync, reiniciar pve-cluster |
| Un node no s’uneix al clúster | IP/FQDN inconsistent, rellotges dessincronitzats | Verificar /etc/hosts, sincronitzar hora amb chrony |
| VM en HA no migra en cas de fallada | Sense emmagatzematge compartit | Configurar Ceph, NFS/iSCSI o replicació ZFS |
Recurs HA en estat error |
S’ha superat max_restart/max_relocate |
Investigar el log (journalctl -u pve-ha-lrm), netejar
l’error amb ha-manager set |
| Node “zombi” (sembla actiu però no respon) | Fencing per watchdog no ha actuat | Revisar configuració de watchdog i BMC/IPMI si n’hi ha |
| Recurs | URL |
|---|---|
| Web oficial | https://www.proxmox.com |
| Documentació / Wiki | https://pve.proxmox.com/wiki |
| Descàrregues (ISO) | https://www.proxmox.com/en/downloads |
| Dipòsit de codi | https://git.proxmox.com |
| Documentació de Ceph dins Proxmox | https://pve.proxmox.com/wiki/Deploy_Hyper-Converged_Ceph_Cluster |
| Documentació de l’HA Manager | https://pve.proxmox.com/wiki/High_Availability |
| Fòrum oficial | https://forum.proxmox.com |
| Botiga (subscripcions) | https://shop.proxmox.com |