Nastavení clusteru MariaDB s Galera Cluster zvyšuje spolehlivost a zjednodušuje škálování vaší databáze. V našem tutoriálu vám ukážeme, jak nainstalovat Galera cluster na Ubuntu 20.04.

Požadavky na Galera Cluster MariaDB

Chcete-li nainstalovat cluster MariaDB Galera na Ubuntu 20.04, musíte splnit následující požadavky:

  • Více serverů: K vytvoření clusteru jsou zapotřebí alespoň tři servery nebo virtuální stroje. Všechny servery by měly být ve stejné síti.
  • Práva root: Potřebujete root přístup nebo alespoň administrátorská práva na serverech.

Jak krok za krokem nastavit Galera Cluster MariaDB na Ubuntu 20.04

Cluster MariaDB Galera je praktické databázové řešení, které poskytuje vysokou dostupnost, integritu dat a škálovatelnost pro náročné aplikace. V tomto podrobném průvodci vás provedeme procesem nastavení clusteru MariaDB Galera na Ubuntu 20.04. Než začnete, ujistěte se, že máte k dispozici alespoň tři servery nebo virtuální stroje pro nastavení clusteru.

Krok 1: Aktualizujte balíčky

Nejprve byste měli aktualizovat svůj systém Ubuntu na nejnovější verzi. To je nezbytné, abyste měli k dispozici aktuální balíčky a bezpečnostní aktualizace.

Otevřete terminál a proveďte následující příkaz k aktualizaci zdrojů balíčků:

sudo apt update
shell

Nainstalujte všechny dostupné aktualizace:

sudo apt upgrade -y
shell

Doporučujeme také odstranit zastaralé nebo nepoužívané balíčky, aby se servery vyčistily:

sudo apt autoremove -y
shell

Krok 2: Nainstalujte MariaDB na servery

Nyní nainstalujte MariaDB na všechny vaše servery. Od verze 10.1 jsou balíčky Galera součástí serverů MariaDB.

sudo apt install mariadb-server
shell

Po instalaci můžete spustit službu MariaDB:

sudo systemctl start mariadb
shell

Pomocí následujícího příkazu nastavte automatickou aktivaci MariaDB při každém restartu systému:

sudo systemctl enable mariadb
shell

Zkontrolujte, zda běží MariaDB:

sudo systemctl status mariadb
shell

Měli byste také provést základní nastavení zabezpečení a nakonfigurovat databázi. Chcete-li to provést, spusťte průvodce nastavením:

sudo mysql_secure_installation
shell

Průvodce vás provede jednotlivými kroky, jako je nastavení hesla root, odstranění anonymních uživatelů nebo odstranění testovací databáze.

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

Skript nejprve požádá o aktuální heslo root. Pokud instalujete MariaDB na Ubuntu 20.04 poprvé, stačí stisknout klávesu Enter a zadat nové heslo.

Krok 3: Konfigurace uzlů Galera Cluster MariaDB

Vytvořte soubor cnf v adresáři /etc/mysql/conf.d na každém uzlu, abyste definovali nastavení specifická pro Galeru.

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

Tento soubor obsahuje obecná nastavení databáze, jako je formát binárního protokolu a výchozí úložný engine. Obsahuje také konfigurace pro cluster Galera, včetně názvu clusteru a adresy clusteru.

Vložte následující řádky pro první uzel:

[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
  • Obecná nastavení databáze: Patří sem nastavení jako binlog_format=ROW pro formát binárních protokolů a default-storage-engine=innodb pro výchozí úložný engine.
  • Konfigurace poskytovatele Galera: Nastavení jako wsrep_on=ON se používá k povolení replikace Galera a wsrep_provider=/usr/lib/galera/libgalera_smm.so k určení cesty k knihovně Galera.
  • Konfigurace clusteru Galera: Zahrnuje název clusteru (wsrep_cluster_name) a adresu clusteru (wsrep_cluster_address), která obsahuje IP adresy nebo názvy hostitelů uzlů v clusteru.
  • Konfigurace synchronizace Galera: Konfiguruje metodu pro přenos stavového snímku (SST), např. wsrep_sst_method=rsync.
  • Konfigurace uzlu Galera: Definuje IP adresu nebo název hostitele aktuálního uzlu (wsrep_node_address) a název uzlu (wsrep_node_name).

Po uložení souboru vytvořte soubor pro druhý uzel:

[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

Nyní pokračujte s posledním uzlem:

[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

Krok 4: Změňte nastavení brány firewall na serverech

Jelikož uzly mezi sebou komunikují prostřednictvím specifických portů, je nutné upravit nastavení brány firewall.

Otevřete následující porty ve vaší bráně firewall:

  • Port 3306: Jedná se o standardní port pro MariaDB. Používá se pro komunikaci s databází a požadavky.
  • Porty Galera: Kromě standardního portu 3306 používá Galera také další porty pro interní komunikaci mezi uzly. Standardní rozsah portů Galera je obvykle 4567, 4568 a 4444 pro State Snapshot Transfer (SST).

Nastavení brány firewall na serveru Ubuntu můžete definovat pomocí následujícího příkazu:

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

Krok 5: Spusťte Galera Cluster MariaDB

Zastavte službu MariaDB, pokud již běží:

sudo systemctl stop mariadb
shell

Tento příkaz spustí server MariaDB a inicializuje nový cluster Galera na prvním uzlu:

sudo galera_new_cluster
shell

Zkontrolujte počet uzlů v clusteru:

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

Měli byste získat následující výstup:

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

První uzel byl úspěšně spuštěn.

Aktivujte druhý uzel:

systemctl start mariadb
shell

Zkontrolujte, zda se počet uzlů zvýšil:

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

V konzoli vidíme:

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

Nyní spustíme třetí uzel:

systemctl start mariadb
shell

Zkontrolujte, zda uzel funguje správně:

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

V clusteru by nyní měly být tři uzly:

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

Krok 6: Otestujte replikaci

Ujistěte se, že můžete navázat spojení se všemi uzly v clusteru. Pomocí klienta MariaDB se přihlaste jako uživatel root nebo jako jiný uživatel s dostatečnými oprávněními.

mysql -u root -p
shell

Vytvořte novou testovací databázi na jednom z uzlů v clusteru:

CREATE DATABASE test_db;
sql

Přihlaste se k ostatním uzlům a zkontrolujte, zda je testovací databáze dostupná:

SHOW DATABASES;
sql

Testovací databáze by se měla objevit v seznamu databází:

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

Přidejte novou testovací tabulku do testovací databáze:

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

Zadejte některé testovací údaje do sloupce name testovací tabulky:

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

Zkontrolujte ostatní uzly, zda byla přenesena testovací tabulka a vložené údaje:

USE test_db;
SELECT * FROM test_table;
sql

Výstup nám ukazuje seznam osob s jejich jmény a identifikačními čísly:

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

Aktualizace datového záznamu v testovací tabulce:

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

Zkuste smazat datový záznam:

DELETE FROM test_table WHERE name = 'Bob';
sql

Zkontrolujte ostatní uzly, zda byly aktualizace a odstranění replikovány:

SELECT * FROM test_table;
sql

Změny se úspěšně projeví na všech uzlech:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Přejít do hlavního menu