Replikacja w bazach danych SQL to proces kopiowania danych z jednego źródła do drugiego (lub kilku) i odwrotnie. Dane z jednego serwera bazy danych są stale kopiowane na jeden lub więcej innych serwerów. Za pomocą replikacji możesz rozłożyć obciążenie serwera, zapewnić odporność na awarie i wysoką dostępność baz danych MariaDB. DBMS MariaDB / MySQL pozwala na użycie dwóch rodzajów replikacji bazy danych: Master-Master i Master-Slave. W tym artykule przyjrzymy się, jak skonfigurować oba typy replikacji MariaDB w CentOS 7. Zacznijmy!
Treść
- Zainstaluj MariaDB.
- Skonfiguruj replikację Master-Master w MariaDB
- Skonfiguruj replikację Master-Slave w MariaDB
Zainstaluj MariaDB.
Wcześniej opublikowaliśmy artykuł opisujący proces instalacji MariaDB na CentOS 7. Możesz się z nim zapoznać na https://winitpro.ru/index.php/2019/08/28/ustanovka-i-optimizaciya-mariadb/. Dlatego nie skupimy się na instalacji samej MariaDB, ale od razu przejdziemy do konfiguracji replikacji.
Skonfiguruj replikację Master-Master w MariaDB
W schemacie replikacji Master-Master każdy z serwerów bazy danych MariaDB / MySQL może być używany zarówno do zapisu informacji, jak i do odczytu. Wiele osób uważa, że tego typu replikacja nie jest do końca atrakcyjna. Jeśli jeden z serwerów ulegnie awarii, bardziej prawdopodobne jest, że dane zostaną utracone na innych serwerach głównych. Zazwyczaj ten schemat jest używany, gdy wszystkie serwery muszą zapewniać zarówno zapis, jak i odczyt informacji..
Replikacja oparta jest na specjalnym pliku binlog, w którym serwer główny zapisuje wszystkie operacje na bazie danych. Serwer Slave łączy się z urządzeniem głównym i stosuje polecenia do swoich baz danych.
1. MariaDB: Konfigurowanie pierwszego serwera głównego (Master-1)
Dodaj do naszego pliku konfiguracyjnego my.cnf na pierwszym serwerze MariaDB następujące linie:
#replikacja
server-id = 1
report_host = master
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
przekaźnik_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
restart usługi mariadb
Utwórz użytkownika, aby skonfigurować replikację:
mysql
utwórz użytkownika „test_master” @ „%” zidentyfikowany przez „test_master”;
przyznaj replikację slave na *. * do 'test_master' @ '%';
Aby dodać Slave, potrzebujemy danych bin_log z serwera Master1.
MariaDB [(brak)]> pokaż status mistrza;
+--------------------+----------+--------------+------------------+ | Plik | Pozycja | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000002 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 rząd w zestawie (0,000 s)
To będzie nasz Master-1.
2. MariaDB: Konfigurowanie drugiego serwera głównego (Master-2)
Połącz się z drugim serwerem MariaDB, otwórz plik konfiguracyjny my.cnf i dodaj informacje:
#replikacja
server-id = 2
report_host = master2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
przekaźnik_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
A także utwórz użytkownika na drugim serwerze:
utwórz użytkownika „test_master2” @ „%” identyfikowany przez „test_master2”;
przyznaj replikację slave na *. * do 'test_master2' @ '%';
Bin_log na Master-2:
MariaDB [(brak)]> pokaż status mistrza;
+--------------------+----------+--------------+------------------+ | Plik | Pozycja | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 667 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 rząd w zestawie (0,000 s)
Ustawmy połączenie między serwerami MariaDB w naszym klastrze oprogramowania:
Zatrzymaj niewolnika:
STOP NIEWOLNO;
Dodaj Master-1 do drugiego serwera:
ZMIEŃ MASTER NA MASTER_HOST = „IP_master1”, MASTER_USER = „test_master”, MASTER_PASSWORD = „test_master”, MASTER_LOG_FILE = „mariadb-bin.000002”, MASTER_LOG_POS = 664;
Rozpoczynamy replikację:
ROZPOCZNIJ SLAVE
Jesteśmy połączeni z Master-1 i wykonujemy tę samą procedurę, tylko podając dane naszego drugiego serwera:
STOP NIEWOLNO;
CHANGE MASTER TO MASTER_HOST = "183.219.19.36", MASTER_USER = "test_master2", MASTER_PASSWORD = "test_master2", MASTER_LOG_FILE = "mariadb-bin.000001", MASTER_LOG_POS = 667;
ROZPOCZNIJ SLAVE
Sprawdź status drugiego serwera:
pokaż status slave \ G
Jak widać na zrzutach ekranu, istnieją połączenia na dwóch serwerach, nie obserwuje się błędów.
3. Sprawdź replikację między serwerami MariaDB.
Następnie, aby sprawdzić, czy replikacja między dwoma serwerami MariaDB działa w trybie master + master i czy ogólnie działa, utworzymy nową bazę na Master-1 i utworzymy w niej tabelę.
MariaDB [(brak)]> utwórz bazę danych master1;
Zapytanie OK, problem dotyczy 1 wiersza (0,001 s)
MariaDB [(brak)]> use master1;
Baza danych zmieniona
MariaDB [master1]> CREATE TABLE witaj (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AutorName VARCHAR (100),
-> KLUCZ PODSTAWOWY (AuthorID)
->);
Zapytanie OK, dotyczy 0 wierszy (0,005 s)
Sprawdzamy, czy baza danych automatycznie pojawiła się na drugim wzorcu, a nasza tabela również w niej jest obecna:
MariaDB [(brak)]> pokaż bazy danych;
+--------------------+ | Baza danych | + -------------------- + | schemat_informacyjny | | master1 | | mysql | | performance_schema | + -------------------- + 4 rzędy w zestawie (0,001 s)
MariaDB [(brak)]> use master1;
MariaDB [master1]> pokaż tabele;
+-------------------+ | Tables_in_master1 | + ------------------- + | cześć | + ------------------- + 1 rząd w zestawie (0,000 s)
Baza została stworzona na drugim urządzeniu głównym. W celu pełnego sprawdzenia utwórz tabelę w bazie danych master1 z drugiego serwera głównego i sprawdź, czy są one przesyłane w przeciwnym kierunku.
MariaDB [master1]> CREATE TABLE hello_master1 (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AutorName VARCHAR (100),
-> KLUCZ PODSTAWOWY (AuthorID)
->);
Zapytanie OK, dotyczy 0 wierszy (0,006 s)
Tabela hello_master1 została przekazana do pierwszego serwera:
MariaDB [master1]> pokaż tabele;
+-------------------+ | Tables_in_master1 | + ------------------- + | cześć | | hello_master1 | + ------------------- + 2 rzędy w zestawie (0,000 s)
Jak widać, na Master-1 pojawił się nowy stół. Replikacja działa tak, jak chcieliśmy.
Skonfiguruj replikację Master-Slave w MariaDB
W tej wersji replikacji jeden serwer działa jak serwer podrzędny, do którego dane z urządzenia nadrzędnego są stale przesyłane. Wszystkie zmiany, które zostaną wprowadzone na serwerze Slave, nie zostaną przeniesione do Master. Jest to typ replikacji bazy danych w trybie failover. Najczęściej ta opcja jest używana. W tej konfiguracji zawsze będziesz mieć serwer zapasowy z aktualnymi danymi, a jeśli zawiedzie na serwerach Slave, informacje na serwerze głównym nie zostaną utracone. Możesz także rozłożyć obciążenie bazy danych dla twojego projektu, tak aby aplikacje odczytywały z serwerów Slave, a dane były rejestrowane tylko przez serwer Master. W ten sposób minimalizujesz odpowiedź bazy danych.
Podczas konfigurowania repliki bazy danych MariaDB jako master + slave serwer master (master1) jest konfigurowany jak opisano powyżej.
Przechodzimy do serwera slave. Dodaj linie do my.cnf:
#replikacja
server-id = 2
report_host = slave2
log_bin = / var / lib / mysql / mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
przekaźnik_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
Ponowne uruchamianie mariadbu. Na pierwszym serwerze pobieramy dane bin_log.
MariaDB [(brak)]> pokaż status mistrza;
+--------------------+----------+--------------+------------------+ | Plik | Pozycja | Binlog_Do_DB | Binlog_Ignore_DB | + -------------------- + ---------- + -------------- + - ---------------- + | mariadb-bin.000001 | 664 | | | + -------------------- + ---------- + -------------- + - ---------------- + 1 rząd w zestawie (0,000 s)
Na serwerze podrzędnym w konsoli konsoli mysql wykonaj następujące czynności:
MariaDB [(brak)]> STOP NIEWOLNO;
Zapytanie OK, dotyczy 0 wierszy, 1 ostrzeżenie (0,000 s)
MariaDB [(brak)]> CHANGE MASTER TO MASTER_HOST = „IP_master”, MASTER_USER = „test_master”, MASTER_PASSWORD = „test_master”, MASTER_LOG_FILE = „mariadb-bin.000001”, MASTER_LOG_POS = 664;
Zapytanie OK, dotyczy 0 wierszy (0,014 s)
MariaDB [(brak)]> START SLAVE;
USTAW GLOBALNIE read_only = ON;
W tym samym czasie musisz również utworzyć zrzut bazy danych i użyć go do początkowego ładowania danych do MariaDВ na serwerze podrzędnym.
Sprawdź status Slave: POKAŻ STATUS SLAVE \ G;
Utwórz bazę danych na Master:
MariaDB [(brak)]> utwórz bazę danych master_hello;
Zapytanie OK, problem dotyczy 1 wiersza (0,001 s)
Sprawdzamy, czy baza danych została również utworzona na serwerze Slave:
MariaDB [(brak)]> pokaż bazy danych;
+--------------------+ | Baza danych | + -------------------- + | schemat_informacyjny | | master_hello | | master_test | | mysql | | performance_schema | | test | + -------------------- + 6 rzędów w zestawie (0,001 s)
Utwórzmy bazę danych na Slave i sprawdź, czy dane zostały przesłane do naszego Master.
Jak widać, stworzyliśmy bazę, która jest na Slave. Sprawdź, czy pojawiła się na Mistrzu. Nie ma jej tam. Replikacja z urządzenia slave do master nie przebiega.
Oznacza to, że replikacja MariaDB działa tylko w jeden sposób. Zróbmy jeszcze jedną kontrolę, usuwając bazę danych master_hello z serwera Slave:
I sprawdź, czy przeszła na emeryturę na serwerze głównym:
Jak widzimy, wszystko jest w porządku, a baza jest na miejscu.
P.S. Podczas konfigurowania repliki mogą wystąpić pewne pułapki, z których najczęstszą jest zapora ogniowa. Domyślnie Centos 7 ma zainstalowany firewalld, który ma zamknięty port 3306, z którego korzysta MariaDB. Możesz otworzyć ten port za pomocą iptables lub wyłączyć zaporę ogniową (zła opcja).
Domyślnie w konfiguracji my.cnf parametr bind-address określa adres IP, pod którym oczekiwane są połączenia z bazą danych (adres powiązania = 127.0.0.1
) Aby zezwolić zarówno na połączenia lokalne, jak i zewnętrzne, należy odkomentować tę linię i dodać regułę iptables, która zezwala na połączenia z adresu IP serwera master / slave portu 3306.
iptables -I WEJŚCIE -p tcp -s ip_address_slave_server --port 3306 -j AKCEPTUJ
iptables -I WEJŚCIE -p tcp --port 3306 -j DROP
Podczas początkowej konfiguracji napotkałem taki problem i można go łatwo wykryć. Jeśli uruchomisz sprawdzanie statusu SlavePOKAŻ STATUS SLAVE \ G;”zobaczysz błąd:
Podsumowując, chciałbym powiedzieć, że możesz dodać pewne parametry do konfiguracji bloku #replication w pliku my.cnf. Poniżej podam przykłady i krótki opis parametrów, które przepisaliśmy, a także przykłady innych funkcji przydatnych w konfiguracji replikacji.
server-id = 1
- podaj identyfikator serwera, zwykle zaczynając od 1, ale możesz użyć dowolnego numeru, najważniejsze jest to, że nie pokrywa się on z innymi serwerami, które będą zaangażowane w replikację.
report_host = master
- zazwyczaj nazwa hosta serwera jest zarejestrowana, możesz podać adres IP
log_bin = / var / lib / mysql / mariadb-bin
- ścieżka do aktualizacji dziennika
log_bin_index = /var/lib/mysql/mariadb-bin.index
- pozwala dowiedzieć się, który dziennik jest aktualnie aktywny i które dzienniki były wcześniej używane.
przekaźnik_log = / var / lib / mysql / relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
- same dzienniki replikacji
Jakich innych opcji mogę użyć? Jeśli musisz skonfigurować replikę tylko dla określonej bazy danych lub kilku, dodaj funkcję:
replicate-do-db = nazwa_bazy
- jeśli potrzebujesz kilku baz danych, wypisz je przecinkami.
Wykluczenie jakichkolwiek baz danych z replikacji:
binlog-ignore-db = nazwa_bazy
Bazy danych usług, takie jak:
Information_schema, mysql i performance_schema
Czas przechowywania bin_log:
expire_logs_days = 10
- gdzie 10 to liczba dni, w których dzienniki będą przechowywane.
Ponadto, jeśli dane z serwera głównego nie są zapisane w bazie danych o tej samej nazwie, można to również skonfigurować w pliku konfiguracyjnym:
replicate-rewrite-db = dbmaster-> dbname
To wszystko, nasze ustawienia są gotowe. Myślę, że przy pomocy tego artykułu można łatwo skonfigurować replikację bazy danych MariaDB w trybie Master + Master i Master + Slave.