🍺 Buy me a beer
🛟

Alta Affidabilità

Ridondanza non è alta affidabilità: serve anche rilevare il guasto e reagire senza un umano sveglio alle 3 di notte. VRRP, quorum, fencing, Pacemaker e il failover che hai davvero testato.

"Il cluster non ha fatto failover" — la frase che di solito segue "ma tanto era ridondante", detta davanti a un dashboard rosso alle 3 del mattino.

01 / 13

Cos'è davvero l'alta affidabilità

Non è "comprare due server invece di uno". È un sistema che si accorge da solo di essere rotto e reagisce prima che se ne accorga un utente.

💡 Il copilota che sa già pilotare

Avere un secondo pilota a bordo (ridondanza) non serve a niente se, quando il primo sviene, nessuno se ne accorge o il copilota non sa prendere i comandi. L'alta affidabilità vera richiede tre cose insieme: un componente ridondante (il copilota c'è), un modo di rilevare il guasto (qualcuno controlla che il pilota respiri) e un meccanismo di failover automatico (il copilota prende i comandi senza dover chiedere permesso). Togli anche solo uno di questi tre pezzi, e la ridondanza è solo hardware che costa e non ti salva alle 3 di notte.

📊 Gli "9" di uptime: cosa significano davvero in minuti

DisponibilitàDowntime/annoDowntime/meseRealismo
99% ("due nove")~3,65 giorni~7,3 oreUn server singolo senza troppe pretese
99,9% ("tre nove")~8,76 ore~43 minutiObiettivo ragionevole per la maggior parte dei servizi interni
99,99% ("quattro nove")~52,6 minuti~4,3 minutiRichiede HA vera: automazione, non processi manuali
99,999% ("cinque nove")~5,26 minuti~26 secondiCostoso, multi-sito, per pochi servizi che lo giustificano davvero
⚠️ Ogni "nove" in più costa molto più del precedente: più nodi, più siti, più automazione, più test. Prima di rincorrere i cinque nove, chiediti onestamente quale downtime il servizio può davvero permettersi — e quanto la tua azienda è disposta a spendere per evitarlo.

🔌 SPOF: il singolo punto di guasto

Un Single Point of Failure è qualsiasi componente la cui rottura, da sola, porta giù l'intero servizio. Non è solo il server: può essere l'alimentatore, lo switch di rete, il singolo tecnico che sa riavviare quel servizio, o il certificato TLS che nessuno ha messo in scadenza automatica. L'HA seria comincia da un esercizio noioso: elencare ogni componente e chiedersi "se questo muore adesso, cosa succede?"

🎯 RTO e RPO: i due numeri che contano

RTO (Recovery Time Objective) è quanto tempo puoi stare giù prima che sia un problema serio. RPO (Recovery Point Objective) è quanti dati puoi permetterti di perdere (l'ultimo minuto? l'ultima ora?). Sono loro, non "vogliamo essere sempre su", a dettare quale architettura di HA ha senso — e quanto costa.

02 / 13

Active-passive vs active-active

I due pattern fondamentali su cui si costruisce (quasi) ogni sistema ridondante. Scegliere quello sbagliato costa caro in un senso o nell'altro.

Active-passive

Un nodo lavora, uno o più nodi aspettano pronti a subentrare. Semplice da ragionare (non c'è concorrenza tra nodi sullo stesso dato), ma spreca risorse (il passivo sta li' a fare poco) e il failover comporta quasi sempre un piccolo buco di servizio, per quanto breve.

Esempi tipici: coppia di firewall con VRRP (cap. 3), database primary/standby (rimando alla guida Database).

🔄 Active-active

Tutti i nodi lavorano contemporaneamente, il carico è distribuito tra loro. Zero spreco di risorse e continuità anche sotto carico elevato, ma serve gestire correttamente lo stato condiviso (sessioni, cache, dati) e la concorrenza tra nodi — molto più complesso da progettare bene.

Esempi tipici: pool di web server dietro un load balancer, cluster Galera MySQL multi-master.

📋 N+1, N+2: quanta ridondanza ti serve davvero

"N+1" significa: quanti nodi ti servono per reggere il carico (N), più uno di scorta per quando uno si rompe. "N+2" aggiunge un secondo margine, tipico se vuoi reggere un guasto mentre stai già facendo manutenzione pianificata su un altro nodo. Più margine costa di più ma assorbe guasti concorrenti, che nella vita reale capitano più spesso di quanto le statistiche indipendenti farebbero pensare (i guasti raramente sono davvero indipendenti: un aggiornamento buggato, un'ondata di caldo nel datacenter, colpiscono più nodi insieme).

03 / 13

Virtual IP & VRRP con keepalived

L'attrezzo di HA più semplice e più usato in assoluto: un indirizzo IP che "salta" da un nodo all'altro senza che i client se ne accorgano.

💡 Il numero di telefono che non cambia mai

Immagina un numero di telefono aziendale che risponde sempre, anche se il centralinista che lo risponde cambia. I client non chiamano "il server A" o "il server B": chiamano un indirizzo IP virtuale (VIP) che, in ogni momento, è assegnato a uno solo dei nodi del cluster (il "master"). Il protocollo VRRP (Virtual Router Redundancy Protocol) fa sì che i nodi si scambino "battiti cardiaci" e, se il master smette di rispondere, il backup con priorità più alta si prende il VIP in pochi secondi.

🛡️ keepalived: VRRP in pratica su Linux

/etc/keepalived/keepalived.conf — nodo MASTER
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150            # piu' alto = piu' probabile diventare master
    advert_int 1             # battito ogni 1 secondo

    authentication {
        auth_type PASS
        auth_pass segreta
    }

    virtual_ipaddress {
        192.168.1.100/24     # il VIP che i client useranno davvero
    }

    notify_master "/etc/keepalived/promoted.sh"
    notify_backup "/etc/keepalived/demoted.sh"
}

Sul nodo di backup, stessa configurazione ma con state BACKUP e priority più bassa (es. 100). Quando il master sparisce (crash, rete giù, servizio non risponde), il backup nota l'assenza dei battiti VRRP entro pochi secondi e si assegna il VIP da solo.

verificare chi ha il VIP adesso
ip addr show eth0 | grep 192.168.1.100
sudo systemctl status keepalived
journalctl -u keepalived -f
⚠️ VRRP da solo failovera l'IP, non verifica che il servizio sotto funzioni Se non usi uno script track_script che controlla davvero il servizio (es. nginx risponde? Postgres accetta connessioni?), keepalived tiene il VIP sul nodo master anche se il servizio sopra è morto ma la macchina è ancora accesa e risponde alla rete. Aggiungi sempre un controllo applicativo, non solo "il nodo è vivo".
04 / 13

Il load balancer come livello di HA

Distribuire il traffico tra più nodi non è solo scalabilità: è anche il modo più comune di nascondere ai client che un nodo è appena morto.

⚖️ HAProxy: health check attivi su un pool di server

/etc/haproxy/haproxy.cfg
backend web_pool
    balance leastconn
    option httpchk GET /health
    http-check expect status 200

    server web1 10.0.0.11:80 check inter 2000 rise 2 fall 3
    server web2 10.0.0.12:80 check inter 2000 rise 2 fall 3
    server web3 10.0.0.13:80 check inter 2000 rise 2 fall 3 backup

HAProxy interroga /health ogni inter millisecondi; un server viene tolto dal pool dopo fall controlli falliti consecutivi, e reinserito dopo rise controlli riusciti. Il flag backup tiene web3 fuori dal bilanciamento finché gli altri due non sono entrambi giù.

AlgoritmoQuando usarlo
round robinRichieste stateless, carico simile per richiesta
leastconnRichieste di durata variabile (alcune lunghe, altre brevi)
ip hash / sticky sessionServe che lo stesso client finisca sempre sullo stesso nodo (sessioni in memoria non condivisa)
💡 La coppia keepalived (VIP) + HAProxy (bilanciamento) gira spessissimo insieme: il VIP garantisce che i client raggiungano sempre "un" load balancer anche se quello attivo muore, HAProxy garantisce che il traffico arrivi solo ai backend sani dietro di lui. Due livelli di HA, uno sopra l'altro.
05 / 13

Quorum & split-brain

Il problema più sottile e più pericoloso dell'alta affidabilità: cosa succede quando i nodi non riescono più a parlarsi tra loro, ma sono tutti vivi.

💡 Due capitani sulla stessa nave

Immagina un cluster di 2 nodi dove ognuno crede di essere il primary perché ha perso i "battiti" dell'altro — ma l'altro è vivissimo, è solo la rete tra i due ad essersi rotta (un cavo tranciato, uno switch impazzito). Ora hai due capitani che danno ordini diversi alla stessa nave: due nodi che credono entrambi di poter scrivere sullo stesso storage condiviso, o servire lo stesso VIP. Questo si chiama split-brain, ed è uno degli scenari più distruttivi in assoluto: può corrompere dati silenziosamente, non solo causare downtime.

📊 Quorum: la soluzione è contare i voti, non la connessione

Il quorum risolve il problema chiedendo: "quanti nodi vedo io in questo momento, rispetto al totale del cluster?" Solo la partizione di rete che vede la maggioranza dei nodi (quorum) ha il diritto di continuare a operare; l'altra si blocca da sola, anche se i suoi nodi sono tecnicamente vivi.

Nodi totaliServe per il quorumNota
2Impossibile decidere da soliServe un terzo "arbitro" (quorum device / witness)
32 su 3Il minimo dispari ragionevole, tollera 1 guasto
53 su 5Tollera 2 guasti simultanei
💥 Un cluster a 2 nodi non ha, matematicamente, un modo sicuro di decidere da solo Se la rete tra i due si rompe, ognuno vede "l'altro" sparito e nessuno dei due può sapere se l'altro è morto o solo irraggiungibile. La soluzione pratica: un terzo voto che non dipende da nessuno dei due nodi — un piccolo quorum device (qdevice in Corosync) su una terza macchina, o più semplicemente passare a 3 nodi.
corosync.conf — quorum a 2 nodi (con eccezione esplicita)
quorum {
    provider: corosync_votequorum
    two_node: 1        # eccezione ESPLICITA per 2 nodi: entrambi votano "quorate" se si vedono
    wait_for_all: 1    # al primo avvio, aspetta di vedere tutti i nodi prima di agire
}
⚠️ two_node: 1 è un compromesso dichiarato: dice a Corosync "so che sono solo 2 nodi, lascia che ognuno agisca anche da solo se perde l'altro". Funziona solo in combinazione con il fencing (cap. 6): senza fencing, questa configurazione è esattamente la ricetta per uno split-brain.
06 / 13

Fencing & STONITH

Il nome più brutale dell'informatica è anche uno dei concetti più importanti: a volte, per essere sicuri, devi spegnere qualcosa con la forza.

🔥 STONITH: Shoot The Other Node In The Head

Non è umorismo da sysadmin stanchi (anche se un po' sì): è il nome tecnico reale del meccanismo. Quando un cluster sospetta che un nodo sia "cattivo" (irraggiungibile, ma potenzialmente ancora vivo e scrivente), l'unico modo certo di evitare uno split-brain è spegnerlo fisicamente o isolarlo dalla rete/storage, non semplicemente "smettere di parlargli". Se non puoi essere sicuro che sia morto, uccidilo tu.

Power fencing

Il metodo più solido: il cluster comanda una presa di corrente intelligente (PDU) o l'interfaccia di gestione remota del server (IPMI, iLO, iDRAC) per spegnere fisicamente il nodo sospetto. Se non ha corrente, non può scrivere da nessuna parte: fine della storia.

🔌 Fencing di storage / watchdog

Alternative quando il power fencing non è disponibile: SBD (Storage-Based Death) usa un disco condiviso come "lavagna" su cui i nodi si dicono a vicenda "sono vivo", combinato con un watchdog hardware che riavvia il nodo se smette di aggiornare la lavagna in tempo.

pcs: configurare un fencing device IPMI
pcs stonith create fence_nodo1 fence_ipmilan \
  pcmk_host_list="nodo1" ipaddr="10.0.0.101" \
  login="admin" passwd="segreta" lanplus=1

pcs stonith status
pcs stonith fence nodo1   # testa il fencing manualmente, DA FARE prima di fidarsene
💥 Un cluster Pacemaker senza fencing configurato è peggio di nessun cluster Senza un modo certo di eliminare un nodo sospetto, il cluster user resource manager può avviare la stessa risorsa (un database, un filesystem condiviso) su due nodi contemporaneamente convinto che l'altro sia morto — il risultato tipico è corruzione dei dati, non solo downtime. Non disabilitare mai stonith-enabled "per velocizzare i test": è l'esatto scenario per cui il fencing esiste.
07 / 13

Pacemaker & Corosync

Lo stack di cluster resource manager standard su Linux: chi decide cosa gira dove, e con quali regole.

💡 Due lavori distinti

Corosync è il "sistema nervoso": si occupa di far sapere ai nodi chi c'è, chi manca, e di calcolare il quorum (cap. 5). Pacemaker è il "cervello decisionale": usa le informazioni di Corosync per decidere quali risorse (un VIP, un servizio, un filesystem) devono girare su quale nodo, e le sposta quando serve — chiamando il fencing (cap. 6) quando necessario.

installazione & setup base (Debian/Ubuntu)
sudo apt install pacemaker corosync pcs
sudo systemctl enable --now pcsd

# Autentica i nodi tra loro (una volta, da uno qualsiasi)
sudo pcs host auth nodo1 nodo2 nodo3 -u hacluster

# Crea il cluster: genera corosync.conf su tutti i nodi indicati
sudo pcs cluster setup mio_cluster nodo1 nodo2 nodo3
sudo pcs cluster start --all
sudo pcs cluster enable --all
creare risorse: un VIP e un servizio, vincolati insieme
-- Un IP virtuale gestito dal cluster stesso (alternativa a keepalived, dentro Pacemaker)
pcs resource create vip_cluster ocf:heartbeat:IPaddr2 \
  ip=192.168.1.100 cidr_netmask=24 --group grp_servizio

pcs resource create nginx_svc systemd:nginx --group grp_servizio

-- Un gruppo tiene le risorse SEMPRE sullo stesso nodo, nello stesso ordine di avvio
pcs status
ConstraintA cosa serve
colocationDue risorse devono (o non devono) stare sullo stesso nodo
orderUna risorsa deve partire solo dopo che un'altra è già su
locationPreferenza/divieto per una risorsa di girare su un nodo specifico
💡 Non serve reinventare tutto a mano: Pacemaker ha decine di "resource agent" (ocf:heartbeat:*) già pronti per i casi comuni — IP virtuali, filesystem, database, server web. Cerca prima se esiste già l'agent giusto prima di scriverne uno custom.
08 / 13

HA a livello dati

Il livello più delicato: qui non basta "far ripartire il servizio altrove", perché i dati devono essere lì, coerenti, quando ripartono.

🐬 Non reinventare la ruota: è già una guida a sé

Replicare un database (PostgreSQL streaming replication, MySQL/MariaDB con GTID, failover con Patroni/Orchestrator) è l'argomento centrale della guida PostgreSQL, MySQL & SQL, capitolo 12: setup passo passo, monitoraggio del lag, promozione di uno standby, e la manutenzione continua di una replica. Qui vale solo ribadire il principio che lega tutto insieme.

💡 Il teorema CAP, in una frase

Quando la rete si spezza (partition), un sistema distribuito deve scegliere tra Consistency (tutti i nodi vedono sempre lo stesso dato) e Availability (il sistema risponde comunque, anche isolato). Non puoi avere entrambe al 100% durante una partizione di rete — questo è il teorema CAP. Un database relazionale con replica sincrona sceglie tipicamente coerenza (si blocca piuttosto che rispondere con dati potenzialmente vecchi); un sistema eventually-consistent sceglie disponibilità (risponde sempre, ma potresti leggere un dato non aggiornatissimo).

💡 Questa è anche la ragione per cui l'HA sui dati è strutturalmente più difficile di quella su un web server stateless: un web server duplicato non ha "memoria" da tenere coerente, un database sì. Progetta sempre l'HA partendo dal livello dati, non aggiungendola come ripensamento.
09 / 13

DNS failover & GSLB

Quando VRRP non basta più perché i due nodi non sono nella stessa rete locale, ma in due datacenter diversi.

🌐 DNS con health check

Alcuni provider DNS (Route 53, Cloudflare, PowerDNS con moduli dedicati) possono monitorare attivamente gli endpoint dietro un record e smettere di restituirlo se risulta non sano, restituendo solo gli IP dei siti/nodi ancora vivi. È il modo più semplice di fare failover tra datacenter geograficamente distanti, dove un VIP Layer 2 (VRRP) non può funzionare.

🕑 Il problema del TTL

I resolver DNS (e i client) cachano le risposte per il tempo indicato dal TTL. Un TTL alto (es. 3600s) significa che, anche se il DNS smette di restituire il nodo morto, alcuni client continueranno a provare quell'IP per fino a un'ora. Per un failover DNS reattivo servono TTL bassi (30-60s) — a costo di più query DNS in generale.

🌎 GSLB: instradare per posizione o salute

Il Global Server Load Balancing estende l'idea: non solo "smetti di rispondere con il nodo morto", ma "rispondi con il datacenter più vicino/più sano all'utente che chiede". Serve quando l'HA multi-sito diventa anche una questione di latenza, non solo di sopravvivenza.

⚠️ Il DNS failover è sempre più lento di un failover Layer 2/3 locale (VRRP, load balancer): non fidartene come unico livello di HA per un servizio con RTO stretto. È ottimo come rete di sicurezza tra siti, non come sostituto dell'HA dentro un sito.
10 / 13

Health check & monitoring per l'HA

Ogni meccanismo di failover di questa guida dipende da una cosa sola: sapere, in modo affidabile, se qualcosa è vivo o morto.

🔍 Probe attivi vs passivi

Un probe attivo interroga periodicamente il servizio (HTTP GET su /health, query SQL di test) chiedendo esplicitamente "stai bene?". Un controllo passivo osserva il traffico reale e nota se le richieste vere iniziano a fallire, senza generare traffico extra. I sistemi seri usano entrambi: il passivo è più realistico (misura l'esperienza utente vera), l'attivo rileva problemi anche quando non c'è traffico.

⚖️ Il compromesso sui timeout

Timeout troppo aggressivi (controllo ogni secondo, 1 fallimento = fuori) causano flapping: un nodo momentaneamente lento viene espulso e riammesso in continuazione, peggiorando la stabilità invece di migliorarla. Timeout troppo permissivi (controllo ogni minuto, serve 10 fallimenti) lasciano gli utenti a sbattere contro un nodo morto per minuti. Il valore giusto dipende dal servizio: un load balancer HTTP può permettersi controlli aggressivi (secondi), un cluster di storage con failover costoso no.

💡 Cosa controllare non è ovvio: "la porta risponde" è il controllo più debole (un processo bloccato può ancora accettare connessioni TCP senza rispondere davvero). Un endpoint /health dedicato che verifica anche le dipendenze critiche (connessione al database, spazio disco, thread pool non esaurito) dà un segnale molto più onesto.
11 / 13

HA in pratica: esempi reali

Come questi pezzi si compongono davvero, in stack che probabilmente hai già visto o dovrai costruire.

🏫 Proxmox VE cluster

Un cluster Proxmox VE usa esattamente Corosync per membership e quorum tra i nodi fisici, con un HA Manager integrato che, se un nodo host muore, riavvia le VM/container che ospitava su un altro nodo del cluster — a patto che lo storage sia condiviso (Ceph, NFS, ZFS via iSCSI) e non locale al nodo caduto.

⚙️ Lo stack web classico

keepalived (VIP) davanti a una coppia di HAProxy → pool di web server stateless dietro → PostgreSQL con streaming replication gestita da Patroni per il failover automatico del database. Ogni livello ha il suo meccanismo di HA, e insieme coprono rete, applicazione e dati.

☸️ Kubernetes: HA "by design"

Un cluster Kubernetes incorpora molti di questi concetti nel suo modello: il control plane può girare su più nodi con etcd (che usa un protocollo di consenso simile nello spirito al quorum di Corosync), i Pod vengono riavviati automaticamente su nodi sani (liveness/readiness probe = health check), e i Service fanno da load balancer interno verso repliche sane. Non elimina la necessità di capire questi concetti: li automatizza, ma solo se li configuri correttamente (replica count, PodDisruptionBudget, anti-affinity tra repliche).

12 / 13

Testare il failover

Un failover mai provato di proposito è una teoria, non un piano. E le teorie falliscono proprio quando iniziano a servire davvero.

💡 L'estintore mai usato

Esattamente come un backup mai ripristinato (vedi la guida Database), un cluster HA mai fatto fallire di proposito è uno Schrödinger's cluster: potrebbe funzionare, potrebbe no, e lo scopri nel peggior momento possibile. Il fencing configurato male, un constraint sbagliato, uno script notify che non gira con i permessi giusti: sono tutti bug che restano invisibili finché non li forzi a manifestarsi in un ambiente controllato.

🧪 Game day: rompi le cose di proposito

  • Spegni (fisicamente o via IPMI) il nodo che credi sia il primary, e cronometra quanto ci mette il failover
  • Stacca il cavo di rete tra i nodi (non solo verso l'esterno) per testare davvero lo split-brain e il fencing
  • Uccidi il processo del servizio (non il nodo intero) per verificare che il probe applicativo lo noti
  • Fai tutto questo durante orario lavorativo pianificato, con tutti avvisati — non un venerdì sera a sorpresa

📊 Misura, non indovinare

Ogni test di failover dovrebbe produrre numeri concreti: quanti secondi è durato il downtime reale (RTO effettivo vs obiettivo), quante richieste sono fallite durante la transizione, se i dati dopo il failover sono coerenti (RPO effettivo). Confronta questi numeri con gli obiettivi del cap. 1: se non li rispetti, sai esattamente cosa correggere prima del prossimo incidente vero.

Le organizzazioni più mature programmano questi test regolarmente (mensile o trimestrale), non una tantum dopo il setup iniziale: configurazioni cambiano, certificati scadono, script di notifica si rompono silenziosamente. Un test datato un anno fa non garantisce che il cluster funzioni oggi.
13 / 13

Cheat Sheet & Glossario

Tutto quello che serve, su una pagina. Bookmark questa sezione e dimentica il resto.

🛡️ keepalived / VRRP

stato & log
sudo systemctl status keepalived
ip addr show | grep VIP_ADDR
journalctl -u keepalived -f

⚖️ Pacemaker / Corosync (pcs)

cluster & risorse
pcs status
pcs cluster start --all
pcs resource move risorsa nodo2
corosync-quorumtool -s
pcs stonith fence nodoX

⚖️ HAProxy

stato & ricarica
sudo systemctl reload haproxy
# Pagina statistiche live, se abilitata in config:
# stats uri /haproxy?stats

📊 Quorum

chi vede chi, adesso
corosync-quorumtool -s
corosync-cfgtool -s

✓ Regole d'oro

  • Numero dispari di nodi per il quorum, o un quorum device se sono 2
  • Fencing sempre attivo e testato manualmente prima di fidarsene
  • Health check applicativi (non solo "la porta risponde")
  • RTO/RPO definiti prima di scegliere l'architettura, non dopo
  • Game day pianificati con regolarità, con numeri misurati
  • HA sui dati progettata dall'inizio, non aggiunta come ripensamento

✗ Errori classici

  • Cluster Pacemaker con stonith-enabled=false "per ora"
  • Cluster a 2 nodi senza quorum device né two_node consapevole
  • VRRP senza track_script: il VIP resta su un nodo con servizio morto
  • TTL DNS altissimi su record pensati per il failover
  • Nessun test di failover dal giorno del setup in produzione
  • Confondere ridondanza hardware con alta affidabilità vera

📚 Glossario essenziale

  • SPOF — Single Point of Failure, il componente la cui rottura porta giù tutto
  • RTO / RPO — tempo di ripristino accettabile / dati che puoi permetterti di perdere
  • Active-passive / active-active — i due pattern base di ridondanza
  • VIP — indirizzo IP virtuale che si sposta tra nodi
  • VRRP — protocollo su cui si basa keepalived per il failover del VIP
  • Quorum — maggioranza di nodi necessaria per agire in sicurezza
  • Split-brain — due partizioni del cluster credono entrambe di essere primarie
  • Fencing / STONITH — isolare/spegnere con certezza un nodo sospetto
  • Corosync — livello di membership e quorum del cluster Linux
  • Pacemaker — resource manager che decide cosa gira dove
  • CAP theorem — durante una partizione, scegli tra coerenza e disponibilità
  • GSLB — bilanciamento del traffico tra siti geografici diversi
  • Health check attivo / passivo — probe dedicato vs osservazione del traffico reale
  • Flapping — un nodo espulso e riammesso ripetutamente per soglie troppo strette
  • Game day — esercitazione pianificata di failure injection

📚 Risorse

  • clusterlabs.org — documentazione ufficiale Pacemaker/Corosync
  • keepalived.org — documentazione ufficiale keepalived
  • haproxy.org/#docs — documentazione ufficiale HAProxy
  • "Site Reliability Engineering" (Google, libro libero online) — il riferimento su SLO/SLA/error budget

🔗 Guide collegate

  • PostgreSQL, MySQL & SQL — replica e failover del database in dettaglio
  • Redis — Sentinel come esempio concreto di quorum e failover applicato alla cache
  • Networking — nftables, VPN e la rete sotto a tutto questo
  • Proxmox VE — cluster, quorum e HA manager in pratica
  • Ceph — quorum e failure domain applicati allo storage distribuito
  • Kubernetes — HA automatizzata a livello di orchestratore
  • Docker — il pool di container dietro il load balancer
🛟
Regola finale dello svogliato — la ridondanza che compri non ti salva da sola: ti salva la combinazione di rilevamento automatico, quorum che evita le decisioni sbagliate, fencing che rende sicure le decisioni giuste, e un test di failover fatto di proposito prima che la realtà te ne faccia fare uno a sorpresa. Il resto sono dettagli di implementazione, per quanto importanti.