Configurarea unui cluster MariaDB cu Galera Cluster îmbunătățește fiabilitatea și simplifică scalarea bazei de date. În tutorialul nostru, vă vom arăta cum să instalați un cluster Galera pe Ubuntu 20.04.

Cerințele pentru un cluster Galera MariaDB

Pentru a instala un cluster MariaDB Galera pe Ubuntu 20.04, trebuie să îndepliniți următoarele cerințe:

  • Servere multiple: Pentru a crea un cluster sunt necesare cel puțin trei servere sau mașini virtuale. Toate serverele trebuie să se afle în aceeași rețea.
  • Drepturi de root: Aveți nevoie de acces root sau cel puțin de drepturi administrative pe servere.

Cum se configurează Galera Cluster MariaDB pe Ubuntu 20.04 pas cu pas

Un cluster MariaDB Galera este o soluție practică de baze de date care oferă disponibilitate ridicată, integritate a datelor și scalabilitate pentru aplicații exigente. În acest ghid pas cu pas, vă vom ghida prin procesul de configurare a unui cluster MariaDB Galera pe Ubuntu 20.04. Înainte de a începe, asigurați-vă că aveți cel puțin trei servere sau mașini virtuale disponibile pentru a configura clusterul.

Pasul 1: Actualizați pachetele

Mai întâi trebuie să actualizați sistemul Ubuntu la cea mai recentă versiune. Acest lucru este esențial pentru a avea pachete și actualizări de securitate la zi.

Deschideți un terminal și executați următoarea comandă pentru a actualiza sursele pachetului:

sudo apt update
shell

Instalați toate actualizările disponibile:

sudo apt upgrade -y
shell

Vă recomandăm să eliminați și pachetele învechite sau neutilizate pentru a curăța serverele:

sudo apt autoremove -y
shell

Pasul 2: Instalați MariaDB pe servere

Acum, instalați MariaDB pe toate serverele dvs. Începând cu versiunea 10.1, pachetele Galera sunt incluse în serverele MariaDB.

sudo apt install mariadb-server
shell

După instalare, puteți porni serviciul MariaDB:

sudo systemctl start mariadb
shell

Utilizați următoarea comandă pentru a seta MariaDB să fie activată automat de fiecare dată când sistemul este repornit:

sudo systemctl enable mariadb
shell

Verificați dacă MariaDB rulează:

sudo systemctl status mariadb
shell

De asemenea, trebuie să efectuați câteva setări de securitate de bază și să configurați baza de date. Pentru a face acest lucru, porniți asistentul de configurare:

sudo mysql_secure_installation
shell

Asistentul vă ghidează prin pașii necesari, cum ar fi setarea unei parole root, eliminarea utilizatorilor anonimi sau eliminarea bazei de date de testare.

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
shell

Scriptul solicită mai întâi parola actuală de root. Dacă instalați MariaDB pe Ubuntu 20.04 pentru prima dată, apăsați pur și simplu Enter și apoi introduceți o nouă parolă.

Pasul 3: Configurați nodurile Galera Cluster MariaDB

Creați un fișier cnf în directorul /etc/mysql/conf.d pe fiecare nod pentru a defini setările specifice Galera.

nano /etc/mysql/conf.d/galera.cnf
shell

Acest fișier conține setări generale ale bazei de date, cum ar fi formatul protocolului binar și motorul de stocare implicit. De asemenea, conține configurații pentru clusterul Galera, inclusiv numele și adresa clusterului.

Inserați următoarele linii pentru primul nod:

[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_1-ip-address"
wsrep_node_name="node_1"
shell
  • Setări generale ale bazei de date: Acestea includ setări precum binlog_format=ROW pentru formatul jurnalelor binare și default-storage-engine=innodb pentru motorul de stocare implicit.
  • Configurația furnizorului Galera: Setări precum wsrep_on=ON sunt utilizate pentru a activa replicarea Galera și wsrep_provider=/usr/lib/galera/libgalera_smm.so pentru a specifica calea către biblioteca Galera.
  • Configurația clusterului Galera: Aceasta include numele clusterului (wsrep_cluster_name) și adresa clusterului (wsrep_cluster_address), care conține adresele IP sau numele de gazdă ale nodurilor din cluster.
  • Configurația sincronizării Galera: configurează metoda pentru transferul instantaneului de stare (SST), de exemplu, wsrep_sst_method=rsync.
  • Configurația nodului Galera: Definește adresa IP sau numele de gazdă al nodului curent (wsrep_node_address) și numele nodului (wsrep_node_name).

După ce ați salvat fișierul, creați unul pentru al doilea nod:

[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"
shell

Acum continuați cu ultimul nod:

[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"
shell

Pasul 4: Modificați firewall-ul pe servere

Deoarece nodurile comunică între ele prin porturi specifice, trebuie să ajustați setările firewall-ului.

Deschideți următoarele porturi în firewall:

  • Portul 3306: Acesta este portul standard pentru MariaDB. Este utilizat pentru comunicarea și solicitările bazei de date.
  • Porturi Galera: În plus față de portul standard 3306, Galera utilizează și alte porturi pentru comunicarea internă între noduri. Intervalul standard pentru porturile Galera este de obicei 4567, 4568 și 4444 pentru State Snapshot Transfer (SST).

Puteți defini setările firewall-ului pe serverul Ubuntu cu următoarea comandă:

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shell

Pasul 5: Porniți Galera Cluster MariaDB

Opriți serviciul MariaDB dacă acesta rulează deja:

sudo systemctl stop mariadb
shell

Această comandă pornește serverul MariaDB și inițializează un nou cluster Galera pe primul nod:

sudo galera_new_cluster
shell

Verificați numărul de noduri din cluster:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Ar trebui să obțineți următorul rezultat:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 1              |
+--------------------------+------------ -+
shell

Primul nod a fost pornit cu succes.

Activați al doilea nod:

systemctl start mariadb
shell

Verificați dacă numărul de noduri a crescut:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

În consolă vedem:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 2               |
+--------------------------+--------------+
shell

Acum începem al treilea nod:

systemctl start mariadb
shell

Verificați dacă nodul funcționează corect:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Acum ar trebui să existe trei noduri în cluster:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 3              |
+--------------------------+------------ -+
shell

Pasul 6: Testați replicarea

Asigurați-vă că puteți stabili o conexiune cu fiecare nod din cluster. Utilizați clientul MariaDB pentru a vă conecta ca utilizator root sau ca alt utilizator cu drepturi suficiente.

mysql -u root -p
shell

Creați o nouă bază de date de testare pe unul dintre nodurile din cluster:

CREATE DATABASE test_db;
sql

Conectați-vă la celelalte noduri și verificați dacă baza de date de testare este disponibilă:

SHOW DATABASES;
sql

Baza de date de testare ar trebui să apară în lista bazelor de date:

+-------------------------------+
| Database                        |
+-------------------------------+
| information_schema   |
| mysql                              |
| performance_schema |
| test_db                          | 
| sys                                  |
+------------------------------+
sql

Adăugați un nou tabel de testare la baza de date de testare:

USE test_db;
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
sql

Introduceți câteva date de test în coloana name a tabelului de testare:

INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
sql

Verificați celelalte noduri pentru a vedea dacă tabelul de testare și datele inserate au fost transferate:

USE test_db;
SELECT * FROM test_table;
sql

Rezultatul ne arată lista persoanelor cu numele și ID-ul lor:

+----+-----------+
| id | name    |
+----+-----------+
| 1  | Alice     |
| 2  | Bob       |
| 3  | Charlie |
+----+----------+
sql

Pentru a actualiza o înregistrare de date în tabelul de testare:

UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sql

Încercați să ștergeți o înregistrare de date:

DELETE FROM test_table WHERE name = 'Bob';
sql

Verificați celelalte noduri pentru a vedea dacă actualizările și ștergerile au fost replicate:

SELECT * FROM test_table;
sql

Modificările apar cu succes pe fiecare nod:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Mergi la meniul principal