Opsætning af en MariaDB-klynge med Galera Cluster forbedrer på­li­de­lig­he­den og forenkler ska­le­rin­gen af din database. I vores vej­led­ning viser vi dig, hvordan du in­stal­le­rer en Galera-klynge på Ubuntu 20.04.

Kravene til en Galera Cluster MariaDB

For at in­stal­le­re en MariaDB Galera-klynge på Ubuntu 20.04 skal du opfylde følgende krav:

  • Flere servere: Der kræves mindst tre servere eller virtuelle maskiner for at oprette en klynge. Alle servere skal være på samme netværk.
  • Root-ret­tig­he­der: Du skal have root-adgang eller mindst ad­mi­ni­stra­tor­ret­tig­he­der på serverne.

Sådan kon­fi­gu­re­res Galera Cluster MariaDB på Ubuntu 20.04 trin for trin

En MariaDB Galera-klynge er en praktisk da­ta­ba­se­løs­ning, der giver høj til­gæn­ge­lig­hed, da­ta­in­te­gri­tet og ska­ler­bar­hed til krævende ap­pli­ka­tio­ner. I denne trinvise vej­led­ning vil vi guide dig gennem processen med at opsætte en MariaDB Galera-klynge på Ubuntu 20.04. Før du begynder, skal du sikre dig, at du har mindst tre servere eller virtuelle maskiner til rådighed til at opsætte klyngen.

Trin 1: Opdater pakker

Du bør først opdatere dit Ubuntu-system til den nyeste version. Dette er vigtigt, så du har de nyeste pakker og sik­ker­heds­op­da­te­rin­ger.

Åbn en terminal og udfør følgende kommando for at opdatere pak­kekil­der­ne:

sudo apt update
shell

Installer alle til­gæn­ge­li­ge op­da­te­rin­ger:

sudo apt upgrade -y
shell

Vi anbefaler også at fjerne forældede eller ubrugte pakker for at rydde op på serverne:

sudo apt autoremove -y
shell

Trin 2: Installer MariaDB på serverne

Installer nu MariaDB på alle dine servere. Fra version 10.1 og frem er Galera-pakkerne samlet med MariaDB-servere.

sudo apt install mariadb-server
shell

Efter in­stal­la­tio­nen kan du starte MariaDB-tjenesten:

sudo systemctl start mariadb
shell

Brug følgende kommando til at indstille MariaDB til at blive aktiveret au­to­ma­tisk hver gang systemet gen­star­tes:

sudo systemctl enable mariadb
shell

Kon­trol­ler, om MariaDB kører:

sudo systemctl status mariadb
shell

Du bør også foretage nogle grund­læg­gen­de sik­ker­heds­indstil­lin­ger og kon­fi­gu­re­re databasen. For at gøre dette skal du starte in­stal­la­tions­gu­i­den:

sudo mysql_secure_installation
shell

Guiden leder dig gennem trinene, såsom at indstille en root-ad­gangs­ko­de, fjerne anonyme brugere eller fjerne test­da­ta­ba­sen.

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
shell

Scriptet beder først om det aktuelle root-ad­gangs­ko­de. Hvis du in­stal­le­rer MariaDB på Ubuntu 20.04 for første gang, skal du blot trykke på Enter og derefter indtaste en ny ad­gangs­ko­de.

Trin 3: Kon­fi­gu­rer Galera Cluster MariaDB-noder

Opret en cnf i bi­bli­o­te­ket /etc/mysql/conf.d på hver node for at definere de Galera-spe­ci­fik­ke indstil­lin­ger.

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

Denne fil in­de­hol­der generelle da­ta­ba­se­indstil­lin­ger, såsom det binære pro­tokol­for­mat og stan­dard­lag­rings­mo­to­ren. Den in­de­hol­der også kon­fi­gu­ra­tio­ner for Galera-klyngen, herunder klyngens navn og adresse.

Indsæt følgende linjer for den første node:

[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"
shell
  • Generelle da­ta­ba­se­indstil­lin­ger: Dette omfatter indstil­lin­ger som binlog_format=ROW for formatet af de binære logfiler og default-storage-engine=innodb for stan­dard­lag­rings­mo­to­ren.
  • Galera-ud­by­der­kon­fi­gu­ra­tion: Indstil­lin­ger som wsrep_on=ON bruges til at aktivere Galera-repli­ke­ring, og wsrep_provider=/usr/lib/galera/libgalera_smm.so bruges til at angive stien til Galera-bi­bli­o­te­ket.
  • Galera-klyn­ge­kon­fi­gu­ra­tion: Dette omfatter klyn­ge­nav­net (wsrep_cluster_name) og klyn­ge­adres­sen (wsrep_cluster_address), som in­de­hol­der IP-adres­ser­ne eller vært­s­nav­ne­ne på noderne i klyngen.
  • Galera-syn­kro­ni­se­rings­kon­fi­gu­ra­tion: Kon­fi­gu­re­rer metoden til State Snapshot Transfer (SST), f.eks. wsrep_sst_method=rsync.
  • Galera-node-kon­fi­gu­ra­tion: Definerer IP-adressen eller vært­s­nav­net for den aktuelle node (wsrep_node_address) og navnet på noden (wsrep_node_name).

Når du har gemt filen, skal du oprette en til den anden node:

[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

Fortsæt nu med den sidste node:

[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"
shell

Trin 4: Ændr firewall på servere

Da noderne kom­mu­ni­ke­rer med hinanden via spe­ci­fik­ke porte, skal du justere fi­rewal­lindstil­lin­ger­ne.

Åbn følgende porte i din firewall:

  • Port 3306: Dette er stan­dard­por­ten for MariaDB. Den bruges til da­ta­ba­se­kom­mu­ni­ka­tion og -an­mod­nin­ger.
  • Galera-porte: Ud over stan­dard­por­ten 3306 bruger Galera også andre porte til intern kom­mu­ni­ka­tion mellem noderne. Stan­dar­d­om­rå­det for Galera-porte er normalt 4567, 4568 og 4444 for State Snapshot Transfer (SST).

Du kan definere fi­rewal­lindstil­lin­ger­ne på din Ubuntu-server med følgende kommando:

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

Trin 5: Start Galera Cluster MariaDB

Stop MariaDB-tjenesten, hvis den allerede kører:

sudo systemctl stop mariadb
shell

Denne kommando starter MariaDB-serveren og ini­ti­a­li­se­rer en ny Galera-klynge på den første node:

sudo galera_new_cluster
shell

Kon­trol­ler antallet af noder i klyngen:

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

Du bør modtage følgende output:

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

Den første node blev startet med succes.

Aktivér den anden node:

systemctl start mariadb
shell

Kon­trol­ler, om antallet af noder er steget:

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

I konsollen ser vi:

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

Nu starter vi den tredje node:

systemctl start mariadb
shell

Kon­trol­ler, om noden fungerer korrekt:

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

Der bør nu være tre noder i klyngen:

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

Trin 6: Test repli­ke­rin­gen

Sørg for, at du kan oprette for­bin­del­se til alle noder i klyngen. Brug MariaDB-klienten til at logge ind som root-bruger eller som en anden bruger med til­stræk­ke­li­ge ret­tig­he­der.

mysql -u root -p
shell

Opret en ny test­da­ta­ba­se på en af noderne i klyngen:

CREATE DATABASE test_db;
sql

Log ind på de andre noder og kon­trol­ler, om test­da­ta­ba­sen er til­gæn­ge­lig:

SHOW DATABASES;
sql

Test­da­ta­ba­sen skal vises på listen over databaser:

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

Tilføj en ny testtabel til test­da­ta­ba­sen:

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

Indtast nogle testdata i kolonne name i test­ta­bel­len:

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

Kon­trol­ler de andre noder for at se, om test­ta­bel­len og de indsatte data er blevet overført:

USE test_db;
SELECT * FROM test_table;
sql

Outputtet viser os listen over personer med deres navne og ID:

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

Sådan opdateres en datapost i test­ta­bel­len:

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

Prøv at slette en datapost:

DELETE FROM test_table WHERE name = 'Bob';
sql

Kon­trol­ler de andre noder for at se, om op­da­te­rin­ger­ne og slet­nin­ger­ne er blevet repli­ke­ret:

SELECT * FROM test_table;
sql

Æn­drin­ger­ne vises korrekt på alle noder:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Gå til ho­ved­me­nu­en