Het opzetten van een MariaDB-cluster met Galera Cluster verbetert de be­trouw­baar­heid en ver­een­vou­digt het schalen van uw database. In onze tutorial laten we u zien hoe u een Galera-cluster op Ubuntu 20.04 in­stal­leert.

De vereisten voor een Galera Cluster MariaDB

Om een MariaDB Galera-cluster op Ubuntu 20.04 te in­stal­le­ren, moet u aan de volgende vereisten voldoen:

  • Meerdere servers: Er zijn minimaal drie servers of virtuele machines nodig om een cluster te bouwen. Alle servers moeten zich op hetzelfde netwerk bevinden.
  • Root­rech­ten: U hebt root-toegang of ten minste be­heer­ders­rech­ten op de servers nodig.

Hoe Galera Cluster MariaDB stap voor stap op Ubuntu 20.04 te in­stal­le­ren

Een MariaDB Galera-cluster is een prak­ti­sche da­ta­ba­se­o­p­los­sing die hoge be­schik­baar­heid, ge­ge­vens­in­te­gri­teit en schaal­baar­heid biedt voor veel­ei­sen­de toe­pas­sin­gen. In deze staps­ge­wij­ze hand­lei­ding be­ge­lei­den we u bij het opzetten van een MariaDB Galera-cluster op Ubuntu 20.04. Voordat u begint, moet u ervoor zorgen dat u ten minste drie servers of virtuele machines be­schik­baar hebt om het cluster op te zetten.

Stap 1: Pakketten bijwerken

U moet eerst uw Ubuntu-systeem updaten naar de nieuwste versie. Dit is es­sen­ti­eel om te zorgen dat u beschikt over de meest recente pakketten en be­vei­li­ging­sup­da­tes.

Open een terminal en voer de volgende opdracht uit om de pak­ket­bron­nen bij te werken:

sudo apt update
shell

In­stal­leer alle be­schik­ba­re updates:

sudo apt upgrade -y
shell

We raden ook aan om ver­ou­der­de of on­ge­bruik­te pakketten te ver­wij­de­ren om de servers op te schonen:

sudo apt autoremove -y
shell

Stap 2: In­stal­leer MariaDB op de servers

In­stal­leer nu MariaDB op al uw servers. Vanaf versie 10.1 worden de Galera-pakketten mee­ge­le­verd met MariaDB-servers.

sudo apt install mariadb-server
shell

Na de in­stal­la­tie kunt u de MariaDB-service starten:

sudo systemctl start mariadb
shell

Gebruik de volgende opdracht om MariaDB zo in te stellen dat het au­to­ma­tisch wordt ge­ac­ti­veerd telkens wanneer het systeem opnieuw wordt opgestart:

sudo systemctl enable mariadb
shell

Con­tro­leer of MariaDB actief is:

sudo systemctl status mariadb
shell

U moet ook enkele ba­sis­be­vei­li­gings­in­stel­lin­gen uitvoeren en de database con­fi­gu­re­ren. Start hiervoor de in­stal­la­tie­wi­zard:

sudo mysql_secure_installation
shell

De wizard begeleidt u door de stappen, zoals het instellen van een root-wacht­woord, het ver­wij­de­ren van anonieme ge­brui­kers of het ver­wij­de­ren van de test­da­ta­ba­se.

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

Het script vraagt eerst om het huidige root-wacht­woord. Als u MariaDB voor het eerst op Ubuntu 20.04 in­stal­leert, drukt u gewoon op Enter en voert u ver­vol­gens een nieuw wacht­woord in.

Stap 3: Con­fi­gu­reer Galera Cluster MariaDB-knoop­pun­ten

Maak een cnf -bestand aan in de map /etc/mysql/conf.d op elke node om de Galera-spe­ci­fie­ke in­stel­lin­gen te de­fi­ni­ë­ren.

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

Dit bestand bevat algemene database-in­stel­lin­gen, zoals het binaire pro­to­col­for­maat en de stan­daard­op­sla­gen­gi­ne. Het bevat ook con­fi­gu­ra­ties voor het Galera-cluster, waaronder de clus­ter­naam en het clus­ter­adres.

Voeg de volgende regels toe voor het eerste knooppunt:

[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
  • Algemene database-in­stel­lin­gen: Dit omvat in­stel­lin­gen zoals binlog_format=ROW voor het formaat van de binaire logboeken en default-storage-engine=innodb voor de standaard op­sla­gen­gi­ne.
  • Galera-pro­vi­der­con­fi­gu­ra­tie: in­stel­lin­gen zoals wsrep_on=ON worden gebruikt om Galera-re­pli­ca­tie in te schakelen en wsrep_provider=/usr/lib/galera/libgalera_smm.so om het pad naar de Galera-bi­bli­o­theek op te geven.
  • Galera-clus­ter­con­fi­gu­ra­tie: Dit omvat de clus­ter­naam (wsrep_cluster_name) en het clus­ter­adres (wsrep_cluster_address), dat de IP-adressen of hostnamen van de knoop­pun­ten in het cluster bevat.
  • Galera-syn­chro­ni­sa­tie­con­fi­gu­ra­tie: con­fi­gu­reert de methode voor de State Snapshot Transfer (SST), bij­voor­beeld wsrep_sst_method=rsync.
  • Galera-knoop­punt­con­fi­gu­ra­tie: de­fi­ni­eert het IP-adres of de hostnaam van het huidige knooppunt (wsrep_node_address) en de naam van het knooppunt (wsrep_node_name).

Nadat u het bestand hebt op­ge­sla­gen, maakt u een bestand voor het tweede knooppunt:

[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

Ga nu verder met het laatste knooppunt:

[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

Stap 4: Wijzig de firewall op servers

Aangezien de knoop­pun­ten via spe­ci­fie­ke poorten met elkaar com­mu­ni­ce­ren, moet u de fire­wal­lin­stel­lin­gen aanpassen.

Open de volgende poorten in uw firewall:

  • Poort 3306: Dit is de stan­daard­poort voor MariaDB. Deze wordt gebruikt voor da­ta­base­com­mu­ni­ca­tie en -verzoeken.
  • Galera-poorten: Naast de stan­daard­poort 3306 gebruikt Galera ook andere poorten voor interne com­mu­ni­ca­tie tussen de knoop­pun­ten. Het stan­daard­be­reik voor Galera-poorten is meestal 4567, 4568 en 4444 voor de State Snapshot Transfer (SST).

U kunt de fire­wal­lin­stel­lin­gen op uw Ubuntu-server de­fi­ni­ë­ren met de volgende opdracht:

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

Stap 5: Start Galera Cluster MariaDB

Stop de MariaDB-service als deze al actief is:

sudo systemctl stop mariadb
shell

Dit commando start de MariaDB-server en ini­ti­a­li­seert een nieuwe Galera-cluster op het eerste knooppunt:

sudo galera_new_cluster
shell

Con­tro­leer het aantal knoop­pun­ten in het cluster:

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

U zou de volgende uitvoer moeten krijgen:

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

Het eerste knooppunt is succesvol gestart.

Activeer het tweede knooppunt:

systemctl start mariadb
shell

Con­tro­leer of het aantal knoop­pun­ten is toe­ge­no­men:

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

In de console zien we:

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

Nu beginnen we met het derde knooppunt:

systemctl start mariadb
shell

Con­tro­leer of het knooppunt correct werkt:

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

Er zouden nu drie knoop­pun­ten in het cluster moeten zijn:

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

Stap 6: Test de re­pli­ca­tie

Zorg ervoor dat u ver­bin­ding kunt maken met elk knooppunt in het cluster. Gebruik de MariaDB-client om in te loggen als root­ge­brui­ker of als een andere gebruiker met voldoende rechten.

mysql -u root -p
shell

Maak een nieuwe test­da­ta­ba­se aan op een van de knoop­pun­ten in het cluster:

CREATE DATABASE test_db;
sql

Log in op de andere knoop­pun­ten en con­tro­leer of de test­da­ta­ba­se be­schik­baar is:

SHOW DATABASES;
sql

De test­da­ta­ba­se moet in de lijst met databases ver­schij­nen:

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

Voeg een nieuwe testtabel toe aan de test­da­ta­ba­se:

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

Voer enkele test­ge­ge­vens in de kolom name van de testtabel in:

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

Con­tro­leer op de andere knoop­pun­ten of de testtabel en de in­ge­voeg­de gegevens zijn over­ge­dra­gen:

USE test_db;
SELECT * FROM test_table;
sql

De uitvoer toont ons de lijst met personen met hun namen en ID:

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

Om een ge­ge­vens­re­cord in de testtabel bij te werken:

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

Probeer een ge­ge­vens­re­cord te ver­wij­de­ren:

DELETE FROM test_table WHERE name = 'Bob';
sql

Con­tro­leer op de andere knoop­pun­ten of de updates en ver­wij­de­rin­gen zijn ge­re­pli­ceerd:

SELECT * FROM test_table;
sql

De wij­zi­gin­gen worden op elk knooppunt correct weer­ge­ge­ven:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Ga naar hoofdmenu