GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come configurare MariaDB High Availability con Heartbeat e DRBD su Ubuntu 16.04 LTS

Heartbeat e DRBD vengono entrambi utilizzati per una soluzione cluster per qualsiasi applicazione che utilizza due server. Entrambi i server funzionano in modalità attiva e passiva, un server funzionerà contemporaneamente e un 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 uno di backup di determinare se l'altro è "vivo" e se il primario non lo è, eseguire il failover delle risorse sul backup. Gestirà anche l'alta disponibilità IP e altri servizi nei tuoi server.

In questo tutorial impareremo come ottenere un'elevata disponibilità di MariaDB utilizzando Heartbeat e DRBD sul server Ubuntu 16.04.

Requisiti

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

Per iniziare

Prima di iniziare, dovrai impostare l'indirizzo IP su ciascun nodo. Utilizza il seguente indirizzo IP su ciascun nodo:

Nodo1 :

172.16.0.1 su eth0 e 192.168.0.101 su eth1

Nodo2 :

172.16.0.2 su eth0 e 192.168.0.102 su eth1

IP 192.168.0.103 sarà l'IP ad alta disponibilità.

Successivamente, dovrai anche impostare il nome host e la risoluzione del nome host su ciascun nodo. Quindi ogni nodo può 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

Modifica 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

Modifica il file come mostrato di seguito:

Node2

Salva e chiudi il file quando hai finito.

Successivamente, aggiorna ogni nodo con l'ultima versione con il seguente comando:

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

Una volta aggiornato il sistema, 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

Quindi, avvia il servizio DRBD e Heartbeat e consenti loro di 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 sulla seconda unità non partizionata /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 al termine, quindi apri un altro file di configurazione su ciascun nodo:

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

Aggiungi le seguenti righe:

# Check Interval
keepalive 1
# Time before server declared dead
deadtime 10
# Secondary wait delay at boot
initdead 60
# Auto-failback
auto_failback off
# Heartbeat Interface
bcast eth1
# Nodes to monitor
node Node1
node Node2

Salva e chiudi il file.

Quindi, apri il file di 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 in virgola mobile, /var/lib/mysql è un punto di montaggio e /dev/drbd0 è un dispositivo DRBD.

Successivamente, sarà necessario definire e archiviare chiavi di autorizzazione identiche su entrambi i nodi. Puoi farlo tramite 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, la tua password sicura è la tua password sicura. Usa la stessa password su entrambi i nodi.

Quindi, 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

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

sudo systemctl start heartbeat

Quindi, 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 mobile sia associato solo a Node1 con il comando seguente:

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, è il momento 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 useremo Node1 come primario e i database su Node2 dovrebbero essere creati e popolati tramite la sincronizzazione con Node1. Quindi dovrai interrompere 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 MySQL Maintenance 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;

Quindi, imposta l'indirizzo di collegamento 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

Avvia 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 l'heartbeat, sarà necessario riavviarlo su entrambi i nodi.

Innanzitutto, riavvia Heartbea su Node1:

sudo systemctl restart heartbeat

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

sudo systemctl restart heartbeat

Test Heartbeat e DRBD

Ora, tutto è configurato correttamente, è il momento di eseguire una serie di test per verificare che l'heartbeat attiverà effettivamente un trasferimento dal server attivo al server passivo quando il server attivo si guasta in qualche modo.

Innanzitutto, 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, verificheremo 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

Quindi, accedi al server MariaDB dalla macchina remota utilizzando l'IP mobile e crea un database di prova:

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

Quindi, riavvia Heartbeat su Node1:

sudo systemctl restart heartbeat

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

Puoi verificare che DRBD stia ora trattando 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

Quindi, verifica che MariaDB sia in esecuzione su Node2:

sudo systemctl status mysql

Ora, connettiti al server MariaDB utilizzando l'IP mobile su Node2 dall'utente remoto.

mysql -h 192.168.0.103 -u root -p

Quindi, 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 rows in set (0.04 sec)

Ubuntu
  1. Come installare MariaDB in Ubuntu 20.04 LTS

  2. Come configurare server e client Kerberos su Ubuntu 18.04 LTS

  3. Come installare Seafile con Nginx su Ubuntu 20.04 LTS

  4. Come configurare l'alta disponibilità di Nginx con Pacemaker, Corosync e Crmsh su Ubuntu 16.04

  5. Come installare Wordpress con Nginx, MariaDB e HHVM su Ubuntu 16.04 LTS

Come configurare e utilizzare Google Drive su Ubuntu 22.04 LTS

Come installare Lighttpd con PHP e MariaDB su Ubuntu 15.04

Come installare Lighttpd con PHP e MariaDB su Ubuntu 16.04 LTS

Come installare Lighttpd con MariaDB e PHP su Ubuntu 18.04 LTS

Come installare Lighttpd, PHP e MariaDB su Ubuntu 20.04 LTS

Come configurare server e client NTP su Ubuntu 20.04 LTS