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/hostsAggiungi le seguenti righe alla fine del file:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameCambia 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/hostsAggiungi le seguenti righe alla fine del file:
172.16.0.1 Node1
172.16.0.2 Node2
sudo nano /etc/hostnameCambia 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 -yUna 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 -ySuccessivamente, 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 heartbeatConfigura 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/sdbSuccessivamente, 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.resAggiungi 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.cfAggiungi 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/haresourcesAggiungi 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/authkeysAggiungi 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/mysqlUna 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/mysqlOra, puoi verificare che il disco DRBD sia connesso e si stia sincronizzando correttamente eseguendo il seguente comando:
sudo cat /proc/drbdSe 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/secSuccessivamente, avvia heartbeat su entrambi i nodi per abilitare la parte di failover della tua configurazione.
sudo systemctl start heartbeatSuccessivamente, verifica la partizione DRBD montata con il seguente comando su Node1:
sudo mount | grep drbdDovresti 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.103Dovresti vedere il seguente output:
inet 192.168.0.103/24 brd 192.168.0.255 scope global secondary eth1:0Installa 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 -ySuccessivamente, dovrai disabilitare il servizio MariaDB su entrambi i nodi:
sudo systemctl disable mysqlQui, 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.cnfSuccessivamente, 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 -pInserisci 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/*.cnfIniziare 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/haresourcesModifica le seguenti righe:
Node1 192.168.0.103/24 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4::noatime mysqlSalva 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 heartbeatSuccessivamente, attendi 50 secondi, quindi riavvia il servizio heartbeat su Node2:
sudo systemctl restart heartbeatTest 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/drbdDovresti 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:0Successivamente, 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 mysqlSuccessivamente, 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 -pMariaDB [(none)]> create database test;
MariaDB [(none)]> quitSuccessivamente, riavvia heartbeat su Node1:
sudo systemctl restart heartbeatOra, 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/drbdDovresti 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:0Ora, verifica che Node2 sia il nodo drbd primario eseguendo il seguente comando su Node2:
sudo cat /proc/drbdDovresti 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:0Successivamente, controlla per assicurarti che MariaDB sia in esecuzione su Node2:
sudo systemctl status mysqlOra, connettiti al server MariaDB utilizzando l’IP fluttuante su Node2 da un utente remoto.
mysql -h 192.168.0.103 -u root -pSuccessivamente, 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)Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.