# Hoe een MariaDB Galera-cluster op Ubuntu 20.04 instellen

Het opzetten van een **MariaDB-cluster met Galera Cluster** verbetert de betrouwbaarheid en vereenvoudigt het schalen van uw database. In onze tutorial laten we u zien hoe u een Galera-cluster op Ubuntu 20.04 installeert.

## De vereisten voor een Galera Cluster MariaDB

Om een MariaDB Galera-cluster op **Ubuntu 20.04** te installeren, 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.
- **Rootrechten**: U hebt root-toegang of ten minste beheerdersrechten op de servers nodig.

## Hoe Galera Cluster MariaDB stap voor stap op Ubuntu 20.04 te installeren

Een MariaDB Galera-cluster is een praktische **databaseoplossing** die hoge beschikbaarheid, gegevensintegriteit en schaalbaarheid biedt voor veeleisende toepassingen. In deze stapsgewijze handleiding begeleiden 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 beschikbaar hebt om het cluster op te zetten.

### Stap 1: Pakketten bijwerken

U moet eerst uw Ubuntu-systeem updaten naar de nieuwste versie. Dit is essentieel om te zorgen dat u beschikt over **de meest recente pakketten en beveiligingsupdates**.

Open een terminal en voer de volgende opdracht uit om de pakketbronnen bij te werken:

```shell
sudo apt update
```

Installeer alle beschikbare updates:

```shell
sudo apt upgrade -y
```

We raden ook aan om **verouderde of ongebruikte pakketten** te verwijderen om de servers op te schonen:

```shell
sudo apt autoremove -y
```

### Stap 2: Installeer MariaDB op de servers

Installeer nu MariaDB op al uw servers. Vanaf **versie 10.1** worden de Galera-pakketten meegeleverd met MariaDB-servers.

```shell
sudo apt install mariadb-server
```

Na de installatie kunt u de MariaDB-service starten:

```shell
sudo systemctl start mariadb
```

Gebruik de volgende opdracht om MariaDB zo in te stellen dat het automatisch wordt geactiveerd telkens wanneer het systeem opnieuw wordt opgestart:

```shell
sudo systemctl enable mariadb
```

Controleer of MariaDB actief is:

```shell
sudo systemctl status mariadb
```

U moet ook enkele basisbeveiligingsinstellingen uitvoeren en de database configureren. Start hiervoor de **installatiewizard**:

```shell
sudo mysql_secure_installation
```

De wizard begeleidt u door de stappen, zoals het instellen van een root-wachtwoord, het verwijderen van anonieme gebruikers of het verwijderen van de testdatabase.

```shell
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
```

Het script vraagt eerst om het huidige **root-wachtwoord**. Als u [MariaDB](https://www.ionos.com/nl-be/digitalguide/hosting/technische-zaken/mariadb-installeren-op-ubuntu-2004/) voor het eerst [op Ubuntu 20.04](https://www.ionos.com/nl-be/digitalguide/hosting/technische-zaken/mariadb-installeren-op-ubuntu-2004/) installeert, drukt u gewoon op Enter en voert u vervolgens een nieuw wachtwoord in.

### Stap 3: Configureer Galera Cluster MariaDB-knooppunten

Maak een `cnf` -bestand aan in de map `/etc/mysql/conf.d` op elke node om de Galera-specifieke instellingen te definiëren.

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

Dit bestand bevat algemene database-instellingen, zoals het binaire protocolformaat en de **standaardopslagengine**. Het bevat ook configuraties voor het Galera-cluster, waaronder de clusternaam en het clusteradres.

Voeg de volgende regels toe voor het eerste knooppunt:

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

- **Algemene database-instellingen**: Dit omvat instellingen zoals `binlog_format=ROW` voor het formaat van de binaire logboeken en `default-storage-engine=innodb` voor de standaard opslagengine.
- **Galera-providerconfiguratie**: instellingen zoals `wsrep_on=ON` worden gebruikt om Galera-replicatie in te schakelen en `wsrep_provider=/usr/lib/galera/libgalera_smm.so` om het pad naar de Galera-bibliotheek op te geven.
- **Galera-clusterconfiguratie**: Dit omvat de clusternaam (`wsrep_cluster_name`) en het clusteradres (`wsrep_cluster_address`), dat de IP-adressen of hostnamen van de knooppunten in het cluster bevat.
- **Galera-synchronisatieconfiguratie**: configureert de methode voor de State Snapshot Transfer (SST), bijvoorbeeld `wsrep_sst_method=rsync`.
- **Galera-knooppuntconfiguratie**: definieert 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 opgeslagen, maakt u een bestand voor het tweede knooppunt:

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

Ga nu verder met het laatste knooppunt:

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

### Stap 4: Wijzig de firewall op servers

Aangezien de knooppunten via specifieke poorten met elkaar communiceren, moet u de **firewallinstellingen** aanpassen.

Open de volgende **poorten** in uw firewall:

- **Poort 3306**: Dit is de standaardpoort voor MariaDB. Deze wordt gebruikt voor databasecommunicatie en -verzoeken.
- **Galera-poorten**: Naast de standaardpoort 3306 gebruikt Galera ook andere poorten voor interne communicatie tussen de knooppunten. Het standaardbereik voor Galera-poorten is meestal 4567, 4568 en 4444 voor de State Snapshot Transfer (SST).

U kunt de firewallinstellingen op uw Ubuntu-server definiëren met de volgende opdracht:

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

### Stap 5: Start Galera Cluster MariaDB

Stop de MariaDB-service als deze al actief is:

```shell
sudo systemctl stop mariadb
```

Dit commando start de **MariaDB-server** en initialiseert een nieuwe Galera-cluster op het eerste knooppunt:

```shell
sudo galera_new_cluster
```

Controleer het aantal knooppunten in het cluster:

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

U zou de volgende uitvoer moeten krijgen:

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

Het eerste knooppunt is succesvol gestart.

Activeer het tweede knooppunt:

```shell
systemctl start mariadb
```

Controleer of het aantal knooppunten is toegenomen:

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

In de console zien we:

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

Nu beginnen we met het derde knooppunt:

```shell
systemctl start mariadb
```

Controleer of het knooppunt correct werkt:

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

Er zouden nu drie knooppunten in het cluster moeten zijn:

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

### Stap 6: Test de replicatie

Zorg ervoor dat u verbinding kunt maken met elk knooppunt in het cluster. Gebruik de **MariaDB-client** om in te loggen als rootgebruiker of als een andere gebruiker met voldoende rechten.

```shell
mysql -u root -p
```

Maak een nieuwe testdatabase aan op een van de knooppunten in het cluster:

```sql
CREATE DATABASE test_db;
```

Log in op de andere knooppunten en controleer of de testdatabase beschikbaar is:

```sql
SHOW DATABASES;
```

De testdatabase moet in de lijst met databases verschijnen:

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

Voeg een nieuwe testtabel toe aan de testdatabase:

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

Voer enkele testgegevens in de kolom `name` van de testtabel in:

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

Controleer op de andere knooppunten of de testtabel en de ingevoegde gegevens zijn overgedragen:

```sql
USE test_db;
SELECT * FROM test_table;
```

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

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

Om een gegevensrecord in de testtabel bij te werken:

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

Probeer een gegevensrecord te verwijderen:

```sql
DELETE FROM test_table WHERE name = 'Bob';
```

Controleer op de andere knooppunten of de updates en verwijderingen zijn gerepliceerd:

```sql
SELECT * FROM test_table;
```

De wijzigingen worden op elk knooppunt correct weergegeven:

```sql
+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
```


This is a markdown version of: [https://www.ionos.com/nl-be/digitalguide/hosting/technische-zaken/mariadb-galera-cluster-op-ubuntu-2004/](https://www.ionos.com/nl-be/digitalguide/hosting/technische-zaken/mariadb-galera-cluster-op-ubuntu-2004/) for AI/LLM consumption.