# Hvordan sette opp en MariaDB Galera-klynge på Ubuntu 20.04

Å sette opp en **MariaDB-klynge med Galera Cluster** forbedrer påliteligheten og forenkler skaleringen av databasen din. I vår veiledning viser vi deg hvordan du installerer en Galera-klynge på Ubuntu 20.04.

## Kravene til en Galera Cluster MariaDB

For å installere en MariaDB Galera-klynge på **Ubuntu 20.04** må du oppfylle følgende krav:

- **Flere servere**: Det kreves minst tre servere eller virtuelle maskiner for å bygge en klynge. Alle servere må være på samme nettverk.
- **Root-rettigheter**: Du trenger root-tilgang eller minst administratorrettigheter på serverne.

## Hvordan konfigurere Galera Cluster MariaDB på Ubuntu 20.04 trinn for trinn

En MariaDB Galera-klynge er en praktisk **databaseløsning** som gir høy tilgjengelighet, dataintegritet og skalerbarhet for krevende applikasjoner. I denne trinnvise veiledningen vil vi gå gjennom prosessen med å konfigurere en MariaDB Galera-klynge på Ubuntu 20.04. Før du begynner, må du sørge for at du har minst tre servere eller virtuelle maskiner tilgjengelig for å konfigurere klyngen.

### Trinn 1: Oppdater pakker

Du bør først oppdatere Ubuntu-systemet til den nyeste versjonen. Dette er viktig for at du skal ha **oppdaterte pakker og sikkerhetsoppdateringer**.

Åpne en terminal og utfør følgende kommando for å oppdatere pakkekildene:

```shell
sudo apt update
```

Installer alle tilgjengelige oppdateringer:

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

Vi anbefaler også å fjerne **utdaterte eller ubrukte pakker** for å rydde opp i serverne:

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

### Trinn 2: Installer MariaDB på serverne

Nå kan du installere MariaDB på alle serverne dine. Fra **versjon 10.1** er Galera-pakkene inkludert i MariaDB-serverne.

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

Etter installasjonen kan du starte MariaDB-tjenesten:

```shell
sudo systemctl start mariadb
```

Bruk følgende kommando for å angi at MariaDB skal aktiveres automatisk hver gang systemet startes på nytt:

```shell
sudo systemctl enable mariadb
```

Kontroller om MariaDB kjører:

```shell
sudo systemctl status mariadb
```

Du bør også foreta noen grunnleggende sikkerhetsinnstillinger og konfigurere databasen. For å gjøre dette, start **installasjonsveiviseren**:

```shell
sudo mysql_secure_installation
```

Veiviseren guider deg gjennom trinnene, for eksempel å angi et root-passord, fjerne anonyme brukere 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
```

Skriptet ber først om det gjeldende **root-passordet**. Hvis du installerer [MariaDB på Ubuntu 20.04](https://www.ionos.com/nb-no/digitalguide/hosting/tekniske-spoersmaal/installer-mariadb-paa-ubuntu-2004/) for første gang, trykker du bare Enter og skriver inn et nytt passord.

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

Opprett en `cnf` -fil i katalogen `/etc/mysql/conf.d` på hver node for å definere Galera-spesifikke innstillinger.

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

Denne filen inneholder generelle databaseinnstillinger, for eksempel binærprotokollformat og **standard lagringsmotor**. Den inneholder også konfigurasjoner for Galera-klyngen, inkludert klyngenavnet og klyngeadressen.

Sett inn følgende linjer for den første noden:

```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 databaseinnstillinger**: Dette inkluderer innstillinger som `binlog_format=ROW` for formatet på binærloggene og `default-storage-engine=innodb` for standard lagringsmotor.
- **Galera-leverandørkonfigurasjon**: Innstillinger som `wsrep_on=ON` brukes til å aktivere Galera-replikering og `wsrep_provider=/usr/lib/galera/libgalera_smm.so` til å angi banen til Galera-biblioteket.
- **Galera-klyngekonfigurasjon**: Dette inkluderer klyngenavnet (`wsrep_cluster_name`) og klyngeadressen (`wsrep_cluster_address`), som inneholder IP-adressene eller vertsnavnene til nodene i klyngen.
- **Galera-synkroniseringskonfigurasjon**: Konfigurerer metoden for State Snapshot Transfer (SST), f.eks. `wsrep_sst_method=rsync`.
- **Galera-nodekonfigurasjon**: Definerer IP-adressen eller vertsnavnet til den aktuelle noden (`wsrep_node_address`) og navnet på noden (`wsrep_node_name`).

Etter at du har lagret filen, oppretter du en for den andre noden:

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

Fortsett nå med den siste noden:

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

### Trinn 4: Endre brannmuren på serverne

Siden nodene kommuniserer med hverandre via bestemte porter, må du justere **brannmurinnstillingene**.

Åpne følgende **porter** i brannmuren din:

- **Port 3306**: Dette er standardporten for MariaDB. Den brukes til databasekommunikasjon og forespørsler.
- **Galera-porter**: I tillegg til standardporten 3306 bruker Galera også andre porter for intern kommunikasjon mellom nodene. Standardområdet for Galera-porter er vanligvis 4567, 4568 og 4444 for State Snapshot Transfer (SST).

Du kan definere brannmurinnstillingene på Ubuntu-serveren din med følgende kommando:

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

### Trinn 5: Start Galera Cluster MariaDB

Stopp MariaDB-tjenesten hvis den allerede kjører:

```shell
sudo systemctl stop mariadb
```

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

```shell
sudo galera_new_cluster
```

Kontroller antall noder i klyngen:

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

Du bør få følgende utdata:

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

Den første noden ble startet uten problemer.

Aktiver den andre noden:

```shell
systemctl start mariadb
```

Kontroller om antall noder har økt:

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

I konsollen ser vi:

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

Nå starter vi den tredje noden:

```shell
systemctl start mariadb
```

Kontroller om noden fungerer som den skal:

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

Det skal nå være tre noder i klyngen:

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

### Trinn 6: Test replikeringen

Sørg for at du kan opprette en forbindelse til alle noder i klyngen. Bruk **MariaDB-klienten** til å logge inn som root-bruker eller som en annen bruker med tilstrekkelige rettigheter.

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

Opprett en ny testdatabase på en av nodene i klyngen:

```sql
CREATE DATABASE test_db;
```

Logg inn på de andre nodene og sjekk om testdatabasen er tilgjengelig:

```sql
SHOW DATABASES;
```

Testdatabasen skal vises i listen over databaser:

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

Legg til en ny testtabell i testdatabasen:

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

Skriv inn noen testdata i kolonne `name` i testtabellen:

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

Kontroller de andre nodene for å se om testtabellen og de innsatte dataene er overført:

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

Utdataene viser oss listen over personer med navn og ID:

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

For å oppdatere en datapost i testtabellen:

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

Prøv å slette en datapost:

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

Sjekk de andre nodene for å se om oppdateringene og slettingene er replikert:

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

Endringene vises som forventet på alle noder:

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


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