MariaDB Adatbázis-replikáció konfigurálása Master-Master / Slave módban

Az SQL adatbázisokban történő replikáció az adatok másolása egyik forrásból a másikba (vagy többbe), és fordítva. Az egyik adatbázis-kiszolgáló adatait folyamatosan lemásolják egy vagy több másik kiszolgálóra. A replikáció segítségével eloszthatja a szerver terhelését, biztosíthatja a hibatűrést és a MariaDB adatbázisok magas rendelkezésre állását. A DBMS MariaDB / MySQL lehetővé teszi az adatbázis-replikáció két típusának használatát: Master-Master és Master-Slave. Ebben a cikkben megvizsgáljuk, hogyan állíthatjuk be mindkét típusú MariaDB replikációt a CentOS 7-ben. Kezdjük!

Tartalom:

  • Telepítse a MariaDB-t.
  • Konfigurálja a Master-Master replikációt a MariaDB-ben
  • Konfigurálja a Master-Slave replikációt a MariaDB-ben

Telepítse a MariaDB-t.

Korábban egy cikket tettünk közzé, amely leírja a MariaDB telepítési folyamatát a CentOS 7-en. Ismerkedhet meg velük a https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/ oldalon. Ezért nem összpontosítunk maga a MariaDB telepítésére, hanem rögtön folytatjuk a replikáció konfigurálását.

Konfigurálja a Master-Master replikációt a MariaDB-ben

A Master-Master replikációs rendszerben a MariaDB / MySQL adatbázis-kiszolgálók bármelyike ​​felhasználható információk írására és olvasására. Sokan úgy találják, hogy az ilyen típusú replikáció nem teljesen vonzó. Ha az egyik kiszolgáló meghibásodik, akkor valószínűbb, hogy az adatok elvesznek más Master szervereknél. Általában ezt a sémát akkor alkalmazzák, amikor az összes kiszolgálónak írási és olvasási információkat egyaránt tartalmaznia kell..

A replikáció egy speciális binlog fájlon alapul, amelyben a Master szerver elmenti az összes adatbázis műveletet. A slave kiszolgáló csatlakozik a mesterhez, és parancsokat alkalmaz az adatbázisaira.

1. MariaDB: Az első főkiszolgáló beállítása (Master-1)

Vegye fel a konfigurációs fájlba my.cnf az első MariaDB szerveren a következő sorok:

#replication
szerver-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

szolgáltatás mariadb újraindítása

Hozzon létre egy felhasználót a replikáció konfigurálásához:

mysql
hozzon létre egy 'test_master' @ '%' felhasználót, amelyet 'test_master' azonosított;
adjon replikációs szolga * -on * -ot a 'test_master' @ '%' -nak;

A Slave hozzáadásához bin_log adatokra van szükségünk a Master1 szerverről.

MariaDB [(nincs)]> megmutatja a mester állapotát;

+--------------------+----------+--------------+------------------+ | Fájl | Pozíció | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 sor a készletben (0,000 mp) 

Ez lesz a Master-1.

2. MariaDB: Második master szerver beállítása (Master-2)

Csatlakozzon a második MariaDB szerverhez, nyissa meg a my.cnf konfigurációs fájlt és adja hozzá az információkat:

#replication
szerver-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

És hozzon létre egy felhasználót a második szerveren:

hozzon létre egy 'test_master2' @ '%' felhasználót, amelyet 'test_master2' azonosított;
adjon replikációs szolga * -on * a 'test_master2' @ '%' -nak;

Bin_log a Master-2-en:

MariaDB [(nincs)]> megmutatja a mester állapotát;

+--------------------+----------+--------------+------------------+ | Fájl | Pozíció | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 sor a készletben (0,000 mp)

Hozzuk létre a kapcsolatot a MariaDB szerverek között a szoftverfürtünkben:

Állítsa le a rabszolgot:

STOP SLAVE;

Adja hozzá a Master-1-t a második szerverhez:

MASTER VÁLTOZTATÁSA MASTER_HOST = "IP_master1", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000002", MASTER_LOG_POS = 664;

Megkezdjük a replikációt:

SZABAD SZABAD

A Master-1-hez kapcsolódunk és ugyanazt az eljárást hajtjuk végre, csak a második szerver adatainak megadásával:

STOP SLAVE;
MASTER VÁLTOZTATÁSA MASTER_HOST = "183.219.19.36", MASTER_USER = "test_master2", MASTER_PASSWORD = "test_master2", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 667;
SZABAD SZABAD

Ellenőrizze a második szerver állapotát:

mutatják a szolga állapotát \ G

Mint látható a képernyőképeken, két kiszolgálón vannak kapcsolatok, hibákat nem figyelünk meg.

3. Ellenőrizze a replikációt a MariaDB szerverek között.

Ezután annak ellenőrzésére, hogy a két MariaDB kiszolgáló között a replikáció master + master módban működik-e, és hogy általában működik-e, létrehozunk egy új alapot a Master-1-en, és létrehozunk egy táblázatot benne.

MariaDB [(nincs)]> adatbázis-master1 létrehozása;

A lekérdezés rendben, az 1 sor érintett (0,001 mp)


MariaDB [(nincs)]> use master1;

Az adatbázis megváltozott

MariaDB [master1]> CABATE CABATE hello (

-> AuthorID INT NULL AUTO_INCREMENT,

-> Szerzőnév VARCHAR (100),

-> PRIMARY KULCS (AuthorID)

->);

A lekérdezés rendben, 0 sor érintett (0,005 mp)

Ellenőrizzük, hogy az adatbázis automatikusan megjelenik-e a második főgépen, és a táblázatunk is ott van:

MariaDB [(nincs)]> adatbázisok megjelenítése;

+--------------------+ | Adatbázis | + -------------------- + | információ_schema | | master1 | | mysql | | performance_schema | + -------------------- + 4 sor a készletben (0,001 mp)

MariaDB [(nincs)]> use master1;

MariaDB [master1]> táblázatok mutatása;

+-------------------+ | Tables_in_master1 | + ------------------- + | hello | + ------------------- + 1 sor a készletben (0,000 mp) 

Az alapot a második mester készítette. A teljes ellenőrzés érdekében hozzon létre egy táblát a master1 adatbázisban a második főkiszolgálótól, és ellenőrizze, hogy az ellenkező irányba kerül-e.

MariaDB [master1]> A TÁBLÁZAT létrehozása hello_master1 (

-> AuthorID INT NULL AUTO_INCREMENT,

-> Szerzőnév VARCHAR (100),

-> PRIMARY KULCS (AuthorID)

->);

A lekérdezés rendben, 0 sor érintett (0,006 mp)

A hello_master1 táblát átadták az első szervernek:

MariaDB [master1]> táblázatok mutatása;

+-------------------+ | Tables_in_master1 | + ------------------- + | hello | | hello_master1 | + ------------------- + 2 sor a készletben (0,000 mp) 

Mint láthatja, egy új tábla jelent meg a Master-1-en. A replikáció a kívánt módon működik.

Konfigurálja a Master-Slave replikációt a MariaDB-ben

A replikáció ezen verziójában az egyik kiszolgáló szolgakiszolgálóként működik, amelybe a Masterről származó adatok folyamatosan továbbadódnak. A Slave kiszolgálón végrehajtott összes változtatás nem kerül át a Master-re. Ez egy feladatátvételi típusú adatbázis-replikáció. Leggyakrabban ezt az opciót használják. Ebben a konfigurációban mindig van egy biztonsági mentési kiszolgáló, amely friss adatokkal rendelkezik, és ha a Slave szervereknél nem sikerül, akkor a Master szerver adatai nem vesznek el. A terhelést a projekt adatbázisán is eloszthatja úgy, hogy az alkalmazások Slave-kiszolgálókról olvasódjanak, és az adatokat csak a Master-kiszolgálón keresztül rögzítsék. Ily módon minimalizálja az adatbázis-választ.

Amikor a MariaDB adatbázis replikát master + slave-ként konfigurálja, a kiszolgáló mesterét (master1) a fent leírtak szerint konfigurálják.

Átadjuk a slave szervernek. Adja hozzá a sorokat a my.cnf fájlhoz:

#replication
szerver-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

A mariadb újraindítása. Az első kiszolgálón a bin_log adatokat vesszük.

MariaDB [(nincs)]> megmutatja a mester állapotát;

+--------------------+----------+--------------+------------------+ | Fájl | Pozíció | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 sor a készletben (0,000 mp)

A mysql konzolkonzol szolga szerveren tegye a következőket:

MariaDB [(nincs)]> STOP SLAVE;

A lekérdezés rendben, 0 sor érintett, 1 figyelmeztetés (0,000 mp)

MariaDB [(nincs)]> MASTER VÁLTOZTATÁSA MASTER_HOST = "IP_master", MASTER_USER = "test_master", MASTER_PASSWORD = "test_master", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 664;

A lekérdezés rendben, 0 sor érintett (0,014 mp)

MariaDB [(nincs)]> SLAVE START;

Meglévő MariDB-adatbázis replikációjának beállításakor, a replikáció megkezdése előtt az adatbázist olvasási módba kell helyezni, hogy a binlog-fájl nem frissül.

SET GLOBAL read_only = BE;

Ugyanakkor létre kell hoznia egy adatbázis-tárolót is, és felhasználnia kell azt a kezdeti adatok betöltésére a slave kiszolgálón a MariaDВ-be..

A szolga állapotának ellenőrzése: MUTASD A SZLOVÁLIS ÁLLAPOT \ G;

Hozzon létre egy adatbázist a Masterről:

MariaDB [(nincs)]> adatbázis létrehozása master_hello;

A lekérdezés rendben, az 1 sor érintett (0,001 mp)

Ellenőrizzük, hogy az adatbázist a Slave szerveren is létrehoztuk-e:

MariaDB [(nincs)]> adatbázisok megjelenítése;

+--------------------+ | Adatbázis | + -------------------- + | információ_schema | | master_hello | | master_test | | mysql | | performance_schema | | teszt | + -------------------- + 6 sor a készletben (0,001 mp) 

Készítsünk egy adatbázist a Slave-en, és ellenőrizzük, hogy az adatok átkerültek-e Mesterünkbe.

Mint láthatja, létrehoztuk az alapot, és a Slave-on van. Ellenőrizze, hogy megjelent-e a Mester. Nincs ott. A szolga és a master közötti replikáció nem megy.

Vagyis a MariaDB replikáció csak egy módon működik. Végezzünk el egy újabb ellenőrzést a master_hello adatbázis törlésével a Slave szerverről:

És ellenőrizze, hogy visszavonult-e a főkiszolgálón:

Mint látjuk, minden rendben van, és a bázis a helyén van.

Ui A replika beállításakor hibákat tapasztalhat, ezek közül a leggyakoribb a tűzfal. Alapértelmezés szerint a Centos 7 telepített egy tűzfalat, amelynek zárt 3306-os portja van, amelyet a MariaDB használ. Vagy megnyithatja ezt a portot az iptables segítségével, vagy letilthatja a tűzfalat (rossz lehetőség).

Alapértelmezés szerint a my.cnf konfigurációban a bind-address paraméter megadja azt az IP-címet, amelyen az adatbázishoz való kapcsolódás várható (bind-address = 127.0.0.1). A helyi és a külső kapcsolatok engedélyezéséhez meg kell szüntetni ezt a sort, és hozzá kell adnia egy iptable-szabályt, amely lehetővé teszi a kapcsolatokat a 3306-os port master / slave kiszolgálójának IP-címéből..

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

A kezdeti beállítás során ilyen problémával találkoztam, és könnyen felismerhető. Ha futtat egy szolga állapot ellenőrzéstMUTASD A SZLOVÁLIS ÁLLAPOT \ G;", egy hibát fog látni:

Összegzésképpen szeretném mondani, hogy hozzáadhat néhány paramétert a my.cnf fájl #replication blokkjának konfigurációjához. Az alábbiakban példákat és rövid leírást adunk az általunk előírt paraméterekről, valamint példákat más, a replikáció beállításához hasznos funkciókról..

szerver-id = 1 - adja meg a kiszolgáló azonosítóját, általában 1-vel kezdődik, de bármilyen számot használhat, a lényeg az, hogy az nem esik egybe más replikációban részt vevő kiszolgálókkal.

report_host = master - általában a szerver gazdaneve regisztrálva van, megadhatja az IP-címet

log_bin = / var / lib / mysql / mariadb-bin - elérési út a napló frissítéséhez

log_bin_index = /var/lib/mysql/mariadb-bin.index - lehetővé teszi, hogy megtudja, melyik napló aktív, és mely naplókat használták korábban.

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

relay_log_index = /var/lib/mysql/relay-bin.index - maguk a replikációs naplók

Milyen más lehetőségeket használhatok? Ha a replikát csak egy vagy több adatbázishoz kell konfigurálnia, akkor add hozzá a következő funkciót:

replicate-do-db = dbname - Ha több adatbázisra van szüksége, sorolja fel vesszővel.

Bármely adatbázis kizárása a replikációból:

binlog-ignore-db = dbname

Szolgáltatási adatbázisok, például:

information_schema, mysql és performance_schema

Bin_log tárolási idő:

expire_logs_days = 10 - ahol 10 a naplók tárolásának napja.

Ezenkívül, ha a főkiszolgáló adatait nem ugyanolyan névvel írják az adatbázisban, akkor a konfigurációs fájlban is konfigurálhatók:

replicate-rewrite-db = dbmaster-> dbname

Ez az összes beállításunk kész. Úgy gondolom, hogy e cikk segítségével könnyen konfigurálhatja a MariaDB adatbázis replikációját mind Master + Master, mind Master + Slave módban.