GNU/Linux >> Znalost Linux >  >> Debian

Jak nastavit synchronní replikaci MariaDB Galera Multi-Master pomocí Debianu 10

MariaDB nabízí dvě různá řešení pro vysokou dostupnost (HA) a clustering. První je standardní replikace MariaDB master/slave, kterou lze konfigurovat v různých topologiích hlavně pro účely vyrovnávání zátěže, HA a zálohování. Druhým je MariaDB Galera, multi-master synchronní clustering řešení. Jeho hlavní rysy jsou následující:

  • Multi-master:Všechny uzly v clusteru Galera mohou provádět operace čtení i zápisu, což nabízí lepší škálovatelnost.
  • Uzly se mohou automaticky připojit ke clusteru a při selhání jsou vyřazeny.
  • Replikace Galery je synchronní, což znamená, že změny na jednom uzlu budou zaručeně aplikovány na ostatní uzly. Teoreticky to zajišťuje, že při selhání uzlu nedojde ke ztrátě dat.

Tato příručka vás provede instalací MariaDB a její konfigurací v clusteru Galera. Pro demonstraci použijeme tři uzly Debianu 10, ačkoli lze použít libovolný počet (≥3) uzlů. Nastavení dvou uzlů v clusteru Galera je technicky možné, ale neposkytuje odolnost proti chybám, protože selhání uzlu způsobí zastavení druhého uzlu.

Požadavky

  • Tři nebo více instancí Debianu 10.
  • Přístup k uživateli root nebo libovolnému uživateli s právy sudo.
  • $EDITOR měla by být nastavena proměnná prostředí.

POZNÁMKA: Klastry Galera mohou pracovat přes WAN nebo LAN. Pokud vaše uzly sdílejí privátní síť, použijte tam, kde je to možné, privátní IP adresy. V opačném případě by měly být použity adresy WAN.

Pokud používáte uživatele sudo, otevřete a použijte kořenový shell pro délku tohoto nastavení pomocí:

sudo -s

Krok 1:Instalace MariaDB

Tento krok by měl být proveden na všech uzlech.

Pomocí následujících příkazů nainstalujte MariaDB, knihovnu Galera a Rsync. Poslední jmenovaný používá Galera.

apt updateapt install -y mariadb-server mariadb-client galera-3 rsync

Ujistěte se, že je povolena služba MariaDB:

systemctl povolit mariadb.service

Zabezpečte své instance MariaDB pomocí skriptu mysql_secure_installation:

mysql_secure_installation

Odpovězte na otázky, jak je uvedeno níže, a ujistěte se, že jste zvolili silné heslo pro uživatele root MySQL.

Zadejte aktuální heslo pro uživatele root (zadejte pro žádné):Stiskněte Nastavit heslo uživatele root? [A/N] yNové heslo:your_passwordZnovu zadejte nové heslo:your_passwordOdebrat anonymní uživatele? [A/n] yZakázat vzdálené přihlášení root? [A/N] yOdebrat testovací databázi a získat k ní přístup? [A/n] yNačíst nyní tabulky oprávnění? [A/n] yVše hotovo! Pokud jste provedli všechny výše uvedené kroky, vaše instalace MariaDB by nyní měla být zabezpečená.

Krok 2:Konfigurace MariaDB

Tento krok by měl být proveden na všech uzlech.

Zastavte službu MariaDB na všech uzlech:

systemctl stop mariadb.service

Ve výchozím nastavení démon MariaDB naslouchá připojení pouze na localhost. Aby cluster fungoval, měla by být změněna na externě dostupnou adresu. Chcete-li tak učinit, upravte soubor voleb /etc/mysql/mariadb.conf.d/50-server.cnf:

$EDITOR /etc/mysql/mariadb.conf.d/50-server.cnf

Najděte následující řádek:

bind-address =127.0.0.1

Pokud pro cluster používáte privátní síť a nechcete MariaDB vystavovat jiným sítím (tj. WAN), zadejte místní adresu IPv4 pro každý uzel. V opačném případě použijte 0.0.0.0, která MariaDB nařídí, aby naslouchala na všech rozhraních. Například:

bind-address =0.0.0.0

Uložte změny a ukončete textový editor.

Nyní nakonfigurujeme možnosti související s clusterem. Vytvořte nový soubor možností:

$EDITOR /etc/mysql/mariadb.conf.d/99-cluster.cnf

Zadejte do souboru následující rozumnou konfiguraci a nahraďte IP adresy. Mělo by být totožné na všech uzlech.

[galera]
wsrep_on =on wsrep_provider =/lib/galera/libgalera_smm.so wsrep_cluster_address =gcomm://192.0.2.1,192.0.2.2,192.0.2.3 wsrep_cluster_cluster indbage_name =auto_blengera indbage_name_0 =1 binlog_format =ŘÁDEK
  • wsrep_on =on umožňuje replikaci sady zápisu, základní funkci, kterou Galera používá.
  • wsrep_provider určuje cestu ke knihovně galera. Poskytuje jej balíček galera-3 na adrese /lib/galera/libgalera_smm.so na Debianu 10.
  • wsrep_cluster_address by měl obsahovat alespoň jednu adresu jiného člena klastru. Doporučuje se uvést všechny členy klastru. Není nutné žádné zvláštní pořadí.
  • wsrep_cluster_name by měl být jedinečný pro cluster a měl by být identický ve všech uzlech stejného clusteru galera.
  • Zbývající možnosti jsou nutné, aby Galera fungovala správně a neměly by být měněny.

Krok 3:Zavedení clusteru

Než budete pokračovat, ujistěte se, že MariaDB je zastavena/neaktivní na všech uzlech:

stav systemctl mariadb.service

Chcete-li spustit cluster, musí jej nejprve vytvořit uzel. Na Debianu 10 to lze provést pomocí skriptu galera_new_cluster. Skript by měl být spuštěn pouze na jednom uzlu a pouze jednou pro inicializaci clusteru.

galera_new_cluster

Tím se spustí MariaDB na aktuálním uzlu. Ujistěte se, že běží s:

stav systemctl mariadb.service

Poté spusťte MariaDB na ostatních uzlech pomocí:

systemctl start mariadb.service

Nyní by měl být cluster funkční.

Krok 4:Testování

Abyste se ujistili, že cluster funguje podle očekávání, vyberte libovolný uzel a přihlaste se do MariaDB:

mysql -u root -p

Chcete-li vytvořit databázi, zadejte následující příkaz:

> CREATE DATABASE test0;> \q

Poté zkontrolujte tuto novou databázi na všech ostatních uzlech:

mysql -u root -p -e "ZOBRAZIT DATABÁZE;"

Výše uvedený příkaz by měl vrátit seznam obsahující test0:

+---------------------+| Databáze |+---------------------+| informační_schéma || mysql || výkonnostní_schéma || test0 |+--------------------+

Možná budete chtít testovat důkladněji zápisem do clusteru z každého uzlu. Jakmile budete s testováním spokojeni, vyčistěte z clusteru všechny nepotřebné databáze. Lze použít jakýkoli uzel.

mysql -u root -p -e "DROP DATABASE test0;"

Krok 5:Tipy pro odstraňování problémů

Chcete-li zobrazit informace o aktuálním stavu uzlu/klastru, použijte následující dotaz:

mysql -u root -p -e "SELECT * FROM information_schema.global_status WHERE název_proměnné IN ('WSREP_CLUSTER_STATUS','WSREP_LOCAL_STATE_COMMENT','WSREP_CLUSTER_SIZE','WSREP_EVS_REPL_LATENCY"'_READY'); před> 

Zdravý 3-uzlový cluster by měl vrátit následující:

+---------------------------+----------------+| NÁZEV PROMĚNNÉ | VARIABLE_VALUE |+---------------------------+----------------+| WSREP_CLUSTER_SIZE | 3 || WSREP_CLUSTER_STATUS | Primární || WSREP_EVS_DELAYED | || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Synchronizováno || WSREP_READY | ON |+---------------------------+----------------+ 
  • WSREP_CLUSTER_SIZE představuje aktuální počet uzlů v komponentě clusteru.
  • WSREP_CLUSTER_STATUS představuje stav komponenty clusteru, nikoli cluster jako celek.
  • WSREP_EVS_DELAYED zobrazuje seznam uzlů, které jsou zpožděny. Od zdravých shluků se očekává prázdná hodnota.
  • WSREP_EVS_REPL_LATENCY zobrazuje latenci replikace ve formátu min/avg/max/stddev/samplesize. Hodnoty se zobrazují v sekundách. Velmi vysoké latence mohou vést ke snížení výkonu.
  • WSREP_LOCAL_STATE_COMMENT zobrazuje aktuální stav uzlu.
  • WSREP_READY označuje, zda uzel může přijímat dotazy.

Když uzel v klastru se 3 uzly ztratí připojení, klastr se rozdělí na primární komponentu sestávající ze 2 uzlů a neprimární komponenty. Primární komponenta není výpadkem ovlivněna a pokračuje v běžném provozu. Z pohledu neprimární komponenty by dotaz zobrazený výše vrátil následující:

+---------------------------+------------------ -------------------------------------------------- -------------------------------------------------- ----------+| NÁZEV PROMĚNNÉ | VARIABLE_VALUE |+---------------------------+-------------------- -------------------------------------------------- -------------------------------------------------- ---------+| WSREP_CLUSTER_SIZE | 1 || WSREP_CLUSTER_STATUS | neprimární || WSREP_EVS_DELAYED | 6b7864f2-fe7d-11e9-84ab-93e58c0d2907:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.2.1:4567:3,a421be89-fe7d-11e9-a91e-7e62f7562e58:tcp://192.0.25.1:WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Inicializováno || WSREP_READY | VYPNUTO |+---------------------------+------------------- -------------------------------------------------- -------------------------------------------------- ---------+

Všimněte si hodnoty WSREP_EVS_DELAYED, která označuje problémy s připojením k ostatním uzlům.

Na uzlech primární komponenty stejný dotaz vrátí:

+---------------------------+------------------ ----------------------------------------------+| NÁZEV PROMĚNNÉ | VARIABLE_VALUE |+---------------------------+-------------------- ---------------------------------------------+| WSREP_CLUSTER_SIZE | 2 || WSREP_CLUSTER_STATUS | Primární || WSREP_EVS_DELAYED | a2217526-fe7d-11e9-8692-1f2f0cdb403d:tcp://192.0.2.2:4567:2 || WSREP_EVS_REPL_LATENCY | 0/0/0/0/0 || WSREP_LOCAL_STATE_COMMENT | Synchronizováno || WSREP_READY | ON |+---------------------------+-------------------- ---------------------------------------------+

Pro zotavení ze selhání jednoho uzlu není nutný žádný ruční zásah. Když se neúspěšný uzel znovu připojí ke clusteru, automaticky se synchronizuje s clusterem.

Další informace

Pokročilé možnosti konfigurace naleznete v Galera Cluster System Variables.


Debian
  1. Jak nastavit PostgreSQL Streaming Replication s replikačními sloty na Debianu 10

  2. Jak nastavit Rsyslog Server na Debianu 11

  3. Jak nastavit Opencart pomocí LAMP (PHP, Apache, Mariadb) na Debianu 11

  1. Jak nastavit vsftpd na Debianu

  2. Jak nastavit MariaDB Galera Cluster na Ubuntu 20.04

  3. Jak nainstalovat MariaDB 10.x na Debian 11

  1. Jak nainstalovat MariaDB na Debian 9

  2. Jak nainstalovat MariaDB na Debian 10

  3. Jak nakonfigurovat replikaci MySQL (MariaDB) Master-Slave na Debianu 10