MariaDB Konfigurace replikace databáze v režimu Master-Master / Slave

Replikace v databázích SQL je proces kopírování dat z jednoho zdroje do druhého (nebo do několika) a naopak. Data z jednoho databázového serveru jsou neustále kopírována na jeden nebo více dalších serverů. Pomocí replikace můžete distribuovat zatížení serveru, zajistit odolnost proti chybám a vysokou dostupnost databází MariaDB. DBMS MariaDB / MySQL umožňuje použití dvou typů replikace databáze: Master-Master a Master-Slave. V tomto článku se podíváme na to, jak nakonfigurovat oba typy replikace MariaDB v CentOS 7. Začněme!

Obsah:

  • Nainstalujte MariaDB.
  • Konfigurace replikace Master-Master v MariaDB
  • Konfigurace replikace Master-Slave v MariaDB

Nainstalujte MariaDB.

Dříve jsme zveřejnili článek popisující proces instalace MariaDB na CentOS 7. Můžete se s ním seznámit na adrese https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Proto se nebudeme zaměřovat na samotnou instalaci MariaDB, ale hned budeme pokračovat v konfiguraci replikace.

Konfigurace replikace Master-Master v MariaDB

V schématu replikace Master-Master lze kterýkoli z databázových serverů MariaDB / MySQL použít jak pro psaní informací, tak pro čtení. Mnoho lidí považuje tento typ replikace za zcela atraktivní. Pokud jeden ze serverů selže, je pravděpodobnější, že dojde ke ztrátě dat na jiných hlavních serverech. Toto schéma se obvykle používá, když všechny servery potřebují poskytnout informace o zápisu i čtení..

Replikace je založena na speciálním souboru binlog, ve kterém hlavní server ukládá všechny databázové operace. Slave server se připojuje k masteru a aplikuje příkazy na své databáze.

1. MariaDB: Nastavení prvního hlavního serveru (Master-1)

Přidat do našeho konfiguračního souboru my.cnf na prvním serveru MariaDB následující řádky:

#replication
server-id = 1
report_host = master
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

restartování služby mariadb

Vytvořte uživatele pro konfiguraci replikace:

mysql
vytvořit uživatele 'test_master' @ '%' identifikovaný 'test_master';
udělit replikačnímu otrokovi *. * 'test_master' @ '%';

Pro přidání Slave potřebujeme data bin_log ze serveru Master1.

MariaDB [(žádný)]> zobrazit hlavní stav;

+--------------------+----------+--------------+------------------+ | Soubor | Pozice | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 řádek v sadě (0,000 s) 

Toto bude náš Master-1.

2. MariaDB: Nastavení druhého hlavního serveru (Master-2)

Připojte se k druhému serveru MariaDB, otevřete konfigurační soubor my.cnf a přidejte informace:

#replication
server-id = 2
report_host = master2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

A také vytvořte uživatele na druhém serveru:

vytvořit uživatele 'test_master2' @ '%' identifikovaného 'test_master2';
udělit replikačnímu otrokovi *. * 'test_master2' @ '%';

Bin_log na Master-2:

MariaDB [(žádný)]> zobrazit hlavní stav;

+--------------------+----------+--------------+------------------+ | Soubor | Pozice | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 řádek v sadě (0,000 s)

Vytvořme spojení mezi servery MariaDB v našem softwarovém clusteru:

Zastavte otroka:

STOP SLAVE;

Přidejte Master-1 na druhý server:

ZMĚŇTE MASTER NA MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;

Zahájíme replikaci:

START SLAVE

Jsme připojeni k Master-1 a provádíme stejný postup, pouze zadáním údajů druhého serveru:

STOP SLAVE;
ZMĚŇTE MASTER NA MASTER_HOST = "183.219.19.36", MASTER_USER = "test_master2", MASTER_PASSWORD = "test_master2", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 667;
START SLAVE

Zkontrolujte stav druhého serveru:

zobrazit stav otroka \ G

Jak je vidět na obrázcích, existují spojení na dvou serverech, žádné chyby nejsou pozorovány.

3. Ověřte replikaci mezi servery MariaDB.

Dále, abychom ověřili, že replikace mezi dvěma servery MariaDB funguje v režimu master + master a že to obecně funguje, vytvoříme novou základnu v Master-1 a vytvoříme v ní tabulku..

MariaDB [(žádný)]> vytvořit databázi master1;

Dotaz je v pořádku, ovlivněn 1 řádek (0,001 s)


MariaDB [(žádný)]> použití master1;

Databáze se změnila

MariaDB [master1]> VYTVOŘIT TABULKU ahoj (

-> AuthorID INT NOT NULL AUTO_INCREMENT,

-> Název autora VARCHAR (100),

-> PRIMARY KEY (AuthorID)

->);

Dotaz je v pořádku, 0 ovlivněných řádků (0,005 s)

Zkontrolujeme, že se databáze automaticky objevila na druhém předloze a naše tabulka je tam také:

MariaDB [(žádný)]> zobrazit databáze;

+--------------------+ | Databáze | + -------------------- + | information_schema | | master1 | | mysql | | performance_schema | + -------------------- + 4 řádky v sadě (0,001 s)

MariaDB [(žádný)]> použití master1;

MariaDB [master1]> zobrazit tabulky;

+-------------------+ | Tables_in_master1 | + ------------------- + | ahoj | + ------------------- + 1 řádek v sadě (0,000 s) 

Základ byl vytvořen na druhém masteru. Pro úplnou kontrolu vytvořte tabulku v databázi master1 z druhého hlavního serveru a zkontrolujte, zda jsou přeneseny v opačném směru.

MariaDB [master1]> CREATE TABLE hello_master1 (

-> AuthorID INT NOT NULL AUTO_INCREMENT,

-> Název autora VARCHAR (100),

-> PRIMARY KEY (AuthorID)

->);

Dotaz je v pořádku, 0 ovlivněných řádků (0,006 s)

Tabulka hello_master1 byla předána prvnímu serveru:

MariaDB [master1]> zobrazit tabulky;

+-------------------+ | Tables_in_master1 | + ------------------- + | ahoj | | hello_master1 | + ------------------- + 2 řádky v sadě (0,000 s) 

Jak vidíte, na Master-1 se objevila nová tabulka. Replikace funguje tak, jak jsme chtěli.

Konfigurace replikace Master-Slave v MariaDB

V této verzi replikace funguje jeden server jako slave server, na který jsou neustále přenášena data z Master. Všechny změny, které budou provedeny na slave serveru, nebudou přeneseny na Master. Toto je více selhání typu replikace databáze. Tato možnost se nejčastěji používá. V této konfiguraci budete mít vždy záložní server s aktuálními daty a pokud selže na slave serverech, informace na hlavním serveru nebudou ztraceny. Můžete také distribuovat zátěž v databázi pro svůj projekt, takže aplikace čtou ze slave serverů a data se zaznamenávají pouze přes hlavní server. Tímto způsobem minimalizujete odezvu databáze.

Při konfiguraci repliky databáze MariaDB jako master + slave je server master (master1) nakonfigurován tak, jak je popsáno výše.

Předáváme podřízený server. Přidejte řádky do my.cnf:

#replication
server-id = 2
report_host = slave2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Restartování mariadb. Na prvním serveru bereme data bin_log.

MariaDB [(žádný)]> zobrazit hlavní stav;

+--------------------+----------+--------------+------------------+ | Soubor | Pozice | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 řádek v sadě (0,000 s)

Na slave serveru v konzole mysql proveďte následující:

MariaDB [(žádný)]> STOP SLAVE;

Dotaz je v pořádku, 0 ovlivněných řádků, 1 varování (0,000 s)

MariaDB [(žádný)]> ZMĚNA MASTER TO MASTER_HOST = "IP_master", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 664;

Dotaz je v pořádku, 0 ovlivněných řádků (0,014 sekundy)

MariaDB [(žádný)]> START SLAVE;

Při nastavování replikace pro existující databázi MariDB je nutné před zahájením replikace uvést databázi do režimu čtení, aby nebyl aktualizován soubor binlog..

SET GLOBAL read_only = ON;

Současně musíte také vytvořit výpis z databáze a použít jej pro počáteční načtení dat do MariaD na slave serveru..

Zkontrolujte stav slave: ZOBRAZIT STAV SLAVE \ G;

Vytvoření databáze na serveru Master:

MariaDB [(žádný)]> vytvořit databázi master_hello;

Dotaz je v pořádku, ovlivněn 1 řádek (0,001 s)

Prověřujeme také, že databáze byla vytvořena také na slave serveru:

MariaDB [(žádný)]> zobrazit databáze;

+--------------------+ | Databáze | + -------------------- + | information_schema | | master_hello | | master_test | | mysql | | performance_schema | | test | + -------------------- + 6 řádků v sadě (0,001 s) 

Vytvořme databázi na Slave a zkontrolujeme, zda byla data přenesena do našeho Master.

Jak vidíte, vytvořili jsme základnu a je na Slave. Zkontrolujte, jestli se objevila na Mistře. Není tam. Replikace z otroka na pána nejde.

To znamená, že replikace MariaDB funguje pouze jedním způsobem. Udělejme další kontrolu odstraněním databáze master_hello ze slave serveru:

A zkontrolujte, zda na hlavním serveru odešla:

Jak vidíme, vše je v pořádku a základna je na svém místě.

P.S. Při nastavování repliky se můžete setkat s některými úskalími, z nichž nejčastější je firewall. Ve výchozím nastavení má Centos 7 nainstalován firewall, který má uzavřený port 3306, který MariaDB používá. Tento port můžete otevřít buď pomocí iptables, nebo deaktivovat firewall (špatná volba).

Ve výchozím nastavení v konfiguraci my.cnf parametr bind-address určuje IP adresu, na které se očekává připojení k databázi (bind-address = 127.0.0.1) Chcete-li povolit místní i externí připojení, musíte zrušit označení tohoto řádku a přidat pravidlo iptables, které umožňuje připojení z adresy IP hlavního / slave serveru portu 3306..

iptables -I INPUT -p tcp -s ip_adresa_slave_server --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp --port 3306 -j DROP

Během počátečního nastavení jsem takový problém narazil a je snadno detekovatelný. Pokud spustíte kontrolu stavu SlaveZOBRAZIT STAV SLAVE \ G;", uvidíte chybu:

Na závěr bych chtěl říci, že do konfigurace bloku #replication v souboru my.cnf můžete přidat některé parametry. Níže uvedu příklady a stručný popis parametrů, které jsme předepsali, a příklady dalších funkcí užitečných při nastavování replikace..

server-id = 1 - zadejte ID serveru, obvykle začíná na 1, ale můžete použít libovolné číslo, hlavní věc je, že se neshoduje s jinými servery, které se budou podílet na replikaci.

report_host = master - obvykle je zaregistrován název hostitele serveru, můžete zadat IP adresu

log_bin = / var / lib / mysql / mariadb-bin - cesta k aktualizaci protokolu

log_bin_index = /var/lib/mysql/mariadb-bin.index - umožňuje zjistit, který protokol je aktuálně aktivní a které protokoly byly dříve použity.

relay_log = / var / lib / mysql / relay-bin

relay_log_index = /var/lib/mysql/relay-bin.index - samotné protokoly replikace

Jaké další možnosti mohu použít? Pokud potřebujete repliku nakonfigurovat pouze pro konkrétní databázi nebo několik, přidejte funkci:

replicate-do-db = dbname - Pokud potřebujete několik databází, uveďte je s čárkou.

Vyloučení všech databází z replikace:

binlog-ignore-db = dbname

Databáze služeb, jako například:

information_schema, mysql a performance_schema

Čas uložení bin_logu:

expire_logs_days = 10 - kde 10 je počet dní, kdy budou protokoly uloženy.

Pokud data z hlavního serveru nejsou zapsána do databáze se stejným názvem, lze to také nakonfigurovat v konfiguračním souboru:

replicate-rewrite-db = dbmaster-> dbname

To je vše, co jsme nastavili. Myslím, že pomocí tohoto článku můžete snadno nakonfigurovat replikaci databáze MariaDB v režimech Master + Master i Master + Slave..