Replikacija u SQL bazama podataka je proces kopiranja podataka iz jednog izvora u drugi (ili u više njih) i obrnuto. Podaci s jednog poslužitelja baze podataka stalno se kopiraju na jedan ili više drugih poslužitelja. Pomoću replikacije možete rasporediti opterećenje na poslužitelju, pružiti toleranciju grešaka i visoku dostupnost MariaDB baza podataka. DBMS MariaDB / MySQL omogućava korištenje dvije vrste replikacije baze podataka: Master-Master i Master-Slave. U ovom ćemo članku pogledati kako konfigurirati obje vrste replike MariaDB u CentOS-u 7. Počnimo!
sadržaj:
- Instalirajte MariaDB.
- Konfigurirajte replikaciju Master-Master u MariaDB
- Konfigurirajte glavnu podređenu replikaciju u MariaDB
Instalirajte MariaDB.
Ranije smo objavili članak koji opisuje postupak instaliranja MariaDB-a na CentOS 7. Možete se upoznati s njim na https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Stoga se nećemo fokusirati na instalaciju same MariaDB, već ćemo odmah nastaviti konfigurirati replikaciju.
Konfigurirajte replikaciju Master-Master u MariaDB
U shemi replikacije Master-Master, bilo koji od poslužitelja baza podataka MariaDB / MySQL može se koristiti i za pisanje podataka i za čitanje. Mnogim ljudima ova vrsta replikacije nije posve privlačna. Ako jedan od poslužitelja ne uspije, vjerojatnije je da će se podaci izgubiti na drugim glavnim poslužiteljima. Ova se shema obično koristi kada svi poslužitelji trebaju pružiti informacije i za pisanje i za čitanje..
Replikacija se temelji na posebnoj binlog datoteci u kojoj glavni poslužitelj sprema sve operacije baze podataka. Podređeni poslužitelj povezuje se s nadređenom i primjenjuje naredbe na svoje baze podataka.
1. MariaDB: Postavljanje prvog glavnog poslužitelja (Master-1)
Dodaj u našu konfiguracijsku datoteku my.cnf na prvom MariaDB poslužitelju sljedeći redovi:
#replication
server-id = 1
report_host = gospodar
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
ponovno pokretanje usluge mariadb
Napravite korisnika za konfiguriranje replikacije:
mySQL
stvoriti korisnika 'test_master' @ '%' identificiranog s 'test_master';
odobri slanje replikacije na *. * u 'test_master' @ '%';
Za dodavanje Slave potrebni su nam bin_log podaci s Master1 poslužitelja.
MariaDB [(nijedan]]> prikaži status master-a;
+--------------------+----------+--------------+------------------+ | Datoteka | Pozicija | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kanta.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 red u setu (0,000 sec)
Ovo će biti naš Master-1.
2. MariaDB: Postavljanje drugog glavnog poslužitelja (Master-2)
Spojite se na drugi MariaDB poslužitelj, otvorite my.cnf konfiguracijsku datoteku i 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
A također stvorite korisnika na drugom poslužitelju:
stvori korisnika 'test_master2' @ '%' identificiranog s 'test_master2';
odobri slanje replikacije na *. * u 'test_master2' @ '%';
Bin_log na Master-2:
MariaDB [(nijedan]]> prikaži status master-a;
+--------------------+----------+--------------+------------------+ | Datoteka | Pozicija | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kanta.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 red u setu (0,000 sec)
Postavimo vezu između MariaDB poslužitelja u našem programskom klasteru:
Zaustavite rob:
STOP SLAVE;
Dodajte Master-1 drugom poslužitelju:
PROMIJENITE MASTER na MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;
Počinjemo replikaciju:
POČETI SLAVU
Povezani smo s Master-1 i izvodimo isti postupak samo određivanjem podataka našeg drugog poslužitelja:
STOP SLAVE;
PROMIJENI 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;
POČETI SLAVU
Provjerite status drugog poslužitelja:
pokazati status slave \ G
Kao što možete vidjeti na snimkama zaslona, na dva poslužitelja postoje veze, ne vide se pogreške.
3. Provjerite replikaciju između MariaDB poslužitelja.
Zatim provjerite da li replikacija između dva MariaDB poslužitelja radi u master + master modu i da općenito radi, stvorit ćemo novu bazu na Master-1 i stvoriti tablicu u njoj.
MariaDB [(none)]> stvori bazu podataka master1;
Upit je u redu, pogođen je jedan red (0,001 sek)
MariaDB [(none)]> koristi master1;
Baza podataka promijenjena
MariaDB [master1]> USTVARITE TABELU zdravo (
-> AuthorID INT NIJE NULL AUTO_INCREMENT,
-> Ime autora VARCHAR (100),
-> PRIMARNI KLJUČ (AuthorID)
-");
Upit je u redu, pogođeno je 0 redaka (0,005 sek)
Provjeravamo da li se baza podataka automatski pojavila na drugom masteru, a u tome je i naša tablica:
MariaDB [(none)]> prikaži baze podataka;
+--------------------+ | Baza podataka | + -------------------- + | informacije_schema | | majstor1 | | mysql | | izvedba_schema | + -------------------- + 4 reda u setu (0,001 sek)
MariaDB [(none)]> koristi master1;
MariaDB [master1]> prikažite tablice;
+-------------------+ | Tablice_in_master1 | + ------------------- + | zdravo | + ------------------- + 1 red u setu (0,000 sec)
Baza je stvorena na drugom majstoru. Za potpunu provjeru, napravite tablicu u master1 bazi podataka s drugog glavnog poslužitelja i provjerite prenose li se u suprotnom smjeru.
MariaDB [master1]> IZRADI TABELU hello_master1 (
-> AuthorID INT NIJE NULL AUTO_INCREMENT,
-> Ime autora VARCHAR (100),
-> PRIMARNI KLJUČ (AuthorID)
-");
Upit je u redu, pogođeno je 0 redaka (0,006 sek)
Tablica hello_master1 proslijeđena je prvom poslužitelju:
MariaDB [master1]> prikažite tablice;
+-------------------+ | Tablice_in_master1 | + ------------------- + | zdravo | | hello_master1 | + ------------------- + 2 reda u setu (0,000 sec)
Kao što vidite, nova tablica se pojavila na Master-1. Replikacija funkcionira onako kako smo i željeli.
Konfigurirajte glavnu podređenu replikaciju u MariaDB
U ovoj verziji replikacije jedan poslužitelj djeluje kao Slave poslužitelj, na koji se podaci glavnog računala stalno prenose. Sve promjene koje će se izvršiti na Slave serveru neće se prenijeti na Master. Ovo je više promjenjiva vrsta replikacije baze podataka. Najčešće se koristi ova opcija. U ovoj konfiguraciji uvijek ćete imati rezervni poslužitelj s ažuriranim podacima, a ako ne uspije na Slave poslužiteljima, informacije na glavnom poslužitelju neće se izgubiti. Također možete raspodijeliti opterećenje na bazi podataka za svoj projekt, tako da se aplikacije čitaju sa Slave poslužitelja, a podaci se bilježe samo putem glavnog poslužitelja. Na taj način minimizirate odgovor baze podataka.
Prilikom konfiguriranja replike MariaDB baze podataka kao master + slave, master poslužitelja (master1) konfigurira se na način opisan gore.
Prelazimo na podređeni poslužitelj. Dodajte linije na moj.cnf:
#replication
server-id = 2
report_host = rob2
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
Ponovno pokretanje mariadb. Na prvom poslužitelju uzimamo bin_log podatke.
MariaDB [(nijedan]]> prikaži status master-a;
+--------------------+----------+--------------+------------------+ | Datoteka | Pozicija | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-kanta.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 red u setu (0,000 sec)
Na podređenom poslužitelju na konzoli mysql napravite sljedeće:
MariaDB [(nijedna)]> STOP SLAVE;
Upit je OK, pogođeno 0 redova, 1 upozorenje (0,000 sec)
MariaDB [(none)]> PROMIJENI MASTER NA MASTER_HOST = "IP_master", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 664;
Upit je u redu, pogođeno je 0 redaka (0,014 sec)
MariaDB [(nijedna)]> START SLAVE;
SET GLOBAL read_only = UKLJUČEN;
Istovremeno, morate kreirati i izvatke baze podataka i koristiti ga za početno učitavanje podataka u MariaDV na slave serveru.
Provjerite status slave: POKAŽI STATUS SLAVE \ G;
Stvorite bazu podataka na Masteru:
MariaDB [(none)]> stvoriti bazu podataka master_hello;
Upit je u redu, pogođen je jedan red (0,001 sek)
Provjeravamo da je i baza podataka stvorena na Slave serveru:
MariaDB [(none)]> prikaži baze podataka;
+--------------------+ | Baza podataka | + -------------------- + | informacije_schema | | master_hello | | master_test | | mysql | | izvedba_schema | | test | + -------------------- + 6 redaka u setu (0,001 sek)
Napravimo bazu podataka na Slave-u i provjerimo jesu li podaci preneseni našem Učitelju.
Kao što vidite, stvorili smo bazu, a ona se nalazi na Slave-u. Provjeri je li se pojavila na Učitelju. Nije tu. Replikacija iz robova u gospodara ne ide.
Odnosno, MariaDB replikacija djeluje samo na jedan način. Napravimo još jednu provjeru brisanjem baze podataka master_hello sa Slave poslužitelja:
I provjerite je li se povukla na glavnom poslužitelju:
Kao što vidimo, sve je u redu i baza je na mjestu.
P.s. Pri postavljanju replike možete naići na neke zamke, a najčešća od njih je vatrozid. Centos 7 je, prema zadanim postavkama, instalirao firewalld na kojem je zatvoren port 3306, koji MariaDB koristi. Možete otvoriti ovaj port putem iptablesa ili onemogućiti vatrozid (loša opcija).
U konfiguraciji my.cnf prema zadanom parametar bind-adrese određuje IP adresu na kojoj se očekuje veza s bazom podataka (bind-address = 127.0.0.1
). Da biste omogućili i lokalne i vanjske veze, morate komentirati ovaj redak i dodati pravilo iptables koje dopušta veze s IP adrese glavnog / slave poslužitelja porta 3306.
iptables -I INPUT -p tcp -s ip_address_slave_server --portport 3306 -j ACCEPT
iptables -I INPUT -p tcp --dport 3306 -j DROP
Tijekom početnog postavljanja naišao sam na takav problem i on se lako otkriva. Ako pokrenete provjeru statusa SlavePOKAŽI STATUS SLAVE \ G;", vidjet ćete pogrešku:
Zaključno, želim reći da u konfiguraciju bloka #replication u datoteci my.cnf možete dodati neke parametre. U nastavku ću navesti primjere i kratak opis parametara koje smo propisali, kao i primjere drugih funkcija korisnih u postavljanju replike.
server-id = 1
- odredite ID servera, obično započnite s 1, ali možete koristiti bilo koji broj, glavna stvar je da se ne podudara s drugim poslužiteljima koji će biti uključeni u replikaciju.
report_host = gospodar
- obično je registrirano ime računala poslužitelja, možete odrediti IP adresu
log_bin = / var / lib / mysql / mariadb-bin
- put do dnevnika ažuriranja
log_bin_index = /var/lib/mysql/mariadb-bin.index
- omogućuje vam da otkrijete koji je dnevnik trenutno aktivan, a koji su dnevnici prethodno korišteni.
relay_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
- replikacija se evidentira
Koje druge mogućnosti mogu koristiti? Ako trebate konfigurirati repliku samo za određenu bazu podataka ili nekoliko njih, dodajte funkciju:
repliciraj-do-db = dbname
- ako vam treba nekoliko baza podataka, popisite ga zarezom.
Izuzimanje bilo koje baze podataka iz replikacije:
binlog-ignore-db = dbname
Servisne baze podataka, kao što su:
informacije_schema, mysql i performanse_schema
Bin_log vrijeme pohrane:
expire_logs_days = 10
- gdje je 10 broj dana pohranjivanja zapisnika.
Također, ako podaci s glavnog poslužitelja nisu zapisani u istoimenoj bazi podataka, to se također može konfigurirati u konfiguracijskoj datoteci:
replicirati-prepisati-db = dbmaster-> dbname
To su sve naše postavke. Mislim da uz pomoć ovog članka možete jednostavno konfigurirati replikaciju MariaDB baze podataka u načinima Master + Master i Master + Slave.