# Kako nastaviti MariaDB Galera cluster na Ubuntu 20.04

Nastavitev **MariaDB-sklopa z Galera Cluster** izboljša zanesljivost in poenostavi skaliranje vaše zbirke podatkov. V našem vodiču vam bomo pokazali, kako namestiti Galera Cluster na Ubuntu 20.04.

## Zahteve za Galera Cluster MariaDB

Za namestitev MariaDB Galera klastra na **Ubuntu 20.04** morate izpolniti naslednje zahteve:

- **Več strežnikov**: Za vzpostavitev gruče je potrebnih vsaj tri strežnike ali virtualne stroje. Vsi strežniki morajo biti v istem omrežju.
- **Pravice root**: Potrebujete root dostop ali vsaj administrativne pravice na strežnikih.

## Kako korak za korakom nastaviti Galera Cluster MariaDB na Ubuntu 20.04

MariaDB Galera cluster je praktična **rešitev za baze podatkov**, ki zagotavlja visoko razpoložljivost, celovitost podatkov in skalabilnost za zahtevne aplikacije. V tem podrobnem vodniku vas bomo popeljali skozi proces nastavitve MariaDB Galera clusterja na Ubuntu 20.04. Preden začnete, se prepričajte, da imate na voljo vsaj tri strežnike ali virtualne stroje za nastavitev clusterja.

### Korak 1: Posodobite pakete

Najprej posodobite svoj sistem Ubuntu na najnovejšo različico. To je nujno, da boste imeli **najnovejše pakete in varnostne posodobitve**.

Odprite terminal in izvedite naslednji ukaz, da posodobite vire paketov:

```shell
sudo apt update
```

Namestite vse razpoložljive posodobitve:

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

Priporočamo tudi odstranitev **zastarelih ali neuporabljanih paketov**, da se strežniki očistijo:

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

### Korak 2: Namestite MariaDB na strežnike

Sedaj namestite MariaDB na vse svoje strežnike. Od **različice 10.1** naprej so paketi Galera priloženi strežnikom MariaDB.

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

Po namestitvi lahko zaženete storitev MariaDB:

```shell
sudo systemctl start mariadb
```

Uporabite naslednji ukaz, da nastavite MariaDB tako, da se samodejno aktivira ob vsakem ponovnem zagonu sistema:

```shell
sudo systemctl enable mariadb
```

Preverite, ali MariaDB deluje:

```shell
sudo systemctl status mariadb
```

Prav tako morate opraviti nekaj osnovnih varnostnih nastavitev in konfigurirati bazo podatkov. Za to zaženite **čarovnika za nastavitev**:

```shell
sudo mysql_secure_installation
```

Čarovnik vas vodi skozi posamezne korake, kot so nastavitev gesla za korenski uporabnik, odstranitev anonimnih uporabnikov ali odstranitev testne zbirke podatkov.

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

Scenarij najprej zahteva trenutno **geslo** za **root**. Če [MariaDB](https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/namestite-mariadb-na-ubuntu-2004/) namestite [na Ubuntu 20.04](https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/namestite-mariadb-na-ubuntu-2004/) prvič, preprosto pritisnite Enter in nato vnesite novo geslo.

### Korak 3: Konfigurirajte vozlišča Galera Cluster MariaDB

V vsakem vozlišču ustvarite datoteko `cnf` v imeniku `/etc/mysql/conf.d`, da opredelite nastavitve, specifične za Galero.

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

Ta datoteka vsebuje splošne nastavitve baze podatkov, kot so format binarnega protokola in **privzeti shranjevalni mehanizem**. Vsebuje tudi konfiguracije za Galera cluster, vključno z imenom in naslovom clusterja.

Vstavi naslednje vrstice za prvo vozlišče:

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

- **Splošne nastavitve baze podatkov**: To vključuje nastavitve, kot so `binlog_format=ROW` za format binarnih dnevnikov in `default-storage-engine=innodb` za privzeti shranjevalni mehanizem.
- **Konfiguracija ponudnika Galera**: Nastavitve, kot je `wsrep_on=ON`, se uporabljajo za omogočanje replikacije Galera, `wsrep_provider=/usr/lib/galera/libgalera_smm.so` pa za določitev poti do knjižnice Galera.
- **Konfiguracija Galera klastra**: To vključuje ime klastra (`wsrep_cluster_name`) in naslov klastra (`wsrep_cluster_address`), ki vsebuje IP naslove ali imena gostiteljev vozlišč v klastru.
- **Konfiguracija sinhronizacije Galera**: Konfigurira metodo za prenos stanja (SST), npr. `wsrep_sst_method=rsync`.
- **Konfiguracija vozlišča Galera**: Določa IP naslov ali ime gostitelja trenutnega vozlišča (`wsrep_node_address`) in ime vozlišča (`wsrep_node_name`).

Ko shranite datoteko, ustvarite datoteko za drugi vozlišče:

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

Sedaj nadaljujte z zadnjim vozliščem:

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

### Korak 4: Spremenite požarni zid na strežnikih

Ker vozlišča komunicirajo med seboj prek posebnih vrat, morate prilagoditi **nastavitve požarnega zidu**.

Odprite naslednje **vrata** v požarnem zidu:

- **Vrata 3306**: To so standardna vrata za MariaDB. Uporabljajo se za komunikacijo in zahteve baze podatkov.
- **Vrata Galera**: Poleg standardnega vrat 3306 Galera uporablja tudi druga vrata za notranjo komunikacijo med vozlišči. Standardni razpon za vrata Galera je običajno 4567, 4568 in 4444 za prenos stanja (SST).

Nastavitve požarnega zidu na strežniku Ubuntu lahko določite z naslednjim ukazom:

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

### Korak 5: Zaženite Galera Cluster MariaDB

Ustavite storitev MariaDB, če že teče:

```shell
sudo systemctl stop mariadb
```

Ta ukaz zažene **strežnik MariaDB** in inicializira nov Galera cluster na prvem vozlišču:

```shell
sudo galera_new_cluster
```

Preverite število vozlišč v gruči:

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

Prejeli boste naslednji izpis:

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

Prvi vozlišče je bil uspešno zagnan.

Aktivirajte drugi vozlišče:

```shell
systemctl start mariadb
```

Preverite, ali se je število vozlišč povečalo:

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

V konzoli vidimo:

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

Sedaj začnemo tretji vozlišče:

```shell
systemctl start mariadb
```

Preverite, ali vozlišče deluje pravilno:

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

V gruči naj bi bilo zdaj tri vozlišča:

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

### Korak 6: Preizkusite replikacijo

Prepričajte se, da lahko vzpostavite povezavo z vsakim vozliščem v gruči. Uporabite **odjemalca MariaDB**, da se prijavite kot uporabnik root ali drug uporabnik z zadostnimi pravicami.

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

Ustvarite novo testno bazo podatkov na enem od vozlišč v gruči:

```sql
CREATE DATABASE test_db;
```

Prijavite se v druge vozlišča in preverite, ali je testna baza podatkov na voljo:

```sql
SHOW DATABASES;
```

Testna baza podatkov se mora pojaviti na seznamu baz podatkov:

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

Dodajte novo testno tabelo v testno bazo podatkov:

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

Vnesite nekaj testnih podatkov v stolpec `name` testne tabele:

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

Preverite druge vozlišča, da vidite, ali so bili preneseni testna tabela in vstavljeni podatki:

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

Izpis nam prikaže seznam oseb z njihovimi imeni in identifikacijskimi številkami:

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

Za posodobitev zapisa podatkov v testni tabeli:

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

Poskusite izbrisati zapis podatkov:

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

Preverite druge vozlišča, da vidite, ali so bile posodobitve in izbrisani podatki replicirajo:

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

Spremembe se uspešno prikažejo na vsakem vozlišču:

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


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/mariadb-galera-cluster-na-ubuntu-2004/](https://www.ionos.com/sl-si/digitalguide/gostovanje/tehnicne-zadeve/mariadb-galera-cluster-na-ubuntu-2004/) for AI/LLM consumption.