# MariaDB Galera -klusterin määrittäminen Ubuntu 20.04:ssa

**MariaDB-klusterin** määrittäminen **Galera Clusterin avulla** parantaa tietokannan luotettavuutta ja yksinkertaistaa sen skaalausta. Opetusohjelmassamme näytämme, kuinka Galera-klusteri asennetaan Ubuntu 20.04:ään.

## Galera Cluster MariaDB:n vaatimukset

MariaDB Galera -klusterin asentaminen **Ubuntu 20.04**:ään edellyttää seuraavien vaatimusten täyttymistä:

- **Useita palvelimia**: Klusterin rakentamiseen tarvitaan vähintään kolme palvelinta tai virtuaalikoneita. Kaikkien palvelimien tulee olla samassa verkossa.
- **Juurioikeudet**: Tarvitset pääkäyttäjän oikeudet tai vähintään järjestelmänvalvojan oikeudet palvelimilla.

## Galera Cluster MariaDB:n asennus Ubuntu 20.04:ään vaihe vaiheelta

MariaDB Galera -klusteri on käytännöllinen **tietokantaratkaisu**, joka tarjoaa korkean käytettävyyden, tietojen eheyden ja skaalautuvuuden vaativille sovelluksille. Tässä vaiheittaisessa oppaassa opastamme sinut MariaDB Galera -klusterin asennuksessa Ubuntu 20.04 -käyttöjärjestelmään. Ennen kuin aloitat, varmista, että sinulla on vähintään kolme palvelinta tai virtuaalikoneita klusterin asentamista varten.

### Vaihe 1: Päivitä paketit

Sinun tulee ensin päivittää Ubuntu-järjestelmäsi uusimpaan versioon. Tämä on välttämätöntä, jotta sinulla on käytettävissäsi **ajantasaiset paketit ja tietoturvapäivitykset**.

Avaa terminaali ja suorita seuraava komento pakettilähteiden päivittämiseksi:

```shell
sudo apt update
```

Asenna kaikki saatavilla olevat päivitykset:

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

Suosittelemme myös **vanhentuneiden tai käyttämättömien pakettien** poistamista palvelimien puhdistamiseksi:

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

### Vaihe 2: Asenna MariaDB palvelimille

Asenna nyt MariaDB kaikkiin palvelimiisi. **Versiosta 10.1** lähtien Galera-paketit ovat mukana MariaDB-palvelimissa.

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

Asennuksen jälkeen voit käynnistää MariaDB-palvelun:

```shell
sudo systemctl start mariadb
```

Käytä seuraavaa komentoa, jotta MariaDB aktivoituu automaattisesti joka kerta, kun järjestelmä käynnistetään uudelleen:

```shell
sudo systemctl enable mariadb
```

Tarkista, onko MariaDB käynnissä:

```shell
sudo systemctl status mariadb
```

Sinun tulee myös tehdä joitakin perusturvallisuusasetuksia ja määrittää tietokanta. Käynnistä tätä varten **asennusvelho**:

```shell
sudo mysql_secure_installation
```

Ohjattu toiminto opastaa sinut vaiheiden läpi, kuten juurisalasanan asettaminen, nimettömien käyttäjien poistaminen tai testitietokannan poistaminen.

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

Skripti pyytää ensin nykyisen **pääkäyttäjän salasanan**. Jos asennat [MariaDB:n Ubuntu 20.04:ään](https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/asenna-mariadb-ubuntu-2004aeaen/) ensimmäistä kertaa, paina vain Enter-näppäintä ja kirjoita sitten uusi salasana.

### Vaihe 3: Määritä Galera Cluster MariaDB -solmut

Luo `cnf` -tiedosto hakemistoon `/etc/mysql/conf.d` jokaisessa solmussa Galera-spesifisten asetusten määrittelemiseksi.

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

Tämä tiedosto sisältää yleisiä tietokanta-asetuksia, kuten binäärisen protokollan muodon ja **oletustallennusmoottorin**. Se sisältää myös Galera-klusterin asetukset, kuten klusterin nimen ja osoitteen.

Lisää seuraavat rivit ensimmäiseen solmuun:

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

- **Yleiset tietokanta-asetukset**: Näihin kuuluvat esimerkiksi asetukset `binlog_format=ROW` (binaarilokien muoto) ja `default-storage-engine=innodb` (oletustallennusmoottori).
- **Galera-palveluntarjoajan kokoonpano**: Asetuksia kuten `wsrep_on=ON` käytetään Galera-replikoinnin ottamiseen käyttöön ja `wsrep_provider=/usr/lib/galera/libgalera_smm.so` Galera-kirjaston polun määrittämiseen.
- **Galera-klusterin konfigurointi**: Tähän kuuluvat klusterin nimi (`wsrep_cluster_name`) ja klusterin osoite (`wsrep_cluster_address`), joka sisältää klusterin solmujen IP-osoitteet tai isäntänimet.
- **Galera-synkronointikokoonpano**: Määrittää State Snapshot Transfer (SST) -menetelmän, esim. `wsrep_sst_method=rsync`.
- **Galera-solmun konfigurointi**: Määrittää nykyisen solmun IP-osoitteen tai isäntänimen (`wsrep_node_address`) ja solmun nimen (`wsrep_node_name`).

Kun olet tallentanut tiedoston, luo toinen tiedosto toiselle solmulle:

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

Jatka nyt viimeisellä solmulla:

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

### Vaihe 4: Muuta palvelimien palomuuria

Koska solmut kommunikoivat keskenään tiettyjen porttien kautta, sinun on muutettava **palomuurin asetuksia**.

Avaa seuraavat **portit** palomuurissasi:

- **Portti 3306**: Tämä on MariaDB:n vakioportti. Sitä käytetään tietokantaviestintään ja -pyyntöihin.
- **Galera-portit**: Vakioportin 3306 lisäksi Galera käyttää myös muita portteja solmujen väliseen sisäiseen viestintään. Galera-porttien vakioväli on yleensä 4567, 4568 ja 4444 State Snapshot Transfer (SST) -toiminnolle.

Voit määrittää palomuuriasetukset Ubuntu-palvelimellasi seuraavalla komennolla:

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

### Vaihe 5: Käynnistä Galera Cluster MariaDB

Pysäytä MariaDB-palvelu, jos se on jo käynnissä:

```shell
sudo systemctl stop mariadb
```

Tämä komento käynnistää **MariaDB-palvelimen** ja alustaa uuden Galera-klusterin ensimmäisessä solmussa:

```shell
sudo galera_new_cluster
```

Tarkista klusterin solmujen lukumäärä:

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

Sinun pitäisi saada seuraava tulos:

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

Ensimmäinen solmu käynnistyi onnistuneesti.

Aktivoi toinen solmu:

```shell
systemctl start mariadb
```

Tarkista, onko solmujen määrä lisääntynyt:

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

Konsolissa näemme:

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

Nyt aloitamme kolmannen solmun:

```shell
systemctl start mariadb
```

Tarkista, toimiiko solmu oikein:

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

Klusterissa pitäisi nyt olla kolme solmua:

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

### Vaihe 6: Testaa replikointi

Varmista, että voit muodostaa yhteyden kaikkiin klusterin solmuihin. Kirjaudu **MariaDB-asiakasohjelmalla** sisään pääkäyttäjänä tai toisena käyttäjänä, jolla on riittävät oikeudet.

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

Luo uusi testitietokanta johonkin klusterin solmuista:

```sql
CREATE DATABASE test_db;
```

Kirjaudu muihin solmuihin ja tarkista, onko testitietokanta käytettävissä:

```sql
SHOW DATABASES;
```

Testitietokanta pitäisi näkyä tietokantojen luettelossa:

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

Lisää uusi testitaulukko testitietokantaan:

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

Syötä testitietoja testitaulukon sarakkeeseen `name`:

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

Tarkista muista solmuista, onko testitaulukko ja lisätty data siirretty:

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

Tuloksena näkyy luettelo henkilöistä heidän nimineen ja tunnuksineen:

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

Testitaulukon tietueen päivittäminen:

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

Yritä poistaa tietue:

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

Tarkista muista solmuista, onko päivitykset ja poistot replikoitu:

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

Muutokset näkyvät onnistuneesti jokaisessa solmussa:

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


This is a markdown version of: [https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/mariadb-galera-klusteri-ubuntu-2004ssa/](https://www.ionos.com/fi-fi/digitalguide/isaennoeinti/tekniset-asiat/mariadb-galera-klusteri-ubuntu-2004ssa/) for AI/LLM consumption.