# Πώς να ρυθμίσετε ένα σύμπλεγμα MariaDB Galera στο Ubuntu 20.04

Η εγκατάσταση ενός **cluster MariaDB με Galera Cluster** βελτιώνει την αξιοπιστία και απλοποιεί την κλιμάκωση της βάσης δεδομένων σας. Στο σεμινάριό μας, θα σας δείξουμε πώς να εγκαταστήσετε ένα cluster Galera στο Ubuntu 20.04.

## Οι απαιτήσεις για ένα Galera Cluster MariaDB

Για να εγκαταστήσετε ένα σύμπλεγμα MariaDB Galera στο **Ubuntu 20.04**, πρέπει να πληροίτε τις ακόλουθες προϋποθέσεις:

- **Πολλαπλοί διακομιστές**: Απαιτούνται τουλάχιστον τρεις διακομιστές ή εικονικές μηχανές για τη δημιουργία ενός συμπλέγματος. Όλοι οι διακομιστές πρέπει να βρίσκονται στο ίδιο δίκτυο.
- **Δικαιώματα root**: Χρειάζεστε πρόσβαση root ή τουλάχιστον δικαιώματα διαχειριστή στους διακομιστές.

## Πώς να ρυθμίσετε το Galera Cluster MariaDB στο Ubuntu 20.04 βήμα προς βήμα

Ένα σύμπλεγμα MariaDB Galera είναι μια πρακτική **λύση βάσης δεδομένων** που παρέχει υψηλή διαθεσιμότητα, ακεραιότητα δεδομένων και επεκτασιμότητα για απαιτητικές εφαρμογές. Σε αυτόν τον αναλυτικό οδηγό, θα σας καθοδηγήσουμε στη διαδικασία ρύθμισης ενός συμπλέγματος MariaDB Galera στο Ubuntu 20.04. Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε τουλάχιστον τρεις διακομιστές ή εικονικές μηχανές για τη ρύθμιση του συμπλέγματος.

### Βήμα 1: Ενημέρωση πακέτων

Πρώτα πρέπει να ενημερώσετε το σύστημα Ubuntu σας στην πιο πρόσφατη έκδοση. Αυτό είναι απαραίτητο για να έχετε **ενημερωμένα πακέτα και ενημερώσεις ασφαλείας**.

Ανοίξτε ένα τερματικό και εκτελέστε την ακόλουθη εντολή για να ενημερώσετε τις πηγές πακέτων:

```shell
sudo apt update
```

Εγκαταστήστε όλες τις διαθέσιμες ενημερώσεις:

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

Συνιστούμε επίσης να αφαιρέσετε **παλιά ή αχρησιμοποίητα πακέτα** για να καθαρίσετε τους διακομιστές:

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

### Βήμα 2: Εγκαταστήστε το MariaDB στους διακομιστές

Τώρα, εγκαταστήστε το MariaDB σε όλους τους διακομιστές σας. Από **την έκδοση 10.1** και μετά, τα πακέτα Galera περιλαμβάνονται στους διακομιστές MariaDB.

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

Μετά την εγκατάσταση, μπορείτε να ξεκινήσετε την υπηρεσία MariaDB:

```shell
sudo systemctl start mariadb
```

Χρησιμοποιήστε την ακόλουθη εντολή για να ρυθμίσετε το MariaDB ώστε να ενεργοποιείται αυτόματα κάθε φορά που γίνεται επανεκκίνηση του συστήματος:

```shell
sudo systemctl enable mariadb
```

Ελέγξτε αν το MariaDB λειτουργεί:

```shell
sudo systemctl status mariadb
```

Θα πρέπει επίσης να κάνετε μερικές βασικές ρυθμίσεις ασφαλείας και να διαμορφώσετε τη βάση δεδομένων. Για να το κάνετε αυτό, ξεκινήστε τον **οδηγό εγκατάστασης**:

```shell
sudo mysql_secure_installation
```

Ο οδηγός σας καθοδηγεί στα βήματα, όπως η ρύθμιση ενός κωδικού πρόσβασης root, η κατάργηση ανώνυμων χρηστών ή η κατάργηση της δοκιμαστικής βάσης δεδομένων.

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

Το σενάριο ζητά πρώτα τον τρέχοντα **κωδικό πρόσβασης root**. Εάν εγκαθιστάτε [το MariaDB στο Ubuntu 20.04](https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/egkatastasi-mariadb-sto-ubuntu-2004/) για πρώτη φορά, απλά πατήστε Enter και στη συνέχεια εισαγάγετε έναν νέο κωδικό πρόσβασης.

### Βήμα 3: Διαμόρφωση των κόμβων Galera Cluster MariaDB

Δημιουργήστε ένα αρχείο `cnf` στον κατάλογο `/etc/mysql/conf.d` σε κάθε κόμβο για να ορίσετε τις ρυθμίσεις που αφορούν το Galera.

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

Αυτό το αρχείο περιέχει γενικές ρυθμίσεις της βάσης δεδομένων, όπως η μορφή του δυαδικού πρωτοκόλλου και ο **προεπιλεγμένος μηχανισμός αποθήκευσης**. Περιέχει επίσης ρυθμίσεις για το σύμπλεγμα Galera, συμπεριλαμβανομένου του ονόματος και της διεύθυνσης του συμπλέγματος.

Εισάγετε τις ακόλουθες γραμμές για τον πρώτο κόμβο:

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

- **Γενικές ρυθμίσεις βάσης δεδομένων**: Περιλαμβάνει ρυθμίσεις όπως `binlog_format=ROW` για τη μορφή των δυαδικών αρχείων καταγραφής και `default-storage-engine=innodb` για τον προεπιλεγμένο μηχανισμό αποθήκευσης.
- **Διαμόρφωση παροχέα Galera**: Ρυθμίσεις όπως `wsrep_on=ON` χρησιμοποιούνται για την ενεργοποίηση της αναπαραγωγής Galera και `wsrep_provider=/usr/lib/galera/libgalera_smm.so` για τον καθορισμό της διαδρομής προς τη βιβλιοθήκη Galera.
- **Διαμόρφωση συμπλέγματος Galera**: Περιλαμβάνει το όνομα του συμπλέγματος (`wsrep_cluster_name`) και τη διεύθυνση του συμπλέγματος (`wsrep_cluster_address`), η οποία περιέχει τις διευθύνσεις IP ή τα ονόματα κεντρικών υπολογιστών των κόμβων στο σύμπλεγμα.
- **Διαμόρφωση συγχρονισμού Galera**: Διαμορφώνει τη μέθοδο για τη μεταφορά στιγμιότυπου κατάστασης (SST), π.χ. `wsrep_sst_method=rsync`.
- **Διαμόρφωση κόμβου Galera**: Ορίζει τη διεύθυνση IP ή το όνομα κεντρικού υπολογιστή του τρέχοντος κόμβου (`wsrep_node_address`) και το όνομα του κόμβου (`wsrep_node_name`).

Αφού αποθηκεύσετε το αρχείο, δημιουργήστε ένα για τον δεύτερο κόμβο:

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

Τώρα συνεχίστε με τον τελευταίο κόμβο:

```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: Αλλάξτε το τείχος προστασίας στους διακομιστές

Καθώς οι κόμβοι επικοινωνούν μεταξύ τους μέσω συγκεκριμένων θυρών, πρέπει να προσαρμόσετε τις **ρυθμίσεις του τείχους προστασίας**.

Ανοίξτε τις ακόλουθες **θύρες** στο τείχος προστασίας σας:

- **Θύρα 3306**: Αυτή είναι η τυπική θύρα για το MariaDB. Χρησιμοποιείται για την επικοινωνία και τα αιτήματα της βάσης δεδομένων.
- **Θύρες Galera**: Εκτός από την τυπική θύρα 3306, η Galera χρησιμοποιεί και άλλες θύρες για την εσωτερική επικοινωνία μεταξύ των κόμβων. Το τυπικό εύρος για τις θύρες Galera είναι συνήθως 4567, 4568 και 4444 για τη μεταφορά στιγμιότυπου κατάστασης (SST).

Μπορείτε να ορίσετε τις ρυθμίσεις του τείχους προστασίας στον διακομιστή Ubuntu με την ακόλουθη εντολή:

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

### Βήμα 5: Εκκίνηση του Galera Cluster MariaDB

Διακόψτε την υπηρεσία MariaDB εάν ήδη εκτελείται:

```shell
sudo systemctl stop mariadb
```

Αυτή η εντολή εκκινεί τον **διακομιστή MariaDB** και αρχικοποιεί ένα νέο σύμπλεγμα Galera στον πρώτο κόμβο:

```shell
sudo galera_new_cluster
```

Ελέγξτε τον αριθμό των κόμβων στο σύμπλεγμα:

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

Θα πρέπει να λάβετε την ακόλουθη έξοδο:

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

Ο πρώτος κόμβος ξεκίνησε με επιτυχία.

Ενεργοποιήστε τον δεύτερο κόμβο:

```shell
systemctl start mariadb
```

Ελέγξτε αν ο αριθμός των κόμβων έχει αυξηθεί:

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

Στην κονσόλα βλέπουμε:

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

Τώρα ξεκινάμε τον τρίτο κόμβο:

```shell
systemctl start mariadb
```

Ελέγξτε αν ο κόμβος λειτουργεί σωστά:

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

Τώρα θα πρέπει να υπάρχουν τρεις κόμβοι στο σύμπλεγμα:

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

### Βήμα 6: Δοκιμάστε την αναπαραγωγή

Βεβαιωθείτε ότι μπορείτε να δημιουργήσετε σύνδεση με κάθε κόμβο του συμπλέγματος. Χρησιμοποιήστε τον **πελάτη MariaDB** για να συνδεθείτε ως χρήστης root ή ως άλλος χρήστης με επαρκή δικαιώματα.

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

Δημιουργήστε μια νέα δοκιμαστική βάση δεδομένων σε έναν από τους κόμβους του συμπλέγματος:

```sql
CREATE DATABASE test_db;
```

Συνδεθείτε στους άλλους κόμβους και ελέγξτε αν η δοκιμαστική βάση δεδομένων είναι διαθέσιμη:

```sql
SHOW DATABASES;
```

Η βάση δεδομένων δοκιμής θα πρέπει να εμφανίζεται στη λίστα των βάσεων δεδομένων:

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

Προσθέστε έναν νέο πίνακα δοκιμών στη βάση δεδομένων δοκιμών:

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

Εισάγετε κάποια δοκιμαστικά δεδομένα στη στήλη `name` του πίνακα δοκιμών:

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

Ελέγξτε τους άλλους κόμβους για να δείτε αν ο πίνακας δοκιμής και τα εισαχθέντα δεδομένα έχουν μεταφερθεί:

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

Η έξοδος μας δείχνει τη λίστα των ατόμων με τα ονόματά τους και τα αναγνωριστικά τους:

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

Για να ενημερώσετε μια εγγραφή δεδομένων στον πίνακα δοκιμών:

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

Δοκιμάστε να διαγράψετε μια εγγραφή δεδομένων:

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

Ελέγξτε τους άλλους κόμβους για να δείτε αν οι ενημερώσεις και οι διαγραφές έχουν αναπαραχθεί:

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

Οι αλλαγές εμφανίζονται με επιτυχία σε κάθε κόμβο:

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


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/symplegma-mariadb-galera-se-ubuntu-2004/](https://www.ionos.com/el-gr/digitalguide/filoxenia/technika-themata/symplegma-mariadb-galera-se-ubuntu-2004/) for AI/LLM consumption.