Podvajanje v bazah SQL je postopek kopiranja podatkov iz enega vira v drugega (ali v več) in obratno. Podatki z enega strežnika baz podatkov se nenehno kopirajo na enega ali več drugih strežnikov. S pomočjo podvajanja lahko porazdelite obremenitev na strežniku, zagotovite napako in visoko razpoložljivost baz podatkov MariaDB. DBMS MariaDB / MySQL omogoča uporabo dveh vrst podvajanja baz podatkov: Master-Master in Master-Slave. V tem članku bomo pogledali, kako konfigurirati obe vrsti podvajanja MariaDB v CentOS 7. Začnimo!
Vsebina:
- Namestite MariaDB.
- Konfiguriranje podvajanja Master-Master v MariaDB
- Konfiguriranje podrejene podrejene replike v MariaDB
Namestite MariaDB.
Pred tem smo objavili članek, ki opisuje postopek namestitve MariaDB v CentOS 7. Z njim se lahko seznanite na https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Zato se ne bomo osredotočili na samo namestitev MariaDB, ampak takoj bomo nadaljevali s konfiguracijo podvajanja.
Konfiguriranje podvajanja Master-Master v MariaDB
V shemi podvajanja Master-Master se lahko kateri koli od strežnikov baz podatkov MariaDB / MySQL uporablja tako za pisanje informacij kot za branje. Veliko ljudi se zdi, da ta vrsta razmnoževanja ni povsem privlačna. Če eden od strežnikov ne uspe, je večja verjetnost, da bodo podatki izgubljeni na drugih glavnih strežnikih. Običajno se ta shema uporablja, kadar morajo vsi strežniki zagotavljati informacije o pisanju in branju..
Podvajanje temelji na posebni datoteki binlog, v kateri glavni strežnik shrani vse operacije baze podatkov. Podrejeni strežnik se poveže z nadrejenim in v svoje baze podatkov uporabi ukaze.
1. MariaDB: Nastavitev prvega glavnega strežnika (Master-1)
Dodaj v našo konfiguracijsko datoteko moj.cnf na prvem strežniku MariaDB naslednje vrstice:
#replication
server-id = 1
report_host = glavni
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
servis zagon mariadb
Ustvari uporabnika za konfiguracijo podvajanja:
mysql
ustvari uporabnika 'test_master' @ '%', ki ga je identificiral 'test_master';
dodelite podrejeni podrejeni podrejeni na *. * v 'test_master' @ '%';
Za dodajanje Slave potrebujemo podatke bin_log s strežnika Master1.
MariaDB [(noben)]> prikaži status glavnega;
+--------------------+----------+--------------+------------------+ | Datoteka | Položaj | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kovček.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 vrstica v nizu (0,000 sek)
To bo naš Master-1.
2. MariaDB: Nastavitev drugega glavnega strežnika (Master-2)
Povežite se z drugim strežnikom MariaDB, odprite konfiguracijsko datoteko my.cnf in dodajte podatke:
#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
In tudi ustvarite uporabnika na drugem strežniku:
ustvari uporabnika 'test_master2' @ '%', ki ga je določil 'test_master2';
dodelite podrejeni podrejeni podrejeni na *. * v 'test_master2' @ '%';
Bin_log v Master-2:
MariaDB [(noben)]> prikaži status glavnega;
+--------------------+----------+--------------+------------------+ | Datoteka | Položaj | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kovček.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 vrstica v nizu (0,000 sek)
Nastavimo povezavo med strežniki MariaDB v naši programski skupini:
Ustavite suženj:
STOP SLAVE;
Dodajte Master-1 na drugi strežnik:
SPREMENITE MASTER NA MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;
Začnemo s podvajanjem:
ZAČNI SLAVE
Povezani smo z Master-1 in izvedemo enak postopek, le tako, da določimo podatke našega drugega strežnika:
STOP SLAVE;
SPREMENITE 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;
ZAČNI SLAVE
Preverite stanje drugega strežnika:
prikaže stanje sužnjev \ G
Kot lahko vidite na posnetkih zaslona, sta povezava na dveh strežnikih, napak ni.
3. Preverite podvajanje med strežniki MariaDB.
Nato preverimo, ali podvajanje med dvema strežnikoma MariaDB deluje v načinu master + master in ali na splošno deluje, bomo ustvarili novo bazo na Master-1 in v njej ustvarili tabelo.
MariaDB [(noben)]> ustvari bazo podatkov master1;
Poizvedba v redu, prizadeta je 1 vrstica (0,001 sek)
MariaDB [(noben)]> uporabi master1;
Baza podatkov je spremenjena
MariaDB [master1]> CREATE TABLE zdravo (
-> AuthorID INT NI NULL AUTO_INCREMENT,
-> Ime avtorja VARCHAR (100),
-> PRIMARNI KLJUČ (AuthorID)
->);
Poizvedba v redu, prizadetih 0 vrstic (0,005 sek)
Preverimo, ali se je baza podatkov samodejno prikazala pri drugem glavnem strežniku in je v njej tudi naša tabela:
MariaDB [(noben)]> prikaži baze podatkov;
+--------------------+ | Baza podatkov | + -------------------- + | informacije_schema | | mojster1 | | mysql | | performance_schema | + -------------------- + 4 vrstice v nizu (0,001 sek)
MariaDB [(noben)]> uporabi master1;
MariaDB [master1]> prikaži tabele;
+-------------------+ | Tabele_in_master1 | + ------------------- + | zdravo | + ------------------- + 1 vrstica v nizu (0,000 sek)
Podstavek je nastal na drugem mojstru. Za popolno preverjanje ustvarite tabelo v bazi podatkov master1 z drugega glavnega strežnika in preverite, ali so prenesene v nasprotni smeri.
MariaDB [master1]> USTVARJA TABELO hello_master1 (
-> AuthorID INT NI NULL AUTO_INCREMENT,
-> Ime avtorja VARCHAR (100),
-> PRIMARNI KLJUČ (AuthorID)
->);
Poizvedba v redu, prizadetih 0 vrstic (0,006 sek)
Tabela hello_master1 je bila posredovana prvemu strežniku:
MariaDB [master1]> prikaži tabele;
+-------------------+ | Tabele_in_master1 | + ------------------- + | zdravo | | hello_master1 | + ------------------- + 2 vrstici v nizu (0,000 sek)
Kot vidite, se je na Master-1 pojavila nova tabela. Podvajanje deluje tako, kot smo želeli.
Konfiguriranje podrejene podrejene replike v MariaDB
V tej različici podvajanja en strežnik deluje kot pomožni strežnik, na katerega se nenehno prenašajo podatki glavnega strežnika. Vse spremembe, ki bodo izvedene na pomožnem strežniku, ne bodo prenesene v nadrejeni. To je bolj prenašalna vrsta podvajanja baze podatkov. Najpogosteje se ta možnost uporablja. V tej konfiguraciji boste imeli vedno rezervni strežnik s posodobljenimi podatki in če ne uspe na pomožnih strežnikih, informacije na glavnem strežniku ne bodo izgubljene. Prav tako lahko razdelite obremenitev na bazo podatkov za svoj projekt, tako da se aplikacije berejo s podrejenih strežnikov, podatki pa se beležijo samo prek glavnega strežnika. Tako zmanjšate odziv baze podatkov.
Pri konfiguraciji replike baze podatkov MariaDB kot master + slave je strežnik master (master1) konfiguriran, kot je opisano zgoraj.
Preidemo na pomožni strežnik. Dodajte vrstice v moj.cnf:
#replication
server-id = 2
report_host = suženj2
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
Ponovni zagon mariadb. Na prvem strežniku vzamemo podatke bin_log.
MariaDB [(noben)]> prikaži status glavnega;
+--------------------+----------+--------------+------------------+ | Datoteka | Položaj | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kovček.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 vrstica v nizu (0,000 sek)
Na pomožnem strežniku v konzoli mysql naredite naslednje:
MariaDB [(noben)]> STOP SLAVE;
Poizvedba v redu, prizadetih 0 vrstic, 1 opozorilo (0,000 sek)
MariaDB [(noben)]> SPREMENI MASTER NA MASTER_HOST = "IP_master", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 664;
Poizvedba v redu, prizadetih 0 vrstic (0,014 sek)
MariaDB [(noben)]> ZAČNI SLAVE;
SET GLOBAL read_only = VKLOP;
Hkrati morate ustvariti tudi smetišče baze podatkov in ga uporabiti za začetno nalaganje podatkov v MariaDВ na pomožnem strežniku.
Preverite stanje slave: PRIKAŽI STATUS SLAVE \ G;
Ustvari bazo podatkov v programu Master:
MariaDB [(noben)]> ustvari bazo podatkov master_hello;
Poizvedba v redu, prizadeta je 1 vrstica (0,001 sek)
Preverimo, ali je bila baza podatkov ustvarjena tudi na podrejenem strežniku:
MariaDB [(noben)]> prikaži baze podatkov;
+--------------------+ | Baza podatkov | + -------------------- + | informacije_schema | | mojster_hello | | master_test | | mysql | | performance_schema | | preizkus | + -------------------- + 6 vrstic v nizu (0,001 sek)
Ustvarimo bazo podatkov na Slave in preverimo, ali so bili podatki preneseni v naš Master.
Kot vidite, smo ustvarili bazo, in to na Slave. Preverite, če se je pojavila na Masteru. Ni je tam. Razmnoževanje od sužnja do gospoda ne gre.
To pomeni, da podvajanje MariaDB deluje samo na en način. Še enkrat preverimo tako, da iz podrejenega strežnika izbrišemo bazo podatkov master_hello:
In preverite, ali se je upokojila na glavnem strežniku:
Kot vidimo, je vse v redu in osnova je na svojem mestu.
P.S. Pri nastavitvi replike lahko naletite na nekaj pasti, najpogostejši med njimi je požarni zid. V Centos 7 je privzeto nameščen požarni zaščitnik, ki ima zaprta vrata 3306, ki jih uporablja MariaDB. Ta vrata lahko odprete prek iptables ali onemogočite požarni zid (slaba možnost).
Privzeto v konfiguraciji my.cnf parameter bind-address določa IP naslov, na katerem se pričakuje povezave z bazo podatkov (bind-address = 127.0.0.1
) Če želite dovoliti lokalne in zunanje povezave, morate to vrstico preklicati in dodati pravilo iptables, ki omogoča povezave z naslova IP glavnega / podrejenega strežnika vrat 3306.
iptables -I INPUT -p tcp -s ip_address_slave_server --portport 3306 -j ACCEPT
iptables -I INPUT -p tcp --portport 3306 -j DROP
Med prvotno namestitvijo sem naletel na takšno težavo in jo zlahka zaznamo. Če zaženete preverjanje stanja podrejenihPRIKAŽI STATUS SLAVE \ G;", boste videli napako:
Na koncu želim povedati, da lahko v konfiguracijo bloka #replication v datoteki my.cnf dodate nekaj parametrov. Spodaj bom navedel primere in kratek opis parametrov, ki smo jih predpisali, ter primere drugih funkcij, uporabnih pri nastavitvi podvajanja.
server-id = 1
- določite ID strežnika, običajno se začne z 1, vendar lahko uporabite katero koli številko, glavna stvar je, da ne sovpada z drugimi strežniki, ki bodo vključeni v podvajanje.
report_host = glavni
- ponavadi je registrirano ime gostitelja strežnika, lahko določite naslov IP
log_bin = / var / lib / mysql / mariadb-bin
- pot do posodobitve dnevnika
log_bin_index = /var/lib/mysql/mariadb-bin.index
- vam omogoča, da ugotovite, kateri dnevnik je trenutno aktiven in kateri dnevniki so bili prej uporabljeni.
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
- podvajanja se sami prijavijo
Katere druge možnosti lahko uporabim? Če morate konfiguracijo konfigurirati samo za določeno bazo ali več, dodajte funkcijo:
repliciraj-do-db = dbname
- če potrebujete več baz podatkov, jih navedite z vejico.
Izključitev kakršnih koli baz podatkov iz podvajanja:
binlog-ignore-db = dbname
Storitvene baze podatkov, kot so:
informacije_schema, mysql in performance_schema
Bin_log čas shranjevanja:
expire_logs_days = 10
- kjer je 10 število dni shranjevanja dnevnikov.
Če podatki iz glavnega strežnika niso zapisani v istoimensko zbirko podatkov, je to mogoče nastaviti tudi v konfiguracijski datoteki:
replicate-rewrite-db = dbmaster-> dbname
To je vse naše nastavitve. Mislim, da lahko s pomočjo tega članka preprosto konfigurirate podvajanje podatkovne baze MariaDB v obeh načinih Master + Master in Master + Slave.