This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved. |
1. Introduzione
1.1. Cluster, nodi e servizi di cluster
Quando distribuisci servizi critici e mission-critical come database o siti web di e-commerce, difficilmente ti affiderai all'host che esegue tali servizi sperando che funzioni a lungo, in modo stabile e senza intoppi. Piuttosto, terrai conto del possibile guasto di un host e ti assicurerai che altri host siano in standby per subentrare immediatamente nei servizi in caso di guasto (o failover), in modo che il guasto non sia nemmeno percepibile dall'esterno.
Un gruppo di host collegati in rete che collaborano per svolgere lo stesso compito è chiamato rete di computer o cluster di computer, o più semplicemente, cluster. Un cluster agisce e appare come un unico sistema all'esterno e organizza i propri host internamente affinché collaborino per svolgere il compito comune.
Un cluster può svolgere vari compiti; ad esempio, un cluster HPC può eseguire calcoli ad alte prestazioni, utilizzati, tra gli altri scenari, quando i calcoli richiedono molta più memoria di quella disponibile su un singolo computer. Se il cluster ha il compito di fornire alta disponibilità, viene anche chiamato cluster HA. Questo articolo riguarda i cluster HA, ovvero quando nel testo che segue ci riferiamo a un "cluster", intendiamo sempre un cluster HA.
Un cluster offre uno o più servizi al mondo esterno: i servizi del cluster, a volte chiamati "servizi in cluster". In un cluster, gli host che lo compongono sono chiamati nodi. In un dato momento, ogni servizio è fornito da un solo nodo. Se un nodo del cluster si guasta, tutti i servizi essenziali per la missione del cluster vengono spostati su uno degli altri nodi.
Per rendere trasparente qualsiasi failover, alcuni cluster forniscono un proprio indirizzo IP di cluster, talvolta indicato anche come indirizzo IP virtuale. L'indirizzo IP del cluster si riferisce sempre al nodo attivo ed è rappresentativo dell'intero cluster. In caso di failover, l'indirizzo IP viene trasferito a un altro nodo, precedentemente passivo, che diventa quindi il nodo attivo. Il client che comunica con il cluster può non accorgersi di un failover interno: usa lo stesso indirizzo IP, immutato, e non deve effettuare alcun switch.
Altri cluster non dispongono di un indirizzo IP del cluster. I cluster di database Oracle, nelle loro numerose varianti, ne sono un esempio lampante. Senza un indirizzo IP del cluster, il client deve mantenere un elenco degli indirizzi IP di tutti i nodi che potrebbero fornire il servizio. Se il nodo attivo si guasta, il client deve rilevarlo e switchare al nodo che ora fornisce il servizio.
1.2. Monitoraggio di un cluster
Checkmk è uno dei client che comunica con il cluster. In Checkmk, tutti i nodi di un cluster possono essere configurati e sottoposti a monitoraggio, indipendentemente dal modo in cui il software del cluster verifica internamente lo stato dei singoli nodi ed esegue, se necessario, un failover.
La maggior parte dei controlli che Checkmk esegue sui singoli nodi di un cluster riguarda le proprietà fisiche dei nodi, che sono indipendenti dal fatto che l'host appartenga o meno a un cluster. Esempi includono l'utilizzo della CPU e della memoria, i dischi locali, le interfacce di rete fisiche, ecc. Tuttavia, per la mappatura della funzione di cluster dei nodi in Checkmk, è necessario identificare quei servizi che definiscono il compito del cluster e per i quali potrebbe essere necessario un trasferimento su un altro nodo: i servizi del cluster.
Checkmk ti aiuta nel monitoraggio dei servizi del cluster. Ecco cosa devi fare:
Creare il cluster.
Selezionare i servizi del cluster.
Eseguire la scoperta del servizio per tutti gli host associati.
Come procedere è descritto nel prossimo capitolo utilizzando la seguente configurazione di esempio:

In Checkmk, un cluster di failover Windows deve essere configurato come un cluster HA composto da due nodi con server Microsoft SQL (MS SQL) installati. Si tratta di un cosiddetto cluster attivo/passivo, il che significa che solo uno, il nodo attivo, esegue un'istanza del database. L'altro nodo è passivo e diventa attivo solo in caso di failover, quando avvierà l'istanza del database e sostituirà il nodo guasto. I dati nell'istanza del database non sono memorizzati sui nodi stessi, ma su un supporto di archiviazione condiviso, ad esempio una rete di archiviazione (SAN), a cui sono collegati entrambi i nodi. La configurazione di esempio è composta dai seguenti componenti:
mssql-node01è il nodo attivo che esegue un'istanza di database attiva.mssql-node02è il nodo passivo.mssql-cluster01è il cluster a cui appartengono entrambi i nodi.
A differenza di questo esempio, è anche possibile che lo stesso nodo possa essere incluso in più di un cluster. Nell'ultimo capitolo imparerai come configurare tali cluster sovrapposti utilizzando una configurazione di esempio modificata.
2. Configurazione dei cluster e dei servizi di cluster
2.1. Creazione di un cluster
In Checkmk, i nodi e il cluster stesso vengono creati come host (host dei nodi e host del cluster), con un tipo di host speciale definito per un host del cluster.
Ecco alcuni punti da considerare prima di configurare un host di cluster:
L'host del cluster è un host virtuale da configurare con un indirizzo IP del cluster, se presente. Nel nostro esempio, supponiamo che il nome host del cluster sia risolvibile tramite DNS.
Gli host di cluster possono essere configurati allo stesso modo degli host "normali", ad esempio con tag host o gruppi di host.
Per tutti gli host partecipanti (questo significa sempre l'host del cluster e tutti i suoi host di nodo associati), le sorgenti dati devono essere configurate in modo identico, cioè, in particolare, alcuni non possono essere configurati tramite un agente Checkmk e altri tramite SNMP. Checkmk garantisce che un host del cluster possa essere creato solo se questo requisito è soddisfatto.
In un monitoraggio distribuito tutti gli host partecipanti devono essere assegnati allo stesso sito Checkmk.
Non tutti i controlli funzionano in una configurazione a cluster. Per i controlli che supportano il cluster, puoi trovare informazioni al riguardo nella pagina di manuale del plug-in. Puoi accedere alle pagine di manuale dal menu "Setup > Services > Catalog of check plug-ins".
Nel nostro esempio, i due host a due nodi mssql-node01 e mssql-node02 sono già stati creati e configurati come host.
Per scoprire come arrivare a questo punto, consulta l’articolo sul monitoraggio dei server Windows — e lì il capitolo sull’estensione dell’agente Windows standard con i plug-in, nel nostro caso i plug-in MS SQL Server.
Avvia la creazione del cluster dal menu Setup > Hosts > Hosts e poi dal menu Hosts > Add cluster:

Inserisci mssql-cluster01 come Host name e inserisci i due host dei nodi sotto Nodes.
Se hai a che fare con un cluster senza un indirizzo IP di cluster, dovrai fare una deviazione un po' scomoda, selezionando No IP nella box Network address per l'IP address family. Ma per evitare che l'host risulti "DOWN" nel monitoraggio, devi modificare il "Comando di controllo host" predefinito tramite la regola omonima — da Smart PING o PING a, ad esempio, lo stato del servizio da assegnare all'host del cluster — come verrà spiegato nella sezione successiva. Per ulteriori informazioni sui set di regole host, consulta l'articolo sulle regole. |
Completa la creazione con "Save & view folder" e attiva le modifiche.
2.2. Selezione dei servizi del cluster
Checkmk non può sapere quali dei servizi in esecuzione su un nodo siano locali e quali siano servizi di cluster — alcuni file system potrebbero essere locali, altri potrebbero essere montati solo sul nodo attivo. Lo stesso vale per i processi: mentre il servizio "Windows Timer" è molto probabilmente in esecuzione su tutti i nodi, una particolare istanza di database sarà disponibile solo sul nodo attivo.
Invece di lasciare che Checkmk indovini, seleziona i servizi del cluster con una regola.
Senza una regola, nessun servizio verrà assegnato al cluster.
In questo esempio supporremo che i nomi di tutti i servizi del cluster MS SQL Server inizino con MSSQL e che il file system nel dispositivo di archiviazione condiviso sia accessibile tramite l'unità D:
Inizia da Setup > Hosts > Hosts e clicca sul nome del cluster. Nella pagina Properties of host seleziona dal menu "Host > Clustered services". Verrai reindirizzato alla pagina del set di regole "Clustered services", dove potrai creare una nuova regola. Verrà quindi visualizzata la pagina "Add rule: Clustered services":

Indipendentemente dal fatto che gli host siano organizzati in cartelle e da come lo siano, assicurati di creare eventuali regole per i servizi del cluster in modo che si applichino agli host dei nodi su cui i servizi sono in esecuzione. Una regola di questo tipo non ha effetto su un host del cluster.
Nella box "Conditions", sotto "Folder", seleziona la cartella che contiene gli host dei nodi.
Abilita "Explicit hosts" e inserisci l'host del nodo attivo mssql-node01 e l'host del nodo passivo mssql-node02.
Quindi abilita "Services" e inserisci due voci:
"MSSQL" per tutti i servizi MS SQL il cui nome inizia con MSSQL e "Filesystem D:" per l'unità.
Le voci vengono interpretate come espressioni regolari.
Tutti i servizi che non sono definiti come servizi cluster saranno trattati come servizi locali da Checkmk.
Completa la creazione della regola con "Save" e attiva le modifiche.
2.3. Esegui la scoperta del servizio
Per tutti gli host partecipanti (host del cluster e dei nodi), alla fine è necessario eseguire una nuova scoperta del servizio in modo che tutti i servizi di cluster appena definiti vengano prima rimossi dai nodi e poi aggiunti al cluster.
In "Setup > Hosts > Hosts", seleziona prima tutti gli host coinvolti e poi scegli dal menu "Hosts > On Selected hosts > Run bulk service discovery". Nella pagina "Bulk discovery", la prima opzione "Add unmonitored services and new host labels" dovrebbe dare il risultato desiderato.
Fai clic su "Start" per avviare la scoperta del servizio per più host.
Una volta completato con successo — indicato dal messaggio "Bulk discovery successful" — esci e attiva le modifiche.
Per verificare se la selezione dei servizi del cluster ha portato al risultato desiderato, puoi elencare tutti i servizi ora assegnati al cluster:
In "Setup > Hosts > Hosts", nell'elenco degli host alla voce dell'host del cluster, clicca sul simbolo "
" per modificare i servizi.
Nella pagina seguente Services of host tutti i servizi del cluster sono elencati sotto "Monitored services":

D'altra parte, per gli host dei nodi, proprio quei servizi che sono stati spostati nel cluster ora non saranno più presenti nell'elenco dei servizi monitorati. Sull'host del nodo, puoi ritrovarli guardando alla fine dell'elenco dei servizi nella sezione Monitored clustered services (located on cluster host):

Se esegui check locali in un cluster in cui è stata applicata la regola "Clustered services", puoi utilizzare il set di regole "Local checks in Checkmk clusters" per influenzare il risultato scegliendo tra "Worst state" e "Best state". |
2.4. Scoperta automatica del servizio
Se lasci che la scoperta del servizio avvenga automaticamente tramite il discovery check, devi considerare un aspetto particolare. L'Discovery Check può eliminare automaticamente i servizi che scompaiono. Tuttavia, se un servizio in cluster si sposta da un nodo all'altro, potrebbe essere erroneamente registrato come scomparso e quindi eliminato. D'altra parte, se ometti questa opzione, i servizi che sono effettivamente scomparsi non verrebbero mai eliminati.
3. Cluster sovrapposti
È possibile che più cluster condividano uno o più nodi. Questi vengono quindi definiti cluster sovrapposti. Per i cluster sovrapposti, è necessaria una regola speciale per indicare a Checkmk quali servizi di cluster di un host con nodi condivisi devono essere assegnati a quale cluster.
Di seguito ti mostreremo la procedura di base per configurare un cluster sovrapposto modificando l'esempio del cluster MS SQL Server da un cluster attivo/passivo a uno attivo/attivo:

In questa configurazione, non solo MS SQL Server è installato su entrambi gli host dei nodi, ma su ciascuno dei due nodi è in esecuzione un'istanza di database separata. Entrambi i nodi accedono al supporto di archiviazione condiviso, ma su unità diverse. Questo esempio implementa un cluster sovrapposto al 100% perché i due nodi appartengono a entrambi i cluster.
Il vantaggio del cluster attivo/attivo è che le risorse disponibili dei due nodi vengono utilizzate in modo più efficiente. In caso di failover, il compito del nodo guasto viene assunto dal nodo alternativo, che quindi esegue entrambe le istanze del database.
Questa configurazione di esempio è quindi composta dai seguenti componenti:
mssql-node01è il primo nodo attivo che attualmente esegue l'istanza del databaseMSSQL Instance1.mssql-node02è il secondo nodo attivo che attualmente esegue l'istanza del databaseMSSQL Instance2.mssql-cluster01emssql-cluster02sono i due cluster a cui appartengono entrambi i nodi.
Per configurare un cluster attivo/attivo, devi solo modificare leggermente il primo passaggio della configurazione del cluster attivo/passivo:
Crea il primo cluster mssql-cluster01 come descritto sopra.
Poi crea il secondo cluster mssql-cluster02 con gli stessi due host dei nodi.
Nel secondo passaggio, invece di utilizzare il set di regole generale Clustered services per selezionare i servizi del cluster, usa il set di regole creato appositamente per i cluster sovrapposti Clustered services for overlapping clusters. Questo ti permette di definire in una regola i servizi del cluster che verranno rimossi dagli host dei nodi e aggiunti al cluster selezionato.
Per il nostro esempio con sovrapposizione al 100% abbiamo bisogno di due di queste regole: La prima regola definisce i servizi del cluster della prima istanza di database, che per impostazione predefinita girano sul primo host del nodo. Dato che in caso di failover questi servizi del cluster vengono trasferiti al secondo host del nodo, assegniamo i servizi a entrambi gli host del nodo. La seconda regola fa lo stesso per il secondo cluster e la seconda istanza di database.
Iniziamo con la prima regola:
In "Setup > General > Rule search" trova il set di regole "Clustered services for overlapping clusters" e cliccaci sopra.
Crea una nuova regola.
In "Assign services to the following cluster" inserisci l'mssql-cluster01 del cluster:

Nella box "Conditions", sotto "Folder", seleziona nuovamente la cartella che contiene gli host dei nodi.
Abilita "Explicit hosts" e inserisci entrambi gli host dei nodi.
Successivamente, attiva "Services" e inserisci due voci:
"MSSQL Instance1" per tutti i servizi MS SQL della prima istanza del database e "Filesystem D:" per l'unità:

Completa la creazione della prima regola con Save.
Crea quindi la seconda regola, questa volta per il secondo cluster mssql-cluster02 e di nuovo per entrambi gli host dei nodi.
In "Services" inserisci ora MSSQL Instance2 per tutti i servizi MS SQL della seconda istanza del database.
Il secondo host del nodo, su cui viene eseguita per impostazione predefinita la seconda istanza del database, accede al proprio supporto di archiviazione tramite un'unità diversa, nell'esempio seguente tramite l'unità E::

Salva anche questa regola e poi attiva le due modifiche.
Infine, esegui la scoperta del servizio come terzo e ultimo passaggio, proprio come descritto sopra: come Bulk discovery per tutti gli host associati, cioè i due host del cluster e i due host dei nodi.
Se più regole definiscono un servizio di cluster, la regola più specifica Clustered services for overlapping clusters con l'assegnazione esplicita a un cluster specifico ha la precedenza sulla regola più generica Clustered services. Per i due esempi presentati in questo articolo, ciò significa che le ultime due regole specifiche create non consentirebbero mai l'applicazione della regola generica creata nel primo esempio. |
