1 Alta disponibilità
Panoramica
L'alta disponibilità (HA) è in genere richiesta nelle infrastrutture critiche che non possono permettersi praticamente alcun downtime. Quindi, per qualsiasi servizio che possa guastarsi, deve essere previsto un'opzione di failover per subentrare nel caso in cui il servizio corrente si guasti.
Zabbix offre una soluzione di alta disponibilità nativa facile da configurare e che non richiede alcuna esperienza pregressa in ambito HA. La HA nativa di Zabbix può essere utile come ulteriore livello di protezione contro guasti software/hardware di Zabbix server oppure per ridurre il downtime dovuto alla manutenzione.
Nella modalità di alta disponibilità di Zabbix, più Zabbix server vengono eseguiti come nodi in un cluster. Mentre uno Zabbix server nel cluster è attivo, gli altri sono in standby, pronti a subentrare se necessario.

Il passaggio a Zabbix HA non è vincolante. È possibile tornare in qualsiasi momento al funzionamento autonomo.
Vedi anche: Dettagli di implementazione
Abilitazione dell'alta disponibilità
Avvio di Zabbix server come nodo del cluster
Sono necessari due parametri nella configurazione del server per avviare Zabbix server come nodo del cluster:
- il parametro
HANodeNamedeve essere specificato per ogni Zabbix server che sarà un nodo del cluster HA.
Questo è un identificatore univoco del nodo (ad esempio, zabbix-node-01) con cui il server verrà indicato nelle configurazioni di agent e proxy.
Se non si specifica HANodeName, il server verrà avviato in modalità standalone.
- il parametro
NodeAddressdeve essere specificato per ogni nodo.
Il parametro NodeAddress (address:port) verrà utilizzato dal frontend di Zabbix per connettersi al nodo server attivo.
NodeAddress deve corrispondere all'IP o al nome FQDN del rispettivo Zabbix server.
Riavvia tutti i Zabbix server dopo aver apportato modifiche ai file di configurazione. A questo punto verranno avviati come nodi del cluster. Il nuovo stato dei server può essere visualizzato in Reports > System information e anche eseguendo:
zabbix_server -R ha_status
Questo comando a runtime registrerà lo stato attuale del cluster HA nel log di Zabbix server (e su stdout):

Preparazione del frontend
Assicurati che l'indirizzo address:port di Zabbix server non sia definito nella configurazione del frontend (si trova in conf/zabbix.conf.php nella directory dei file del frontend).

Il frontend di Zabbix rileverà automaticamente il nodo attivo leggendo le impostazioni dalla tabella nodes nel database di Zabbix. L'indirizzo del nodo attivo verrà utilizzato come indirizzo di Zabbix server.
Configurazione del proxy
I nodi del cluster HA (server) devono essere elencati nella configurazione di un proxy Zabbix passivo o attivo.
Per un proxy passivo, i nomi dei nodi devono essere elencati nel parametro Server del proxy, separati da una virgola.
Server=zabbix-node-01,zabbix-node-02
Per un proxy attivo, i nomi dei nodi devono essere elencati nel parametro Server del proxy, separati da un punto e virgola.
Server=zabbix-node-01;zabbix-node-02
Configurazione dell'agent
I nodi del cluster HA (server) devono essere elencati nella configurazione di Zabbix agent o Zabbix agent 2.

Per abilitare i controlli passivi, i nomi dei nodi devono essere elencati nel parametro Server parameter, separati da una virgola.
Server=zabbix-node-01,zabbix-node-02
Per abilitare i controlli attivi, i nomi dei nodi devono essere elencati nel parametro ServerActive parameter. Si noti che per i controlli attivi i nodi devono essere separati da una virgola da eventuali altri server, mentre i nodi stessi devono essere separati da un punto e virgola, ad esempio:
ServerActive=zabbix-node-01;zabbix-node-02
Failover al nodo di standby
Zabbix eseguirà automaticamente il failover su un altro nodo se il nodo attivo si arresta. Perché il failover avvenga, deve esserci almeno un nodo in stato di standby.
Quanto sarà rapido il failover? Tutti i nodi aggiornano il proprio ultimo tempo di accesso (e lo stato, se cambia) ogni 5 secondi. Quindi:
- Se il nodo attivo si arresta e riesce a segnalare il proprio stato come "stopped", un altro nodo subentrerà entro 5 secondi.
- Se il nodo attivo si arresta/diventa non disponibile senza riuscire ad aggiornare il proprio stato, i nodi di standby attenderanno il ritardo di failover + 5 secondi prima di subentrare.
Il ritardo di failover è configurabile, con intervallo supportato tra 10 secondi e 15 minuti (un minuto per impostazione predefinita). Per modificare il ritardo di failover, puoi eseguire:
zabbix_server -R ha_set_failover_delay=5m
Gestione del cluster HA
Lo stato corrente del cluster HA può essere gestito utilizzando le opzioni dedicate di runtime control:
ha_status- registra lo stato del cluster HA nel log del server Zabbix (e su stdout);ha_remove_node=target- rimuove un nodo HA identificato dal suo<target>- nome o ID del nodo (nome/ID possono essere ottenuti dall'output dell'esecuzione diha_status), ad esempio:
zabbix_server -R ha_remove_node=zabbix-node-02
Nota che i nodi attivi/in standby non possono essere rimossi.
ha_set_failover_delay=delay- imposta il ritardo di failover dell'HA (tra 10 secondi e 15 minuti; sono supportati i suffissi di tempo, ad esempio 10s, 1m).
Lo stato del nodo può essere monitorato:
- In Reports > System information.
- Nel widget della dashboard System information.
- Utilizzando l'opzione
ha_statusdi runtime control del server (vedi sopra).
L'item interno zabbix[cluster,discovery,nodes] può essere utilizzato per la discovery dei nodi, poiché restituisce un JSON con le informazioni sui nodi ad alta disponibilità.
Disabilitazione del cluster HA
Per disabilitare un cluster ad alta disponibilità:
- Creare copie di backup dei file di configurazione2.
- Arrestare i nodi in standby.
- Rimuovere il parametro HANodeName dal server primario attivo.
- Riavviare il server primario (si avvierà in modalità standalone).
Aggiornamento del cluster HA
Per eseguire un aggiornamento di versione principale per i nodi HA:
- Arrestare tutti i nodi.
- Creare un backup completo del database.
- Se il database usa la replica, assicurarsi che tutti i nodi siano sincronizzati e non presentino problemi. Non eseguire l'aggiornamento se la replica è interrotta.
- Selezionare un singolo nodo che eseguirà l'aggiornamento del database, modificare la sua configurazione in modalità standalone commentando
HANodeNamee aggiornarlo. - Assicurarsi che l'aggiornamento del database sia completamente terminato (System information deve mostrare che Zabbix server è in esecuzione).
- Riavviare il nodo in modalità HA.
- Aggiornare e avviare il resto dei nodi (non è necessario modificarli in modalità standalone, poiché a questo punto il database è già stato aggiornato).
In un aggiornamento di versione minore è sufficiente aggiornare il primo nodo, assicurarsi che sia stato aggiornato e sia in esecuzione, quindi avviare l'aggiornamento sul nodo successivo.
Dettagli di implementazione
Il cluster ad alta disponibilità (HA) è una soluzione opzionale ed è supportato per Zabbix server. La soluzione HA nativa è progettata per essere semplice da usare, funziona tra siti diversi e non ha requisiti specifici per i database riconosciuti da Zabbix. Gli utenti sono liberi di usare la soluzione HA nativa di Zabbix oppure una soluzione HA di terze parti, a seconda di ciò che si adatta meglio ai requisiti di alta disponibilità nel loro ambiente.
La soluzione è composta da più istanze o nodi zabbix_server.
Ogni nodo:
- È configurato separatamente.
- Usa lo stesso database.
- Può avere diverse modalità: active, standby, unavailable, stopped.
Solo un nodo può essere active (in esecuzione) alla volta. Un nodo standby esegue solo un processo - l'HA manager. Un nodo standby non esegue raccolta dati, elaborazione o altre attività normali del server; non ascolta sulle porte; ha un numero minimo di connessioni al database.
Sia i nodi active sia quelli standby aggiornano il proprio ultimo tempo di accesso ogni 5 secondi.
Ogni nodo standby monitora l'ultimo tempo di accesso del nodo active.
Se l'ultimo tempo di accesso del nodo active supera i secondi di 'failover delay', il nodo standby passa a essere il nodo active e assegna lo stato unavailable al nodo precedentemente active.
Il nodo active monitora la propria connettività al database - se viene persa per più di failover delay-5 secondi, deve interrompere tutta l'elaborazione e passare alla modalità standby.
Il nodo active monitora anche lo stato dei nodi standby - se l'ultimo tempo di accesso di un nodo standby supera i secondi di 'failover delay', al nodo standby viene assegnato lo stato unavailable.
I nodi sono progettati per essere compatibili tra le versioni minori di Zabbix.