Database · 8 min read · Dec 07, 2025

Come configurare l'alta disponibilità di MariaDB con Heartbeat e DRBD su Ubuntu 16.04 LTS

Heartbeat e DRBD sono entrambi utilizzati per una soluzione di cluster per qualsiasi applicazione che utilizza due server. Entrambi i server lavorano in modalità attiva e passiva, un server funzionerà contemporaneamente e l’altro server come server di backup. DRBD (Distributed Replicated Block Device) è un servizio a livello di kernel che sincronizza i dati tra due server in tempo reale. Heartbeat è un programma open source che consente a un server Linux primario e a un server di backup di determinare se l’altro è “vivo” e, se il primario non lo è, di trasferire le risorse al backup. Gestirà anche l’IP ad alta disponibilità e altri servizi sui tuoi server.

In questo tutorial, impareremo come ottenere alta disponibilità di MariaDB utilizzando Heartbeat e DRBD su un server Ubuntu 16.04.

Requisiti

  • Due nodi con Ubuntu 16.04 server installato.
  • Due schede di rete installate su ciascun nodo.
  • Disco rigido aggiuntivo non partizionato installato su ciascun nodo.
  • Utente non root con privilegi sudo configurato su ciascun nodo.

Iniziare

Prima di iniziare, dovrai configurare l’indirizzo IP su ciascun nodo. Usa i seguenti indirizzi IP su ciascun nodo:

Node1 :

172.16.0.1 su eth0 e 192.168.0.101 su eth1

Node2 :

172.16.0.2 su eth0 e 192.168.0.102 su eth1

L’IP 192.168.0.103 sarà l’IP ad alta disponibilità.

Successivamente, dovrai anche configurare il nome host e la risoluzione del nome host su ciascun nodo. In modo che ciascun nodo possa comunicare tra loro. Sul primo nodo, apri il file /etc/hosts e il file /etc/hostname:

sudo nano /etc/hosts

Aggiungi le seguenti righe alla fine del file:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Cambia il file come mostrato di seguito:

Node1

Salva e chiudi il file quando hai finito.

Sul secondo nodo, apri il file /etc/hosts e il file /etc/hostname:

sudo nano /etc/hosts

Aggiungi le seguenti righe alla fine del file:

172.16.0.1  Node1
172.16.0.2  Node2
sudo nano /etc/hostname

Cambia il file come mostrato di seguito:

Node2

Salva e chiudi il file quando hai finito.

Successivamente, aggiorna ciascun nodo con l’ultima versione con il seguente comando:

sudo apt-get update -y  
sudo apt-get upgrade -y

Una volta che il sistema è aggiornato, riavvia il sistema per applicare queste modifiche.

Installa DRBD e Heartbeat

Successivamente, dovrai installare DRBD e Heartbeat su entrambi i nodi. Per impostazione predefinita, entrambi sono disponibili nel repository predefinito di Ubuntu 16.04. Puoi installarli semplicemente eseguendo il seguente comando su entrambi i nodi:

sudo apt-get install drbd8-utils heartbeat -y

Successivamente, avvia il servizio DRBD e Heartbeat e abilitali per avviarsi all’avvio:

sudo systemctl start drbd  
sudo systemctl start heartbeat  
systemctl enable drbd  
systemctl enable heartbeat

Configura DRBD e Heartbeat

Successivamente, dovrai configurare il dispositivo DRBD su ciascun nodo. Crea una singola partizione sul secondo disco non partizionato /dev/sdb su ciascun nodo.

Puoi farlo semplicemente eseguendo il seguente comando su ciascun nodo:

sudo echo -e 'n\np\n1\n\n\nw' | fdisk /dev/sdb

Successivamente, dovrai configurare DRBD su entrambi i nodi. Puoi farlo creando il file /etc/drbd.d/r0.res su ciascun nodo.

sudo nano /etc/drbd.d/r0.res

Aggiungi le seguenti righe:

global {
usage-count no;
}
resource r0 {
protocol C;
startup {
degr-wfc-timeout 60;
}
disk {
}
syncer {
rate 100M;
}
net {
cram-hmac-alg sha1;
shared-secret "aBcDeF";
}
on Node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.1:7789;
meta-disk internal;
}
on Node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 172.16.0.2:7789;
meta-disk internal;
}
}

Salva e chiudi il file quando hai finito, quindi apri un altro file di configurazione su ciascun nodo:

sudo nano /etc/ha.d/ha.cf

Aggiungi le seguenti righe:

# Intervallo di controllo
keepalive 1
# Tempo prima che il server venga dichiarato morto
deadtime 10
# Ritardo di attesa secondaria all'avvio
initdead 60
# Auto-failback
auto_failback off
# Interfaccia Heartbeat
bcast eth1
# Nodi da monitorare
node Node1
node Node2

Salva e chiudi il file.

Successivamente, apri il file delle risorse /etc/ha.d/haresources su ciascun nodo:

sudo nano /etc/ha.d/haresources

Aggiungi le seguenti righe:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime

Qui, Node1 è il nome host del tuo nodo attivo principale, 192.168.0.103 è l’indirizzo IP fluttuante, /var/lib/mysql è un punto di montaggio e /dev/drbd0 è il dispositivo DRBD.

Successivamente, dovrai definire e memorizzare chiavi di autorizzazione identiche su entrambi i nodi. Puoi farlo modificando il file /etc/ha.d/authkeys su ciascun nodo:

sudo nano /etc/ha.d/authkeys

Aggiungi le seguenti righe:

auth1
1 sha1 your-secure-password

Qui, your-secure-password è la tua password sicura. Usa la stessa password su entrambi i nodi.

Successivamente, crea e avvia DRBD eseguendo il seguente comando su Node1:

sudo drbdadm create-md r0  
sudo systemctl restart drbd  
sudo drbdadm outdate r0  
sudo drbdadm -- --overwrite-data-of-peer primary all  
sudo drbdadm primary r0  
sudo mkfs.ext4 /dev/drbd0  
sudo chmod 600 /etc/ha.d/authkeys  
sudo mkdir /var/lib/mysql

Una volta creato il disco DRBD su Node1, crea il disco DRBD su Node2 con il seguente comando:

sudo drbdadm create-md r0  
sudo systemctl restart drbd  
sudo chmod 600 /etc/ha.d/authkeys  
sudo mkdir /var/lib/mysql

Ora, puoi verificare che il disco DRBD sia connesso e si stia sincronizzando correttamente eseguendo il seguente comando:

sudo cat /proc/drbd

Se tutto va bene, dovresti vedere il seguente output:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:210413 nr:0 dw:126413 dr:815311 al:35 bm:0 lo:0 pe:11 ua:0 ap:0 ep:1 wo:f oos:16233752
[>....................] sync'ed: 3.3% (14752/14350)M
finish: 0:12:23 speed: 12,156 (16,932) K/sec

Successivamente, avvia heartbeat su entrambi i nodi per abilitare la parte di failover della tua configurazione.

sudo systemctl start heartbeat

Successivamente, verifica la partizione DRBD montata con il seguente comando su Node1:

sudo mount | grep drbd

Dovresti vedere il seguente output:

/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Successivamente, verifica che l’IP fluttuante sia legato solo a Node1 con il seguente comando:

sudo ip addr show | grep 192.168.0.103

Dovresti vedere il seguente output:

inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0

Installa e configura MariaDB

Una volta che tutto è configurato correttamente su entrambi i nodi, è tempo di installare il server MariaDB su entrambi i nodi.

Esegui il seguente comando su entrambi i nodi per installare il server MariaDB:

sudo apt-get install mariadb-server -y

Successivamente, dovrai disabilitare il servizio MariaDB su entrambi i nodi:

sudo systemctl disable mysql

Qui, utilizzeremo Node1 come primario e i database su Node2 dovrebbero essere creati e popolati tramite sincronizzazione con Node1. Quindi dovrai fermare il servizio MariaDB e rimuovere il contenuto all’interno di /var/lib/mysql su Node2. Puoi farlo con il seguente comando:

sudo systemctl stop mysql  
sudo rm -rf /var/lib/mysql/*

Successivamente, dovrai copiare il file di configurazione di manutenzione di MySQL da Node1 a Node2. Puoi farlo eseguendo il seguente comando:

sudo scp /etc/mysql/debian.cnf [email protected]:/etc/mysql/debian.cnf

Successivamente, dovrai creare un utente root per la gestione remota e l’accesso ai database sull’istanza MySQL ad alta disponibilità.

Puoi farlo eseguendo il seguente comando su Node1:

mysql -u root -p

Inserisci la tua password di root, quindi crea un utente root con il seguente comando:

MariaDB [(none)]> CREATE USER 'root'@'192.168.0.%' IDENTIFIED BY 'password';  
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0..%' WITH GRANT OPTION;  
MariaDB [(none)]> FLUSH PRIVILEGES;  
MariaDB [(none)]> QUIT;

Successivamente, imposta l’indirizzo di binding per MySQL su entrambi i nodi con il seguente comando:

sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mariadb.conf.d/*.cnf

Iniziare Heartbeat per il servizio MariaDB

Successivamente, dovrai aggiungere il servizio MariaDB nelle tue istanze heartbeat su entrambi i nodi. Puoi farlo modificando il file /etc/ha.d/haresources:

sudo nano /etc/ha.d/haresources

Modifica le seguenti righe:

Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysql

Salva e chiudi il file, quando hai finito.

Una volta configurato heartbeat, dovrai riavviarlo su entrambi i nodi.

Per prima cosa, riavvia heartbeat su Node1:

sudo systemctl restart heartbeat

Successivamente, attendi 50 secondi, quindi riavvia il servizio heartbeat su Node2:

sudo systemctl restart heartbeat

Test Heartbeat e DRBD

Ora, tutto è configurato correttamente, è tempo di eseguire una serie di test per verificare che heartbeat attivi effettivamente un trasferimento dal server attivo al server passivo quando il server attivo fallisce in qualche modo.

Per prima cosa, verifica che Node1 sia il nodo drbd primario con il seguente comando su Node1:

sudo cat /proc/drbd

Dovresti vedere il seguente output:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
O cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:22764644 nr:256 dw:529232 dr:22248299 al:111 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Successivamente, verifichiamo che il disco DRBD sia montato con il seguente comando:

sudo mount | grep drbd
/dev/drbd0 on /var/lib/mysql type ext4 (rw,noatime,data=ordered)

Successivamente, verifica il servizio MariaDB con il seguente comando:

sudo systemctl status mysql

Successivamente, accedi al server MariaDB dalla macchina remota utilizzando l’IP fluttuante e crea un database di test:

mysql -h 192.168.0.103 -u root -p
MariaDB [(none)]> create database test;  
MariaDB [(none)]> quit

Successivamente, riavvia heartbeat su Node1:

sudo systemctl restart heartbeat

Ora, heartbeat interpreterà questo riavvio come un guasto di MariaDB su Node1 e dovrebbe attivare il failover per rendere Node2 il server primario.

Puoi controllare che DRBD ora tratti Node1 come server secondario con il seguente comando su Node1:

sudo cat /proc/drbd

Dovresti vedere il seguente output:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:22764856 nr:388 dw:529576 dr:22248303 al:112 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Ora, verifica che Node2 sia il nodo drbd primario eseguendo il seguente comando su Node2:

sudo cat /proc/drbd

Dovresti vedere il seguente output:

version: 8.4.5 (api:1/proto:86-101)
srcversion: F446E16BFEBS8B115AJB14H
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:412 nr:20880892 dw:20881304 dr:11463 al:7 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Successivamente, controlla per assicurarti che MariaDB sia in esecuzione su Node2:

sudo systemctl status mysql

Ora, connettiti al server MariaDB utilizzando l’IP fluttuante su Node2 da un utente remoto.

mysql -h 192.168.0.103 -u root -p

Successivamente, visualizza il database di test che abbiamo creato in precedenza mentre Node1 era il server primario.

MariaDB [(none)]> show databases;

Dovresti vedere il seguente output:

 +--------------------+
| Database           |
+--------------------+
| test               |
| information_schema  |
| lost+found         |
| mysql              |
| performance_schema  |
+--------------------+
5 righe nel set (0.04 sec)
Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.