Galera Cluster: configurare un cluster MariaDB su Ubuntu 20.04
Configurare un cluster MariaDB con Galera Cluster consente di aumentare l’affidabilità e la scalabilità del database. In questo tutorial ti spieghiamo come installare Galera Cluster su Ubuntu 20.04.
Galera Cluster di MariaDB: requisiti di sistema
Per poter installare un Galera Cluster di MariaDB su Ubuntu 20.04 sono necessari i seguenti requisiti di base:
- Più server: per creare un cluster sono necessari almeno tre server o macchine virtuali. Tutti i server devono far parte della stessa rete.
- Permessi di root: hai bisogno di un accesso root o di permessi admin ai server.
Guida: Galera Cluster di MariaDB su Ubuntu 20.04
Un cluster MariaDB con Galera Cluster è una soluzione di database efficace e ad alta disponibilità che offre integrità dei dati e scalabilità per applicazioni complesse. In questa guida dettagliata ti spieghiamo come configurare un cluster MariaDB con Galera Cluster su Ubuntu 20.04. Prima di iniziare, assicurati di avere a disposizione almeno tre server o macchine virtuali su cui installare il cluster.
Primo passaggio: aggiornare i pacchetti
Prima di tutto assicurati che il tuo sistema operativo Ubuntu sia aggiornato. Questo passaggio è fondamentale per poter aprire i pacchetti attuali e gli aggiornamenti di sicurezza.
Per aggiornare le fonti dei pacchetti apri il terminale e digita il seguente comando:
sudo apt update
shellInstalla tutti gli aggiornamenti disponibili:
sudo apt upgrade -y
shellPer una migliore pulizia dei server, si consiglia di eliminare i pacchetti obsoleti o non più in uso:
sudo apt autoremove -y
shellSecondo passaggio: installare MariaDB sui server
Ora puoi installare MariaDB sui singoli server. A partire dalla versione 10.1, oltre al server MariaDB i file contengono anche i pacchetti Galera.
sudo apt install mariadb-server
shellTerminata l’installazione, puoi avviare MariaDB:
sudo systemctl start mariadb
shellCon il seguente comando fai in modo che MariaDB si attivi automaticamente a ogni riavvio del sistema:
sudo systemctl enable mariadb
shellVerifica se MariaDB funziona:
sudo systemctl status mariadb
shellInoltre, dovrai implementare alcune impostazioni di sicurezza di base e configurare il database. A tal proposito avvia l’assistente di configurazione:
sudo mysql_secure_installation
shellL’assistente di configurazione guida l’utente attraverso i singoli passaggi, come impostare la password di root, rimuovere gli utenti anonimi ed eliminare il database di prova.
Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
shellOra lo script ti chiederà di digitare la password di root. Se stai installando MariaDB su Ubuntu 20.04 per la prima volta, premi Invio e inserisci una nuova password.
Terzo passaggio: configurare i nodi Galera Cluster con MariaDB
Crea un file cnf
nella directory /etc/mysql/conf.d
di ogni nodo per definire le impostazioni specifiche di Galera.
nano /etc/mysql/conf.d/galera.cnf
shellIl file contiene le impostazioni generali del database quali il formato del protocollo binario e il motore di archiviazione predefinito. Include anche le configurazioni per Galera Cluster, tra cui il nome del cluster e gli indirizzi dei nodi.
Per il primo nodo digita le seguenti righe di comando:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell- Impostazioni generali del database: qui sono incluse impostazioni quali
binlog_format=ROW
per il formato dei log binari edefault-storage-engine=innodb
per il motore di archiviazione predefinito. - Configurazione del provider Galera: impostazioni come
wsrep_on=ON
servono ad attivare la replica Galera e a specificare il percorso alla libreria Galerawsrep_provider=/usr/lib/galera/libgalera_smm.so
. - Configurazione di Galera Cluster: comprende il nome del cluster (
wsrep_cluster_name
) e l’indirizzo del cluster (wsrep_cluster_address
), che a sua volta contiene gli indirizzi IP o i nomi dell’host dei nodi nel cluster. - Sincronizzazione Galera: configura il metodo per lo State Snapshot Transfer (SST), ad esempio
wsrep_sst_method=rsync
. - Configurazione dei nodi Galera: definisce l’indirizzo IP o il nome dell’host del nodo attuale (
wsrep_node_address
) nonché il nome del nodo (wsrep_node_name
).
Dopo aver salvato il primo file, puoi crearne un altro per il secondo nodo:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shellOra prosegui con l’ultimo nodo:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shellQuarto passaggio: modificare il firewall sui server
Poiché i nodi comunicano fra loro attraverso porte specifiche, dovrai modificare le impostazioni del firewall di conseguenza.
Apri la seguente porta nel firewall:
- Porta 3306: questa è la porta standard di MariaDB, che viene usata per la comunicazione e le richieste al database.
- Porte Galera: oltre alla porta standard 3306, Galera usa anche altre porte per la comunicazione interna tra i nodi. L’intervallo predefinito per le porte Galera è solitamente 4567, 4568 e 4444 per lo State Snapshot Transfer (SST).
È possibile specificare le impostazioni del firewall sul server Ubuntu tramite il seguente comando:
sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shellQuinto passaggio: avviare Galera Cluster in MariaDB
Se MariaDB è in uso, termina il processo.
sudo systemctl stop mariadb
shellQuesto comando avvia il server MariaDB* e avvia un nuovo Galera Cluster sul primo nodo:
sudo galera_new_cluster
shellVerifica il numero dei nodi nel cluster:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellDovresti ottenere questo output
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+
shellIl primo nodo è stato avviato con successo.
Ora attiva il secondo:
systemctl start mariadb
shellVerifica se il numero dei nodi è aumentato:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellNel terminale compare:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+
shellOra avvia il terzo nodo:
systemctl start mariadb
shellControlla se il nodo funziona come previsto:
mysql -u root -p -e "SHOW STATUS LIKE ’wsrep_cluster_size’"
shellOra il Cluster dovrebbe contenere tre nodi:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 3 |
+--------------------------+------------ -+
shellSesto passaggio: testare la replica
Verifica di poterti connettere a ogni nodo del cluster. Usa il client MariaDB per poter accedere come utente root o un altro utente con i permessi adeguati.
mysql -u root -p
shellCrea un nuovo database su un nodo del cluster:
CREATE DATABASE test_db;
sqlAccedi agli altri nodi e verifica se il database di prova è presente:
SHOW DATABASES;
sqlIl database di prova dovrebbe comparire nella lista dei database:
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
| sys |
+------------------------------+
sqlAggiungi una nuova tabella di prova nel database di prova
USE test_db;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
sqlInserisci alcuni dati nella colonna name
della tabella di prova:
INSERT INTO test_table (name) VALUES ('Alice'), ('Giulio'), ('Marco');
sqlControlla se la tabella di prova e i dati inseriti sono stati trasferiti correttamente:
USE test_db;
SELECT * FROM test_table;
sqlL’output mostra la lista delle persone con il loro nome e ID:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alice |
| 2 | Giulio |
| 3 | Marco |
+----+----------+
sqlCon questo comando puoi aggiornare un record di dati nella tabella di prova:
UPDATE test_table SET name = 'Davide' WHERE name = 'Alice';
sqlOra prova a cancellare un record di dati:
DELETE FROM test_table WHERE name = 'Giulio';
sqlVerifica sugli altri nodi se gli aggiornamenti e le eliminazioni sono stati replicati correttamente:
SELECT * FROM test_table;
sqlLe modifiche sono visibili su ogni nodo:
+----+------------+
| id | name |
+----+-----------+
| 1 | Davide |
| 3 | Marco |
+----+-----------+
sql