# Sådan konfigureres en MariaDB Galera-klynge på Ubuntu 20.04

Opsætning af en **MariaDB-klynge med Galera Cluster** forbedrer pålideligheden og forenkler skaleringen af din database. I vores vejledning viser vi dig, hvordan du installerer en Galera-klynge på Ubuntu 20.04.

## Kravene til en Galera Cluster MariaDB

For at installere en MariaDB Galera-klynge på **Ubuntu 20.04** skal du opfylde følgende krav:

- **Flere servere**: Der kræves mindst tre servere eller virtuelle maskiner for at oprette en klynge. Alle servere skal være på samme netværk.
- **Root-rettigheder**: Du skal have root-adgang eller mindst administratorrettigheder på serverne.

## Sådan konfigureres Galera Cluster MariaDB på Ubuntu 20.04 trin for trin

En MariaDB Galera-klynge er en praktisk **databaseløsning**, der giver høj tilgængelighed, dataintegritet og skalerbarhed til krævende applikationer. I denne trinvise vejledning vil vi guide dig gennem processen med at opsætte en MariaDB Galera-klynge på Ubuntu 20.04. Før du begynder, skal du sikre dig, at du har mindst tre servere eller virtuelle maskiner til rådighed til at opsætte klyngen.

### Trin 1: Opdater pakker

Du bør først opdatere dit Ubuntu-system til den nyeste version. Dette er vigtigt, så du har **de nyeste pakker og sikkerhedsopdateringer**.

Åbn en terminal og udfør følgende kommando for at opdatere pakkekilderne:

```shell
sudo apt update
```

Installer alle tilgængelige opdateringer:

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

Vi anbefaler også at fjerne **forældede eller ubrugte pakker** for at rydde op på serverne:

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

### Trin 2: Installer MariaDB på serverne

Installer nu MariaDB på alle dine servere. Fra **version 10.1** og frem er Galera-pakkerne samlet med MariaDB-servere.

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

Efter installationen kan du starte MariaDB-tjenesten:

```shell
sudo systemctl start mariadb
```

Brug følgende kommando til at indstille MariaDB til at blive aktiveret automatisk hver gang systemet genstartes:

```shell
sudo systemctl enable mariadb
```

Kontroller, om MariaDB kører:

```shell
sudo systemctl status mariadb
```

Du bør også foretage nogle grundlæggende sikkerhedsindstillinger og konfigurere databasen. For at gøre dette skal du starte **installationsguiden**:

```shell
sudo mysql_secure_installation
```

Guiden leder dig gennem trinene, såsom at indstille en root-adgangskode, fjerne anonyme brugere eller fjerne testdatabasen.

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

Scriptet beder først om det aktuelle **root-adgangskode**. Hvis du installerer [MariaDB på Ubuntu 20.04](https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/installer-mariadb-paa-ubuntu-2004/) for første gang, skal du blot trykke på Enter og derefter indtaste en ny adgangskode.

### Trin 3: Konfigurer Galera Cluster MariaDB-noder

Opret en `cnf` i biblioteket `/etc/mysql/conf.d` på hver node for at definere de Galera-specifikke indstillinger.

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

Denne fil indeholder generelle databaseindstillinger, såsom det binære protokolformat og **standardlagringsmotoren**. Den indeholder også konfigurationer for Galera-klyngen, herunder klyngens navn og adresse.

Indsæt følgende linjer for den første node:

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

- **Generelle databaseindstillinger**: Dette omfatter indstillinger som `binlog_format=ROW` for formatet af de binære logfiler og `default-storage-engine=innodb` for standardlagringsmotoren.
- **Galera-udbyderkonfiguration**: Indstillinger som `wsrep_on=ON` bruges til at aktivere Galera-replikering, og `wsrep_provider=/usr/lib/galera/libgalera_smm.so` bruges til at angive stien til Galera-biblioteket.
- **Galera-klyngekonfiguration**: Dette omfatter klyngenavnet (`wsrep_cluster_name`) og klyngeadressen (`wsrep_cluster_address`), som indeholder IP-adresserne eller værtsnavnene på noderne i klyngen.
- **Galera-synkroniseringskonfiguration**: Konfigurerer metoden til State Snapshot Transfer (SST), f.eks. `wsrep_sst_method=rsync`.
- **Galera-node-konfiguration**: Definerer IP-adressen eller værtsnavnet for den aktuelle node (`wsrep_node_address`) og navnet på noden (`wsrep_node_name`).

Når du har gemt filen, skal du oprette en til den anden node:

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

Fortsæt nu med den sidste node:

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

### Trin 4: Ændr firewall på servere

Da noderne kommunikerer med hinanden via specifikke porte, skal du justere **firewallindstillingerne**.

Åbn følgende **porte** i din firewall:

- **Port 3306**: Dette er standardporten for MariaDB. Den bruges til databasekommunikation og -anmodninger.
- **Galera-porte**: Ud over standardporten 3306 bruger Galera også andre porte til intern kommunikation mellem noderne. Standardområdet for Galera-porte er normalt 4567, 4568 og 4444 for State Snapshot Transfer (SST).

Du kan definere firewallindstillingerne på din Ubuntu-server med følgende kommando:

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

### Trin 5: Start Galera Cluster MariaDB

Stop MariaDB-tjenesten, hvis den allerede kører:

```shell
sudo systemctl stop mariadb
```

Denne kommando starter **MariaDB-serveren** og initialiserer en ny Galera-klynge på den første node:

```shell
sudo galera_new_cluster
```

Kontroller antallet af noder i klyngen:

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

Du bør modtage følgende output:

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

Den første node blev startet med succes.

Aktivér den anden node:

```shell
systemctl start mariadb
```

Kontroller, om antallet af noder er steget:

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

I konsollen ser vi:

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

Nu starter vi den tredje node:

```shell
systemctl start mariadb
```

Kontroller, om noden fungerer korrekt:

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

Der bør nu være tre noder i klyngen:

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

### Trin 6: Test replikeringen

Sørg for, at du kan oprette forbindelse til alle noder i klyngen. Brug **MariaDB-klienten** til at logge ind som root-bruger eller som en anden bruger med tilstrækkelige rettigheder.

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

Opret en ny testdatabase på en af noderne i klyngen:

```sql
CREATE DATABASE test_db;
```

Log ind på de andre noder og kontroller, om testdatabasen er tilgængelig:

```sql
SHOW DATABASES;
```

Testdatabasen skal vises på listen over databaser:

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

Tilføj en ny testtabel til testdatabasen:

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

Indtast nogle testdata i kolonne `name` i testtabellen:

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

Kontroller de andre noder for at se, om testtabellen og de indsatte data er blevet overført:

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

Outputtet viser os listen over personer med deres navne og ID:

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

Sådan opdateres en datapost i testtabellen:

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

Prøv at slette en datapost:

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

Kontroller de andre noder for at se, om opdateringerne og sletningerne er blevet replikeret:

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

Ændringerne vises korrekt på alle noder:

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


This is a markdown version of: [https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/mariadb-galera-klynge-paa-ubuntu-2004/](https://www.ionos.com/da-dk/digitalguide/hosting/tekniske-spoergsmaal/mariadb-galera-klynge-paa-ubuntu-2004/) for AI/LLM consumption.