# Kaip nustatyti MariaDB Galera klasterį Ubuntu 20.04

**MariaDB klasterio su Galera Cluster** įdiegimas padidina patikimumą ir supaprastina duomenų bazės mastelio keitimą. Mūsų pamokoje parodysime, kaip įdiegti Galera klasterį Ubuntu 20.04.

## Reikalavimai Galera Cluster MariaDB

Norėdami įdiegti MariaDB Galera klasterį **Ubuntu 20.04**, turite įvykdyti šiuos reikalavimus:

- **Keli serveriai**: norint sukurti klasterį, reikia mažiausiai trijų serverių arba virtualių mašinų. Visi serveriai turi būti tame pačiame tinkle.
- **Root teisės**: Jums reikalingos root teisės arba bent jau administratoriaus teisės serveriuose.

## Kaip žingsnis po žingsnio nustatyti Galera Cluster MariaDB Ubuntu 20.04 sistemoje

MariaDB Galera klasteris yra praktiškas **duomenų bazės sprendimas**, užtikrinantis aukštą prieinamumą, duomenų vientisumą ir mastelį reiklioms programoms. Šiame žingsnis po žingsnio vadove mes paaiškinsime, kaip nustatyti MariaDB Galera klasterį Ubuntu 20.04. Prieš pradėdami, įsitikinkite, kad turite bent tris serverius arba virtualias mašinas, skirtas klasteriui nustatyti.

### 1 žingsnis: Atnaujinkite paketus

Pirmiausia turėtumėte atnaujinti savo Ubuntu sistemą iki naujausios versijos. Tai būtina, kad turėtumėte **naujausius paketus ir saugumo atnaujinimus**.

Atidarykite terminalą ir vykdykite šią komandą, kad atnaujintumėte paketų šaltinius:

```shell
sudo apt update
```

Įdiekite visus galimus atnaujinimus:

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

Rekomenduojame taip pat pašalinti **pasenusius arba nenaudojamus paketus**, kad išvalytumėte serverius:

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

### 2 žingsnis: įdiekite MariaDB į serverius

Dabar įdiekite MariaDB į visus savo serverius. Nuo **10.1 versijos** Galera paketai yra pridedami prie MariaDB serverių.

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

Įdiegus, galite paleisti MariaDB paslaugą:

```shell
sudo systemctl start mariadb
```

Naudokite šią komandą, kad MariaDB būtų aktyvuojama automatiškai kiekvieną kartą, kai sistema yra perkraunama:

```shell
sudo systemctl enable mariadb
```

Patikrinkite, ar MariaDB veikia:

```shell
sudo systemctl status mariadb
```

Taip pat turėtumėte atlikti keletą pagrindinių saugumo nustatymų ir sukonfigūruoti duomenų bazę. Norėdami tai padaryti, paleiskite **sąrankos vedlį**:

```shell
sudo mysql_secure_installation
```

Vedlys padės jums atlikti visus veiksmus, pvz., nustatyti pagrindinį slaptažodį, pašalinti anonimiškus vartotojus arba pašalinti bandomąją duomenų bazę.

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

Skriptas pirmiausia paprašo įvesti dabartinį **root slaptažodį**. Jei [MariaDB](https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/idiekite-mariadb-i-ubuntu-2004/) diegiate [Ubuntu 20.04](https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/idiekite-mariadb-i-ubuntu-2004/) pirmą kartą, tiesiog paspauskite Enter ir įveskite naują slaptažodį.

### 3 žingsnis: Konfigūruokite Galera Cluster MariaDB mazgus

Kiekviename mazge sukurkite `cnf` failą kataloge `/etc/mysql/conf.d`, kad apibrėžtumėte Galera specifinius nustatymus.

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

Šis failas yra bendrieji duomenų bazės nustatymai, pvz., dvejopo protokolo formatas ir **numatytasis saugojimo variklis**. Jame taip pat yra Galera klasterio konfigūracijos, įskaitant klasterio pavadinimą ir klasterio adresą.

Įterpkite šias eilutes pirmam mazgui:

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

- **Bendrieji duomenų bazės nustatymai**: Tai apima tokius nustatymus kaip `binlog_format=ROW`, skirtą dvejopojo žurnalo formatui, ir `default-storage-engine=innodb`, skirtą numatytam saugojimo varikliui.
- **Galera teikėjo konfigūracija**: nustatymai, tokie kaip `wsrep_on=ON`, naudojami Galera replikacijai įjungti, o `wsrep_provider=/usr/lib/galera/libgalera_smm.so` – Galera bibliotekos keliui nurodyti.
- **Galera klasterio konfigūracija**: Tai apima klasterio pavadinimą (`wsrep_cluster_name`) ir klasterio adresą (`wsrep_cluster_address`), kuriame yra klasterio mazgų IP adresai arba hostų pavadinimai.
- **Galera sinchronizavimo konfigūracija**: konfigūruoja būsenos momentinės kopijos perdavimo (SST) metodą, pvz., `wsrep_sst_method=rsync`.
- **Galera mazgo konfigūracija**: apibrėžia dabartinio mazgo IP adresą arba kompiuterio vardą (`wsrep_node_address`) ir mazgo pavadinimą (`wsrep_node_name`).

Išsaugoję failą, sukurkite antrąjį mazgą:

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

Dabar tęskite su paskutiniu mazgu:

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

### 4 žingsnis: pakeiskite serverių ugniasienę

Kadangi mazgai tarpusavyje bendrauja per tam tikrus prievadus, turite pakoreguoti **užkardos nustatymus**.

Atidarykite šiuos ugniesienės **prievadus**:

- **3306 uostas**: tai yra standartinis MariaDB uostas. Jis naudojamas duomenų bazės ryšiui ir užklausoms.
- **Galera prievadai**: Be standartinio prievado 3306, Galera taip pat naudoja kitus prievadus vidiniam ryšiui tarp mazgų. Standartinis Galera prievadų diapazonas paprastai yra 4567, 4568 ir 4444, skirti būsenos momentinių kopijų perdavimui (SST).

Ubuntu serveryje galite nustatyti ugniasienės parametrus naudodami šią komandą:

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

### 5 žingsnis: Paleiskite Galera Cluster MariaDB

Jei MariaDB paslauga jau veikia, ją reikia sustabdyti:

```shell
sudo systemctl stop mariadb
```

Ši komanda paleidžia **MariaDB serverį** ir inicijuoja naują Galera klasterį pirmajame mazge:

```shell
sudo galera_new_cluster
```

Patikrinkite mazgų skaičių klasteryje:

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

Turėtumėte gauti tokį rezultatą:

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

Pirmasis mazgas buvo sėkmingai paleistas.

Aktyvuokite antrąjį mazgą:

```shell
systemctl start mariadb
```

Patikrinkite, ar padidėjo mazgų skaičius:

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

Konsolėje matome:

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

Dabar pradedame trečiąjį mazgą:

```shell
systemctl start mariadb
```

Patikrinkite, ar mazgas veikia tinkamai:

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

Dabar klasteryje turėtų būti trys mazgai:

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

### 6 žingsnis: išbandykite replikaciją

Įsitikinkite, kad galite nustatyti ryšį su kiekvienu klasterio mazgu. Naudokite **MariaDB klientą**, kad prisijungtumėte kaip root vartotojas arba kitas vartotojas, turintis pakankamas teises.

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

Sukurkite naują bandomąją duomenų bazę viename iš klasterio mazgų:

```sql
CREATE DATABASE test_db;
```

Prisijunkite prie kitų mazgų ir patikrinkite, ar testavimo duomenų bazė yra prieinama:

```sql
SHOW DATABASES;
```

Bandomoji duomenų bazė turėtų pasirodyti duomenų bazių sąraše:

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

Pridėkite naują bandymų lentelę į bandymų duomenų bazę:

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

Įveskite keletą bandomųjų duomenų į bandymų lentelės `name` stulpelį:

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

Patikrinkite kitus mazgus, ar bandomoji lentelė ir įterpti duomenys buvo perkelti:

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

Rezultatas rodo žmonių sąrašą su jų vardais ir ID:

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

Norėdami atnaujinti duomenų įrašą bandymų lentelėje:

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

Pabandykite ištrinti duomenų įrašą:

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

Patikrinkite kitus mazgus, ar atnaujinimai ir ištrinimai buvo replikuoti:

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

Pakeitimai sėkmingai rodomi kiekviename mazge:

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


This is a markdown version of: [https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/mariadb-galera-klasteris-ubuntu-2004-sistemoje/](https://www.ionos.com/lt-lt/digitalguide/priegloba/techniniai-klausimai/mariadb-galera-klasteris-ubuntu-2004-sistemoje/) for AI/LLM consumption.