Alta disponibilità (HA) si riferisce semplicemente alla qualità di un sistema di funzionare ininterrottamente 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 l'implementazione dell'HA è il clustering.
In informatica, 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 con il/i nodo/i secondario/i che subentra in caso di errore.
I cluster si dividono in quattro tipi principali:
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:
In questo articolo, dimostreremo le basi su come distribuire, configurare e mantenere alta disponibilità/clustering in Ubuntu 16.04/18.04 e CentOS 7. Dimostreremo come aggiungere il servizio HTTP Nginx al cluster.
Affinché i due server possano comunicare tra loro, è necessario configurare le impostazioni DNS locali appropriate nel /etc/hosts file su entrambi i server.
Apri e modifica il file usando 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.
Ora installa il server web Nginx usando i seguenti comandi.
$ sudo apt install nginx [Su Ubuntu] $ sudo yum install epel-release && sudo yum install nginx [Su CentOS 7]
Una volta completata l'installazione, avvia il servizio Nginx per ora e abilita l'avvio automatico all'avvio, quindi controlla se è attivo e funzionante utilizzando il comando systemctl.
Su Ubuntu, il servizio dovrebbe essere avviato automaticamente subito dopo il completamento della preconfigurazione del pacchetto, puoi semplicemente abilitarlo.
$ sudo systemctl abilita 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 di indice Nginx predefinita come mostrato.
$ echo "Questa è la pagina predefinita per node1.example.com" | sudo tee /usr/share/nginx/html/index.html #VPS1. $ echo "Questa è la pagina predefinita per node2.example.com" | sudo tee /usr/share/nginx/html/index.html #VPS2.
Successivamente, dobbiamo installare Stimolatore cardiaco, Corosync, e pezzi su ciascun nodo come segue.
$ sudo apt install corosync pacemaker pz #Ubuntu $ sudo yum install corosync pacemaker pz #CentOS
Una volta completata l'installazione, assicurarsi che pezzi demone è in esecuzione su entrambi i server.
$ sudo systemctl abilita pcsd. $ sudo systemctl start pcsd. $ sudo systemctl status pcsd.
Durante l'installazione, un utente del sistema ha chiamato "hacluster" è creato. Quindi dobbiamo impostare l'autenticazione necessaria per pezzi. Iniziamo creando una nuova password per il "hacluster" utente, dobbiamo utilizzare la stessa password su tutti i server:
$ sudo passwd hacluster.
Successivamente, su uno dei server (Nodo1), eseguire il comando seguente per impostare l'autenticazione necessaria per pezzi.
$ 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 usato esempio cluster) sul server Nodo1.
$ sudo pcs setup cluster --name esempiocluster node1.example.com node2.example.com
Ora abilita il cluster all'avvio e avvia il servizio.
$ sudo pcs cluster enable --all. $ sudo pc cluster start --all.
Ora controlla se il servizio cluster è attivo e in esecuzione utilizzando il seguente comando.
$ sudo stato dei pezzi. O. $ sudo crm_mon -1.
Dall'output del comando precedente, puoi vedere che c'è un avviso su no STONITH dispositivi ancora il STONITH è ancora abilitato nel cluster. Inoltre, non sono state configurate risorse/servizi del cluster.
La prima opzione è disabilitare STONITH (o Spara all'altro nodo in testa), l'attuazione della scherma su Stimolatore cardiaco.
Questo componente aiuta a proteggere i tuoi dati dall'essere danneggiati dall'accesso simultaneo. Ai fini di questa guida, la disabiliteremo poiché non abbiamo configurato alcun dispositivo.
Per spegnere STONITH, esegui il seguente comando:
$ sudo pcs property set stonith-enabled=false.
Quindi, ignora anche il Quorum policy eseguendo il comando seguente:
$ sudo pcs property set no-quorum-policy=ignore.
Dopo aver impostato le opzioni di cui sopra, eseguire il comando seguente per visualizzare l'elenco delle proprietà e assicurarsi che le opzioni di cui sopra, stonato e il politica del quorum sono disabilitati.
$ sudo pcs elenco delle proprietà.
In questa sezione, vedremo come aggiungere una risorsa cluster. Configurare un IP mobile che è l'indirizzo IP che può essere spostato istantaneamente 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, 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 denominata "ip_mobile" e una risorsa per il server web Nginx chiamata "http_server”.
Innanzitutto inizia aggiungendo il floating_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:
Quindi aggiungi la seconda risorsa, denominata http_server. Qui, l'agente delle risorse del servizio è ocf: battito cardiaco: 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 seguente comando per verificare lo stato delle risorse.
$ sudo pcs risorse di stato.
Guardando l'output del comando, le due risorse aggiunte: “floating_ip” e “http_server” sono stati elencati. Il servizio floating_ip è disattivato perché il nodo primario è in funzione.
Se hai il firewall abilitato sul tuo sistema, devi consentire a tutto il traffico di 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
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 nodo2.esempio.com come mostrato nello screenshot.
Per simulare un errore, eseguire il comando seguente per arrestare il cluster sul nodo2.esempio.com.
$ sudo pc cluster stop http_server.
Quindi ricaricare la pagina su 192.168.10.20, ora dovresti accedere alla pagina web di Nginx predefinita da nodo1.esempio.com.
In alternativa, è possibile simulare un errore dicendo al servizio di arrestarsi direttamente, senza arrestare il cluster su alcun nodo, utilizzando il seguente comando su uno dei nodi:
$ sudo crm_resource --resource http_server --force-stop
Allora devi scappare crm_mon in modalità interattiva (predefinita), entro l'intervallo di monitoraggio di 2 minuti, dovresti essere in grado di vedere l'avviso del cluster che http_server fallito e spostalo su un altro nodo.
Affinché i servizi del cluster vengano eseguiti in modo efficiente, potrebbe essere necessario impostare alcuni vincoli. Puoi vedere il pezzi pagina man (man pcs) per un elenco di tutti i comandi di utilizzo.
Per ulteriori informazioni su Corosync e Pacemaker, consulta: https://clusterlabs.org/
In questa guida, abbiamo mostrato le basi 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 pensieri da condividere o domande, usa il modulo di feedback qui sotto.