Nginx High Availability · 8 min read · Nov 29, 2025

Come configurare Nginx High Availability con Pacemaker, Corosync e Crmsh su Ubuntu 16.04

In questo tutorial, ti mostrerò passo dopo passo come creare un server web Nginx ad alta disponibilità in cluster con Pacemaker, Corosync e Crmsh. Creeremo un cluster attivo-passivo o cluster di failover Nginx utilizzando Pacemaker su Ubuntu 16.04.

Pacemaker è un software di gestione dei cluster open source che raggiunge la massima alta disponibilità dei tuoi servizi. È un gestore di cluster HA avanzato e scalabile sviluppato da ClusterLabs dal 2007.

Il Corosync Cluster Engine è un progetto open source derivato dal progetto OpenAIS nel 2008 e rilasciato sotto la licenza BSD. È un sistema di comunicazione di gruppo con funzionalità aggiuntive per implementare l’alta disponibilità all’interno delle applicazioni.

Ci sono diverse applicazioni disponibili per l’interfaccia di Pacemaker e Crmsh è una di esse. È un’interfaccia a riga di comando di Pacemaker per gestire lo stack di alta disponibilità di Pacemaker. Crmsh è scritto in python. Possiamo creare, configurare e risolvere problemi dello stack HA di Pacemaker con lo strumento da riga di comando Crmsh.

Prerequisiti

  • Tre server Ubuntu 16.04 - web01 10.0.15.11
  • web02 10.0.15.12
  • web03 10.0.15.13
  • Un indirizzo IP fluttuante 10.0.15.15
  • Privilegi di root

Cosa faremo?

  1. Mappatura del file Hosts.
  2. Installare e configurare Nginx.
  3. Installare Pacemaker, Corosync e Crmsh.
  4. Configurare la chiave Corosync.
  5. Avviare tutti i servizi.
  6. Creare e configurare un cluster.
  7. Testare.

Passo 1 - Mappatura del file Hosts

Nota:
Esegui i passi 1 - 3 su tutti e tre i server ‘web01’, ‘web02’, ‘web03’.

In questo tutorial, utilizzerò 3 server Ubuntu 16.04 e ciascuno di essi ha un nome host unico: ‘web01’, ‘web02’ e ‘web03’. Ogni server può connettersi agli altri server con il nome host del server.

Per ottenere ciò, modifica il file ‘/etc/hosts’ su tutti i server con vim.

vim /etc/hosts

Incolla la configurazione di /etc/hosts qui sotto.

10.0.15.11      web01  
10.0.15.12      web02  
10.0.15.13      web03  
10.0.15.15      ha-web.co

Salva il file ed esci da vim.

Successivamente, testa tutti i server pingando gli altri server attraverso ciascun nome host.

ping -c 3 web01  
ping -c 3 web02  
ping -c 3 web03

Ping Tutti i Server

Passo 2 - Installare e configurare Nginx

Ora iniziamo a creare la configurazione di alta disponibilità del server web Nginx creando il cluster di failover con Pacemaker. Dobbiamo prima installare Nginx su ciascuno dei nodi del server.

Installa Nginx con il comando apt qui sotto.

apt install -y nginx

Quando l’installazione è terminata, sostituisci la pagina predefinita di nginx con una pagina unica su ciascun server eseguendo i comandi qui sotto in modo da poter successivamente identificare quale server ha fornito una pagina.

#Esegui il comando su 'web01'  
echo '

web01 - hakase-labs

' > /var/www/html/index.html #Esegui il comando su 'web02' echo '

web02 - hakase-labs

' > /var/www/html/index.html #Esegui il comando su 'web03' echo '

web03 - hakase-labs

' > /var/www/html/index.html

Ora ferma il server web.

systemctl stop nginx

L’installazione e la configurazione di Nginx sono state completate.

Installa e Configura Nginx su Ubuntu 16.04

Passo 3 - Installare Pacemaker, Corosync e Crmsh

Pacemaker è un’applicazione di gestione dei cluster open source. Corosync è un motore di cluster per Pacemaker, e Crmsh è uno strumento basato su python per gestire un cluster Pacemaker. Tutte queste applicazioni sono disponibili nel repository di Ubuntu.

Installa Pacemaker, Corosync e crmsh con il comando apt qui sotto.

apt install -y pacemaker corosync crmsh

Dopo l’installazione, tutti questi servizi vengono eseguiti automaticamente sul sistema. Fermali con i comandi systemctl qui sotto.

systemctl stop corosync  
systemctl stop pacemaker

Lo stack software che fornisce l’alta disponibilità per Nginx è stato installato.

Installa Pacemaker, Corosync e Crmsh su Ubuntu 16.04

Passo 4 - Configurare Corosync

Nota:
Esegui il passo 4 solo sul server ‘web01’.

Poiché non stiamo usando pcsd per Ubuntu, dobbiamo configurare Corosync manualmente. Genereremo la chiave Corosync per l’autenticazione del cluster e creeremo un nuovo file di configurazione Corosync sul server ‘web01’, quindi copieremo la chiave e la configurazione sugli altri server ‘web02’ e ‘web03’.

Prima di generare la chiave Corosync, dobbiamo installare il nuovo pacchetto ‘haveged’. È utilizzato per ottenere numeri casuali migliori per la generazione della chiave Corosync.

Installa haveged dal repository con il comando apt.

apt install -y haveged

Ora genera una nuova chiave Corosync con il comando qui sotto.

corosync-keygen

Quando la generazione della chiave è completata, puoi vedere la nuova chiave ‘authkey’ nella directory ‘/etc/corosync/‘.

ls -lah /etc/corosync/

Genera Chiave Corosync

Successivamente, vai nella directory ‘/etc/corosync’ e fai un backup del file di configurazione predefinito ‘corosync.conf’.

cd /etc/corosync/  
mv corosync.conf corosync.conf.bekup

Quindi crea un nuovo file di configurazione ‘corosync.conf’ con vim.

vim corosync.conf

Incolla la configurazione qui sotto in quel file.

# Configurazione del protocollo Totem  
totem {  
  version: 2  
  cluster_name: hakase-cluster  
  transport: udpu  
   
# Configurazione dell'interfaccia per Corosync  
  interface {  
    ringnumber: 0  
    bindnetaddr: 10.0.15.0  
    broadcast: yes  
    mcastport: 5407  
  }  
}  
   
# Nodelist - Elenco dei server  
nodelist {  
  node {  
    ring0_addr: web01  
  }  
  node {  
    ring0_addr: web02  
  }  
  node {  
    ring0_addr: web03  
  }  
}  
   
# Configurazione del quorum  
quorum {  
  provider: corosync_votequorum  
}  
   
# Configurazione del log di Corosync  
logging {  
  to_logfile: yes  
  logfile: /var/log/corosync/corosync.log  
  to_syslog: yes  
  timestamp: on  
}  
   
service {  
  name: pacemaker  
  ver: 0  
}

Salva il file ed esci dall’editor.

Successivamente, copia la chiave di autenticazione e il file di configurazione dal server ‘web01’ ai server ‘web02’ e ‘web03’.

scp /etc/corosync/* root@web02:/etc/corosync/  
scp /etc/corosync/* root@web03:/etc/corosync/

Copia Configurazione Corosync dal nodo web01 agli altri

Quando tutto è completo, vai ai server ‘web02’ e ‘web03’, quindi controlla i file.

ssh root@web02  
cd /etc/corosync/  
ls -lah

Configurazione Corosync sul nodo web02

La configurazione di Corosync è stata completata.

Passo 5 - Avviare tutti i servizi del cluster

Nota:
Esegui il passo 5 su tutti i server.

Avvia lo stack software HA, pacemaker e corosync, su tutti i server. Quindi abilitalo per avviarsi automaticamente all’avvio.

Avvia Corosync e aggiungilo per avviarsi automaticamente all’avvio.

systemctl start corosync  
systemctl enable corosync

Ora avvia pacemaker e abilitalo per avviarsi all’avvio.

systemctl start pacemaker  
update-rc.d pacemaker defaults 20 01  
systemctl enable pacemaker

Tutti i servizi sono stati avviati, controlla tutti i nodi e assicurati che lo stato del server sia ‘Online’ su tutti.

crm status

Stato del Nodo del Cluster

Oppure puoi controllare lo stato controllando i membri di Corosync con il comando corosync-cmapctl qui sotto.

corosync-cmapctl | grep members

Vedrai tutti gli indirizzi IP dei server.

Elenco Membri di Corosync

Passo 6 - Creare e configurare il cluster

NOTA:
Esegui il passo 6 solo sul server web01

In questo passo, configureremo il cluster Nginx attivo-passivo utilizzando lo strumento da riga di comando crmsh. Poiché non stiamo utilizzando un dispositivo STONITH, vogliamo disabilitare STONITH e ignorare la politica di quorum sul nostro cluster.

Esegui i comandi crm qui sotto per disabilitare ‘STONITH’ e ignorare la politica di quorum.

crm configure property stonith-enabled=false  
crm configure property no-quorum-policy=ignore

Ora controlla lo stato di STONITH e la politica di quorum con il comando crm qui sotto.

crm configure show

Vedrai il risultato qui sotto.

Disabilita STONITH e Ignora la Politica di Quorum

Successivamente, dobbiamo creare alcune nuove risorse per il cluster. Pacemaker supporta i seguenti tipi di Resource Agents (RA).

  • LSB (Linux Standard Based) - Fornito dalla distribuzione Linux. es: ‘/etc/init.d/service’ script.
  • OCF (Open Cluster Framework) - Set di strumenti per il calcolo in cluster. Il progetto è parte della Linux Foundation.

Per il nostro server web Nginx HA, dobbiamo creare due risorse OCF: ‘virtual_ip’ per l’IP fluttuante e ‘webserver’ per il servizio nginx.

Crea una nuova risorsa ‘virtual_ip’ per la configurazione dell’IP fluttuante con il comando crm qui sotto.

sudo crm configure primitive virtual_ip \  
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \  
cidr_netmask="32" op monitor interval="10s" \  
meta migration-threshold="10"

E per il ‘webserver’ nginx, crea la risorsa con il comando qui sotto.

sudo crm configure primitive webserver \  
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \  
op start timeout="40s" interval="0" \  
op stop timeout="60s" interval="0" \  
op monitor interval="10s" timeout="60s" \  
meta migration-threshold="10"

Quando questo è fatto, controlla le nuove risorse ‘virtual_ip’ e ‘webserver’ con il comando qui sotto. Assicurati che tutte le risorse abbiano lo stato ‘avviato’.

crm resource status

Aggiungi nuove Risorse Virtual_ip e Webserver al Cluster

Infine, dobbiamo aggiungere un gruppo per la nuova configurazione del servizio IP di failover. Vogliamo migrare il servizio ‘Nginx’ su una risorsa ‘webserver’ con un IP fluttuante su una risorsa ‘virtual_ip’.

Abbiamo già creato l’IP fluttuante e il servizio, ora aggiungi quelle risorse a un nuovo gruppo chiamato ‘hakase_balancing’ con il comando qui sotto. Puoi scegliere il tuo nome di gruppo qui, assicurati solo di sostituire il nome ovunque venga utilizzato.

sudo crm configure group hakase_balancing virtual_ip webserver

Un nuovo gruppo di risorse con il nome ‘hakase_balancing’ è stato definito. Puoi controllarlo con il comando qui sotto.

crm resource show

Otterrai un gruppo chiamato hakase_balancing con membri ‘virtual_ip’ e ‘webserver’ risorse.

Aggiungi Nuova Risorsa di Gruppo per il Cluster

La configurazione del cluster è stata completata.

Passo 7 - Testare

Testare lo stato del nodo e lo stato del cluster.

crm status

Stato del Nodo del Cluster e Stato delle Risorse

Abbiamo 3 nodi con stato ‘Online’.

Abbiamo un gruppo di risorse chiamato ‘hakase_balancing’, e ora è in esecuzione sul nodo ‘web01’.

Testare il server web Nginx da un browser web. Visita l’indirizzo IP fluttuante, il nome del mio server di test è - ha-web.co. Usa il nome che hai scelto per il tuo server qui.

Tutte le risorse sono sul nodo ‘web01’.

Testare il Cluster Attivo-Passivo o di Failover

Ferma il cluster sul server ‘web01’ eseguendo il comando qui sotto sul nodo ‘web01’.

crm cluster stop

Otterrai il risultato ‘ INFO: Cluster services stopped ‘.

Ora accedi al nodo ‘web02’ e controlla lo stato del cluster.

crm status

Cluster di Alta Disponibilità Nginx su Ubuntu 16.04

Ora ottieni il risultato che il nodo ‘web01’ è ‘Offline’, e le risorse di virtual_ip e webserver sono passate al nodo ‘web02’.

Quando visiti di nuovo l’IP fluttuante ‘ ha-web.co ‘, otterrai la pagina di web02.

L’alta disponibilità di Nginx con Pacemaker, Corosync e Crmsh su Ubuntu 16.04 è stata installata e testata con successo.

Riferimenti

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.