MariaDB Konfigurácia replikácie databázy v režime Master-Master / Slave

Replikácia v databázach SQL je proces kopírovania údajov z jedného zdroja do druhého (alebo do viacerých) a naopak. Dáta z jedného databázového servera sa neustále kopírujú na jeden alebo viac ďalších serverov. Pomocou replikácie môžete distribuovať záťaž na serveri, poskytovať odolnosť proti chybám a vysokú dostupnosť databáz MariaDB. DBMS MariaDB / MySQL umožňuje použitie dvoch typov replikácie databázy: Master-Master a Master-Slave. V tomto článku sa pozrieme na to, ako nakonfigurovať oba typy replikácie MariaDB v systéme CentOS 7. Začnime!

obsah:

  • Nainštalujte MariaDB.
  • Konfigurácia replikácie Master-Master v MariaDB
  • Konfigurácia replikácie Master-Slave v MariaDB

Nainštalujte MariaDB.

Skôr sme uverejnili článok popisujúci proces inštalácie MariaDB na CentOS 7. Môžete sa s ním zoznámiť na adrese https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Preto sa nebudeme zameriavať na samotnú inštaláciu MariaDB, ale ihneď pokračujeme v konfigurácii replikácie.

Konfigurácia replikácie Master-Master v MariaDB

V schéme replikácie Master-Master sa môže ktorýkoľvek z databázových serverov MariaDB / MySQL použiť na písanie informácií aj na čítanie. Mnoho ľudí považuje tento typ replikácie za málo atraktívny. Ak zlyhá jeden zo serverov, je pravdepodobnejšie, že dôjde k strate údajov na iných hlavných serveroch. Táto schéma sa zvyčajne používa, keď všetky servery potrebujú poskytnúť informácie na písanie aj čítanie..

Replikácia je založená na špeciálnom súbore binlog, v ktorom hlavný server ukladá všetky databázové operácie. Slave server sa pripája na master a aplikuje príkazy na svoje databázy.

1. MariaDB: Nastavenie prvého hlavného servera (Master-1)

Pridajte do nášho konfiguračného súboru my.cnf na prvom serveri MariaDB nasledujúce riadky:

#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

reštartovať servisný prístroj

Vytvorte používateľa na konfiguráciu replikácie:

mysql
vytvoriť používateľa 'test_master' @ '%' identifikovaného pomocou 'test_master';
udeliť replikačnému otrokovi *. * 'test_master' @ '%';

Na pridanie Slave potrebujeme bin_log dáta zo servera Master1.

MariaDB [(žiadne)]> zobraziť hlavný stav;

+--------------------+----------+--------------+------------------+ | Súbor | Pozícia Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 riadok v sade (0,000 s) 

Toto bude náš Master-1.

2. MariaDB: Nastavenie druhého hlavného servera (Master-2)

Pripojte sa k druhému serveru MariaDB, otvorte konfiguračný súbor my.cnf a pridajte informácie:

#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 tiež vytvorte používateľa na druhom serveri:

vytvoriť používateľa 'test_master2' @ '%' identifikovaného pomocou 'test_master2';
udeliť replikačnému otrokovi *. * 'test_master2' @ '%';

Bin_log na Master-2:

MariaDB [(žiadne)]> zobraziť hlavný stav;

+--------------------+----------+--------------+------------------+ | Súbor | Pozícia Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 riadok v sade (0,000 s)

Vytvorme spojenie medzi servermi MariaDB v našom softvérovom klastri:

Zastavte otroka:

STOP SLAVE;

Pridajte Master-1 na druhý server:

ZMENA MASTERA NA MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;

Začneme replikáciu:

ZAČNITE SLAVE

Sme pripojení k Master-1 a vykonávame rovnakú procedúru iba zadaním údajov druhého servera:

STOP SLAVE;
ZMENA MASTERA 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;
ZAČNITE SLAVE

Skontrolujte stav druhého servera:

zobraziť stav otroka \ G

Ako vidíte na snímkach obrazovky, na dvoch serveroch sú pripojenia, žiadne chyby sa nepozorujú.

3. Overte replikáciu medzi servermi MariaDB.

Ďalej, aby sme si overili, či replikácia medzi dvoma servermi MariaDB funguje v režime Master + Master a či to vo všeobecnosti funguje, vytvoríme novú základňu pre Master-1 a vytvoríme v nej tabuľku..

MariaDB [(žiadne)]> vytvoriť databázu master1;

Dotaz je v poriadku, ovplyvnený 1 riadok (0,001 s)


MariaDB [(žiadne)]> použitie master1;

Databáza sa zmenila

MariaDB [master1]> VYTVORIŤ TABUĽKU

-> IDENTIFIKÁTOR INT NOT NULL AUTO_INCREMENT,

-> Meno autora VARCHAR (100),

-> PRIMARY KEY (AuthorID)

->);

Dotaz je v poriadku, ovplyvnených 0 riadkov (0,005 s)

Skontrolujeme, či sa databáza automaticky objavila na druhom masteri a či je v nej aj naša tabuľka:

MariaDB [(žiadne)]> zobraziť databázy;

+--------------------+ | Databáza + -------------------- + | information_schema | | master1 | | mysql | | performance_schema | + -------------------- + 4 riadky v sade (0,001 s)

MariaDB [(žiadne)]> použitie master1;

MariaDB [master1]> zobraziť tabuľky;

+-------------------+ | Tables_in_master1 | + ------------------- + | ahoj | + ------------------- + 1 riadok v sade (0,000 s) 

Základ bol vytvorený na druhom masteri. Na úplnú kontrolu vytvorte tabuľku v databáze master1 z druhého hlavného servera a skontrolujte, či sa neprenášajú opačným smerom.

MariaDB [master1]> CREATE TABLE hello_master1 (

-> IDENTIFIKÁTOR INT NOT NULL AUTO_INCREMENT,

-> Meno autora VARCHAR (100),

-> PRIMARY KEY (AuthorID)

->);

Dotaz je v poriadku, ovplyvnených 0 riadkov (0,006 s)

Tabuľka hello_master1 bola odovzdaná prvému serveru:

MariaDB [master1]> zobraziť tabuľky;

+-------------------+ | Tables_in_master1 | + ------------------- + | ahoj | | hello_master1 | + ------------------- + 2 riadky v sade (0,000 s) 

Ako vidíte, na Master-1 sa objavila nová tabuľka. Replikácia funguje tak, ako sme chceli.

Konfigurácia replikácie Master-Slave v MariaDB

V tejto verzii replikácie jeden server funguje ako slave server, na ktorý sa neustále prenášajú údaje z Master. Všetky zmeny, ktoré sa vykonajú na slave serveri, sa neprenesú na Master. Toto je viac replikácie zlyhania pri replikácii databázy. Najčastejšie sa používa táto možnosť. V tejto konfigurácii budete mať vždy záložný server s aktuálnymi údajmi, a ak zlyhá na slave serveroch, informácie na hlavnom serveri sa nestratia. Zaťaženie databázy môžete distribuovať aj pre svoj projekt, takže aplikácie čítajú zo serverov Slave a údaje sa zaznamenávajú iba cez hlavný server. Týmto spôsobom minimalizujete odozvu databázy.

Keď konfigurujete repliku databázy MariaDB ako master + slave, server master (master1) je nakonfigurovaný tak, ako je opísané vyššie..

Prejdeme na otrokový server. Pridajte riadky do súboru 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

Reštartovanie mariadb. Na prvom serveri berieme bin_log dáta.

MariaDB [(žiadne)]> zobraziť hlavný stav;

+--------------------+----------+--------------+------------------+ | Súbor | Pozícia Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 riadok v sade (0,000 s)

Na podriadenom serveri v konzole konzoly mysql postupujte takto:

MariaDB [(žiadne)]> STOP SLAVE;

Dotaz je v poriadku, 0 postihnutých riadkov, 1 upozornenie (0,000 s)

MariaDB [(žiadne)]> ZMENA 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 poriadku, ovplyvnených 0 riadkov (0,014 sekundy)

MariaDB [(žiadne)]> START SLAVE;

Pri nastavovaní replikácie pre existujúcu databázu MariDB musíte pred spustením replikácie uviesť databázu do režimu čítania, aby sa neaktualizoval súbor binlog..

SET GLOBAL read_only = ON;

Zároveň je potrebné vytvoriť výpis databázy a použiť ho na počiatočné načítanie údajov do MariaD na podradenom serveri..

Skontrolujte stav slave: ZOBRAZIŤ STAV SLAVE \ G;

Vytvorenie databázy na serveri Master:

MariaDB [(žiadne)]> vytvoriť databázu master_hello;

Dotaz je v poriadku, ovplyvnený 1 riadok (0,001 s)

Skontrolujeme, či bola databáza vytvorená aj na slave serveri:

MariaDB [(žiadne)]> zobraziť databázy;

+--------------------+ | Databáza + -------------------- + | information_schema | | master_hello | | master_test | | mysql | | performance_schema | | test | + -------------------- + 6 riadkov v sade (0,001 s) 

Vytvorme databázu na Slave a skontrolujte, či boli dáta prenesené do nášho Master.

Ako vidíte, vytvorili sme základňu a je na slave. Skontrolujte, či sa neobjavila na Majstra. Nie je tam. Replikácia z otroka na pána nejde.

To znamená, že replikácia MariaDB funguje iba jedným spôsobom. Urobme ďalšiu kontrolu odstránením databázy master_hello zo servera Slave:

A skontrolujte, či odišla na hlavný server do dôchodku:

Ako vidíme, všetko je v poriadku a základňa je na svojom mieste.

PS: Pri nastavovaní repliky sa môžu vyskytnúť niektoré úskalia, z ktorých najbežnejší je firewall. V predvolenom nastavení má Centos 7 nainštalovaný firewall, ktorý má uzavretý port 3306, ktorý používa MariaDB. Tento port môžete otvoriť buď pomocou iptables, alebo vypnúť firewall (zlá možnosť).

V predvolenom nastavení v konfigurácii my.cnf parameter bind-address určuje IP adresu, na ktorej sa očakávajú pripojenia k databáze (bind-address = 127.0.0.1). Ak chcete povoliť miestne aj externé pripojenia, musíte odškrtnúť tento riadok a pridať pravidlo iptables, ktoré umožňuje pripojenia z adresy IP hlavného / podriadeného servera portu 3306..

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

Počas počiatočného nastavenia som narazil na taký problém a dá sa ľahko zistiť. Ak spustíte kontrolu stavu slaveZOBRAZIŤ STAV SLAVE \ G;“sa zobrazí chyba:

Na záver by som chcel povedať, že do konfigurácie # replikačného bloku v súbore my.cnf môžete pridať niektoré parametre. Ďalej uvádzam príklady a stručný popis parametrov, ktoré sme predpísali, ako aj príklady ďalších funkcií užitočných pri nastavovaní replikácie..

server-id = 1 - zadajte ID servera, zvyčajne začínajte 1, ale môžete použiť akékoľvek číslo, hlavná vec je, že sa nezhoduje s inými servermi, ktoré sa zúčastnia replikácie..

report_host = master - zvyčajne je zaregistrovaný názov hostiteľa servera, môžete zadať IP adresu

log_bin = / var / lib / mysql / mariadb-bin - cesta k aktualizácii denníka

log_bin_index = /var/lib/mysql/mariadb-bin.index - umožňuje zistiť, ktorý protokol je aktuálne aktívny a ktoré protokoly boli predtým použité.

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

relay_log_index = /var/lib/mysql/relay-bin.index - samotné protokoly replikácie

Aké ďalšie možnosti môžem použiť? Ak potrebujete repliku nakonfigurovať iba pre konkrétnu databázu alebo viac, pridajte funkciu:

replicate-do-db = dbname - ak potrebujete viac databáz, uveďte ich čiarkou.

Vylúčenie akýchkoľvek databáz z replikácie:

binlog-ignore-db = dbname

Databázy služieb, ako napríklad:

information_schema, mysql a performance_schema

Čas uloženia bin_logu:

expire_logs_days = 10 - kde 10 je počet dní, počas ktorých sa protokoly uložia.

Ak údaje z hlavného servera nie sú zapísané v databáze s rovnakým názvom, možno to nakonfigurovať aj v konfiguračnom súbore:

replicate-rewrite-db = dbmaster-> dbname

To je všetko, čo robíme. Myslím, že pomocou tohto článku môžete ľahko nakonfigurovať replikáciu databázy MariaDB v režimoch Master + Master aj Master + Slave..