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?
- Mappatura del file Hosts.
- Installare e configurare Nginx.
- Installare Pacemaker, Corosync e Crmsh.
- Configurare la chiave Corosync.
- Avviare tutti i servizi.
- Creare e configurare un cluster.
- 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/hostsIncolla 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.coSalva 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
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 nginxQuando 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.htmlOra ferma il server web.
systemctl stop nginxL’installazione e la configurazione di Nginx sono state completate.

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 crmshDopo l’installazione, tutti questi servizi vengono eseguiti automaticamente sul sistema. Fermali con i comandi systemctl qui sotto.
systemctl stop corosync
systemctl stop pacemakerLo stack software che fornisce l’alta disponibilità per Nginx è stato installato.

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 havegedOra genera una nuova chiave Corosync con il comando qui sotto.
corosync-keygenQuando la generazione della chiave è completata, puoi vedere la nuova chiave ‘authkey’ nella directory ‘/etc/corosync/‘.
ls -lah /etc/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.bekupQuindi crea un nuovo file di configurazione ‘corosync.conf’ con vim.
vim corosync.confIncolla 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/
Quando tutto è completo, vai ai server ‘web02’ e ‘web03’, quindi controlla i file.
ssh root@web02
cd /etc/corosync/
ls -lah
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 corosyncOra avvia pacemaker e abilitalo per avviarsi all’avvio.
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemakerTutti i servizi sono stati avviati, controlla tutti i nodi e assicurati che lo stato del server sia ‘Online’ su tutti.
crm status
Oppure puoi controllare lo stato controllando i membri di Corosync con il comando corosync-cmapctl qui sotto.
corosync-cmapctl | grep membersVedrai tutti gli indirizzi IP dei server.

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=ignoreOra controlla lo stato di STONITH e la politica di quorum con il comando crm qui sotto.
crm configure showVedrai il risultato qui sotto.

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
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 webserverUn nuovo gruppo di risorse con il nome ‘hakase_balancing’ è stato definito. Puoi controllarlo con il comando qui sotto.
crm resource showOtterrai un gruppo chiamato hakase_balancing con membri ‘virtual_ip’ e ‘webserver’ risorse.

La configurazione del cluster è stata completata.
Passo 7 - Testare
Testare lo stato del nodo e lo stato del cluster.
crm status
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 stopOtterrai il risultato ‘ INFO: Cluster services stopped ‘.
Ora accedi al nodo ‘web02’ e controlla lo stato del cluster.
crm status
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
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.