Ricerca nel sito web

Come configurare e mantenere l'alta disponibilità/clustering in Linux


L'alta disponibilità (HA) si riferisce semplicemente alla qualità di un sistema di funzionare continuamente senza guasti per un lungo periodo di tempo. Le soluzioni HA possono essere implementate utilizzando hardware e/o software e una delle soluzioni comuni per implementare l'HA è il clustering.

In ambito informatico, un cluster è composto da due o più computer (comunemente noti come nodi o membri) che lavorano insieme per eseguire un'attività. In tale configurazione, solo un nodo fornisce il servizio, mentre i nodi secondari subentrano in caso di guasto.

I cluster si dividono in quattro tipologie principali:

  • Archiviazione: fornisce un'immagine coerente del file system tra i server di un cluster, consentendo ai server di leggere e scrivere simultaneamente su un singolo file system condiviso.
  • Alta disponibilità: elimina i singoli punti di guasto e, effettuando il failover dei servizi da un nodo del cluster all'altro nel caso in cui un nodo diventi inoperativo.
  • Bilanciamento del carico: invia richieste di servizi di rete a più nodi del cluster per bilanciare il carico delle richieste tra i nodi del cluster.
  • Alte prestazioni: effettuano elaborazioni parallele o simultanee, contribuendo così a migliorare le prestazioni delle applicazioni.

Un'altra soluzione ampiamente utilizzata per fornire HA è la replica (in particolare le repliche dei dati). La replica è il processo mediante il quale uno o più database (secondari) possono essere mantenuti sincronizzati con un singolo database primario (o master).

Per configurare un cluster, abbiamo bisogno di almeno due server. Ai fini di questa guida, utilizzeremo due server Linux:

  • Nodo1: 192.168.10.10
  • Nodo2: 192.168.10.11

In questo articolo, dimostreremo le nozioni di base su come distribuire, configurare e mantenere l'alta disponibilità/clustering in Ubuntu 16.04/18.04 e CentOS 7. Dimostreremo come aggiungere il servizio HTTP Nginx al cluster.

Configurazione delle impostazioni DNS locali su ciascun server

Affinché i due server possano comunicare tra loro, dobbiamo configurare le impostazioni DNS locali appropriate nel file /etc/hosts su entrambi i server.

Apri e modifica il file utilizzando il tuo editor della riga di comando preferito.

sudo vim /etc/hosts  

Aggiungi le seguenti voci con gli indirizzi IP effettivi dei tuoi server.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Salva le modifiche e chiudi il file.

Installazione del server Web Nginx

Ora installa il server web Nginx utilizzando i seguenti comandi.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Una volta completata l'installazione, avvia per ora il servizio Nginx e abilitalo all'avvio automatico all'avvio, quindi controlla se è attivo e funzionante utilizzando il comando systemctl.
Su Ubuntu, il servizio dovrebbe essere avviato automaticamente subito dopo aver completato la preconfigurazione del pacchetto, puoi semplicemente abilitarlo.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Dopo aver avviato il servizio Nginx, dobbiamo creare pagine web personalizzate per identificare e testare le operazioni su entrambi i server. Modificheremo il contenuto della pagina indice Nginx predefinita come mostrato.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Installazione e configurazione di Corosync e Pacemaker

Successivamente, dobbiamo installare Pacemaker, Corosync e PCS su ciascun nodo come segue.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Una volta completata l'installazione, assicurati che il demone pcs sia in esecuzione su entrambi i server.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Creazione del cluster

Durante l'installazione viene creato un utente di sistema chiamato “hacluster ”. Quindi dobbiamo impostare l'autenticazione necessaria per pcs. Iniziamo creando una nuova password per l'utente “hacluster ”, dobbiamo utilizzare la stessa password su tutti i server:

sudo passwd hacluster

Successivamente, su uno dei server (Nodo1), esegui il comando seguente per configurare l'autenticazione necessaria per pcs.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Ora crea un cluster e popolalo con alcuni nodi (il nome del cluster non può superare i 15 caratteri, in questo esempio abbiamo utilizzato examplecluster) sul server Node1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Ora abilita il cluster all'avvio e avvia il servizio.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Ora controlla se il servizio cluster è attivo e in esecuzione utilizzando il comando seguente.

sudo pcs status
OR
sudo crm_mon -1

Dall'output del comando precedente, puoi vedere che è presente un avviso relativo all'assenza di dispositivi STONITH, ma STONITH è ancora abilitato nel cluster. Inoltre, non sono state configurate risorse/servizi del cluster.

Configurazione delle opzioni del cluster

La prima opzione è disabilitare STONITH (o Spara all'altro nodo in testa), l'implementazione della scherma su Pacemaker.

Questo componente aiuta a proteggere i tuoi dati dal danneggiamento dovuto all'accesso simultaneo. Ai fini di questa guida, lo disabiliteremo poiché non abbiamo configurato alcun dispositivo.

Per disattivare STONITH, esegui il seguente comando:

sudo pcs property set stonith-enabled=false

Successivamente, ignora anche la politica Quorum eseguendo il seguente comando:

sudo pcs property set no-quorum-policy=ignore

Dopo aver impostato le opzioni di cui sopra, esegui il comando seguente per visualizzare l'elenco delle proprietà e assicurarti che le opzioni di cui sopra, stonith e la politica del quorum siano disabilitate.

sudo pcs property list

Aggiunta di un servizio risorsa/cluster

In questa sezione vedremo come aggiungere una risorsa cluster. Configureremo un IP mobile che è l'indirizzo IP che può essere immediatamente spostato da un server all'altro all'interno della stessa rete o data center. In breve, un IP mobile è un termine tecnico comune, utilizzato per IP che non sono strettamente legati a una singola interfaccia.

In questo caso, verrà utilizzato per supportare il failover in un cluster ad alta disponibilità. Tieni presente che gli IP mobili non sono solo per situazioni di failover, ma hanno alcuni altri casi d'uso. Dobbiamo configurare il cluster in modo tale che solo il membro attivo del cluster “possieda” o risponda all'IP mobile in un dato momento.

Aggiungeremo due risorse cluster: la risorsa dell'indirizzo IP mobile chiamata “floating_ip” e una risorsa per il server web Nginx chiamata “http_server”.

Per prima cosa inizia aggiungendo il float_ip come segue. In questo esempio, il nostro indirizzo IP mobile è 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

Dove :

  • floating_ip: è il nome del servizio.
  • "ocf:heartbeat:IPaddr2 ": indica a Pacemaker quale script utilizzare, IPaddr2 in questo caso, in quale spazio dei nomi si trova (pacemaker) e a quale standard è conforme ocf.
  • op monitor interval=60s”: indica a Pacemaker di verificare lo stato di questo servizio ogni minuto richiamando l'azione di monitoraggio dell'agente.

Quindi aggiungi la seconda risorsa, denominata http_server. In questo caso, l'agente delle risorse del servizio è ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Dopo aver aggiunto i servizi cluster, emettere il comando seguente per verificare lo stato delle risorse.

sudo pcs status resources

Osservando l'output del comando, sono state elencate le due risorse aggiunte: “floating_ip ” e “http_server ”. Il servizio float_ip è disattivato perché il nodo primario è in funzione.

Se hai un firewall abilitato sul tuo sistema, devi consentire tutto il traffico verso Nginx e tutti i servizi ad alta disponibilità attraverso il firewall per una corretta comunicazione tra i nodi:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Test di alta disponibilità/clustering

Il passaggio finale e importante è verificare che la nostra configurazione ad alta disponibilità funzioni. Apri un browser web e vai all'indirizzo 192.168.10.20. Dovresti vedere la pagina Nginx predefinita da node2.example.com come mostrato nello screenshot.

Per simulare un errore, esegui il comando seguente per arrestare il cluster su node2.example.com.

sudo pcs cluster stop http_server

Quindi ricarica la pagina su 192.168.10.20, ora dovresti accedere alla pagina Web Nginx predefinita da node1.example.com.

In alternativa, puoi simulare un errore dicendo al servizio di arrestarsi direttamente, senza arrestare il cluster su nessun nodo, utilizzando il seguente comando su uno dei nodi:

 
sudo crm_resource --resource http_server --force-stop 

Quindi devi eseguire crm_mon in modalità interattiva (l'impostazione predefinita), entro l'intervallo di monitoraggio di 2 minuti, dovresti essere in grado di vedere il cluster che avvisa che http_server non è riuscito e spostarlo ad un altro nodo.

Affinché i servizi cluster vengano eseguiti in modo efficiente, potrebbe essere necessario impostare alcuni vincoli. Puoi vedere la pagina man pcs (man pcs) per un elenco di tutti i comandi di utilizzo.

Per ulteriori informazioni su Corosync e Pacemaker, consulta: https://clusterlabs.org/

Riepilogo

In questa guida, abbiamo mostrato le nozioni di base su come distribuire, configurare e mantenere alta disponibilità/clustering/replica in Ubuntu 16.04/18.04 e CentOS 7. Abbiamo dimostrato come aggiungere il servizio HTTP Nginx a un cluster. Se hai qualche pensiero da condividere o domande, utilizza il modulo di feedback qui sotto.