Jak skonfigurować replikację master-slave MySQL

Jak skonfigurować replikację master-slave MySQL

Replikacja MySQL to proces, w którym serwer główny replikuje swoje dane na jeden lub więcej serwerów niewolników. Może to zapewnić kilka korzyści, takich jak zwiększona dostępność danych, lepsza wydajność i łatwiejsze kopie zapasowe. Jednym z ważnych aspektów replikacji jest bezpieczeństwo, aw tym artykule zbadamy, jak skonfigurować replikację master-slave MySQL za pomocą uwierzytelnienia za pomocą certyfikatów SSL.

Korzystając z certyfikatów SSL, możemy upewnić się, że replikowane dane są bezpieczne i mogą uzyskać dostęp tylko przez autoryzowane strony. Ponadto certyfikaty SSL można również użyć do uwierzytelnienia serwerów głównych i niewolników, zapewniając dodatkową warstwę bezpieczeństwa.

W tym artykule przejdziemy proces konfigurowania konfiguracji replikacji mistrzowskiej z certyfikatami SSL, w tym tworzeniem i instalacją certyfikatów, konfiguracji serwerów głównych i niewolników oraz rozwiązywania problemów typowych problemów.

Korzyści z replikacji MySQL

Główne korzyści z replikacji mistrzów mistrzów MySQL są:

  • Wydajność: Jedną z głównych zalet jest to, że pozwala na odciążenie zapytań tylko do odczytu z głównej bazy danych do niewolników, poprawę wydajności i skalowalności systemu bazy danych. Wynika to z faktu, że główna baza danych jest odpowiedzialna tylko za obsługę pisemnych transakcji, podczas gdy niewolnicy mogą obsługiwać transakcje odczytu.
  • Redundancja i tolerancja błędów: Kolejną zaletą replikacji mistrzów mistrzów MySQL jest to, że zapewnia ona poziom nadmiarowości i tolerancji na usterki. Jeśli główna baza danych spadnie, niewolnicy mogą nadal obsługiwać żądania odczytu, minimalizując przestoje. Dodatkowo, jeśli baza danych niewolników upadnie, można ją zastąpić nowym niewolnikiem, a dane można ponownie zsynchronizować z Master.
  • Kopii zapasowych i odzyskiwania: Do kopii zapasowych i odzyskiwania danych MySQL Master-Slave może być również używane. Regularnie przyjmując kopie zapasowe niewolników, możesz mieć kopię danych, które można użyć w przypadku katastrofy w głównej bazie danych.

Ten artykuł pomoże Ci skonfigurować replikację mistrza niewolników między dwoma serwerami MySQL. Ten samouczek jest testowany na Ubuntu 22.04 Instancja Linux z MySQL 8.0 serwer bazy danych.

Szczegóły konfiguracji:

W celu testowania stworzyłem dwa systemy w mojej sieci lokalnej. Oba system mają różne IP tej samej sieci. Zakładając, że serwery bazy danych głównych i niewolników mają poniższe IPS jak poniżej:

Serwer główny: 11.11.11.11 Server Slave: 22.22.22.22 

Jeśli używasz różnych - różne wersje MySQL na Master i Slave, użyj tego linku, aby sprawdzić kompatybilność.

Krok 1: Utwórz certyfikaty SSL [Master]

Najpierw musisz wygenerować certyfikat CA. Urząd ds. Certyfikatu (CA) to zaufana organizacja zewnętrzna, która wydaje certyfikaty cyfrowe używane do weryfikacji tożsamości i autentyczności podmiotu. Następnie możemy wygenerować certyfikat cyfrowy dla systemu głównego i klienta podpisanego przez certyfikat CA.

  1. Utwórz katalog, aby przechowywać nowe certyfikaty SSL.
    mkdir/etc/mysql/certs  CD/etc/mysql/certs  
  2. Teraz wygeneruj certyfikat, aby użyć jako organu certyfikatu.
    OpenSsl Genrsa 4096> Ca-key.pem  OpenSsl req -new -x509 -nodes -Days 9999 -Key Ca -key.PEM> CA-CERT.pem  
  3. Wygeneruj certyfikat dla serwera głównego MySQL:
    OpenSsl Req -Newkey RSA: 4096 -DAYS 9999 -NODES -KEYOUT SERVER -KEY.PEM> serwer-req.pem  OpenSsl x509 -req -in server -req.PEM -DAYS 9999 -CA CA -CERT.pem -cakey ca -key.PEM -SET_SERIAL 01> SERWER -CERT.pem  
  4. Następnie wygeneruj certyfikat systemu klienta (niewolnika).
    OpenSsl Req -Newkey RSA: 4096 -DAYS 9999 -NODES -KEYOUT KLINT -KEY.PEM> klient-req.pem  OpenSsl x509 -req -in klient -req.PEM -DAYS 9999 -CA CA -CERT.pem -cakey ca -key.PEM -set_serial 01> Client -CERT.pem  

Ważna uwaga: Pamiętaj, aby użyć innego „Nazwa zwyczajowa (fqdn)” dla plików CA niż pliki certyfikatu głównego i klienta.

Krok 2: Zaktualizuj plik konfiguracji MySQL [Master]

Następnie plik konfiguracyjny MySQL (np.:/Etc/mysql/mysql.conf.D/Mysqld.CNF) i dodaj/aktualizuj następujące wpisy:

[mysqld] server-id = 1 binlog-format = mieszany log-bin = mysql-bin innodb_flush_log_at_trx_commit = 1 sync_binlog = 1 ssl ssl-ca =/etc/mysql/certs/ca-cert-cert.PEM SSL-CERT =/ETC/MYSQL/CERTS/SERWER-CERT.PEM SSL-key =/etc/mysql/certs/serwer-key.pem
1234567891011[mysqld] server-id = 1binlog-format = mixedlog-bin = mysql-bininnodb_flush_log_at_trx_commit = 1sync_binlog = 1 sslssl-ca =/etc/mysql/certs/ca-cert.PEMSSL-CERT =/ETC/MYSQL/CERTS/SERWER-CERT.pemssl-key =/etc/mysql/certs/serwer-key.pem

Krok 3: Utwórz użytkownika replikacji [Master]

W tym etapie utworzymy nowego użytkownika na serwerze MySQL, który będzie używany do uwierzytelniania klientów za pomocą usługi głównej. Zaloguj się więc do serwera MySQL na serwerze głównej bazy danych z uprzywilejowanym użytkownikiem. Następnie utwórz nowego użytkownika, który będzie używany do procesu replikacji.

Połącz się z serwerem MySQL, a następnie wykonaj i wykonaj następujące zapytania, aby utworzyć nowego użytkownika i udzielić im dostępu do niewolników.

mysql> Utwórz użytkownika „replikacja”@'22.22.22.22 „Zidentyfikowane przez„ asecurepa $$ w0rd ”wymaga SSL; mysql> Replikacja dotacji niewolnik na *.* Do „replikacji”@'22.22.22.22 '; mysql> uprawnienia spłukające;
123mysql> Utwórz użytkownika „replikacja”@'22.22.22.22 „Zidentyfikowane przez„ asecurepa $$ w0rd ”wymagają SSL; MySQL> Grant Replication Slave na *.* Do „replikacji”@'22.22.22.22 '; mysql> uprawnienia spłukiwane;

Pamiętaj, aby wymienić '22.22.22.22 'z adresem IP instancji niewolników.

Użyj silnego hasła do konta użytkownika.

Krok 4: Zrzucaj bazy danych [Master]

Teraz wyeksportuj wszystkie bazy danych w instancji głównej za pomocą „Mysqldump” pożytek.

mysqldump -uroot -p--Skip-Lock-Stable--Single-Transaction \--Flush-Logs--Hex-Blob--Master-Data = 2 -A | gzip -c> zrzut.SQL.GZ  

Skopiuj plik zrzutu na serwer Slave.

Zrzut SCP.SQL.GZ [chroniony e -mail]:  

Polecenie wyruszy na zdalne hasło użytkownika. Po uwierzytelnianiu użytkownika plik zostanie skopiowany na serwer zdalny w katalogu domowym konta „root”.

Krok 5: Skopiuj pliki certyfikatów SSL [Master]

Skopiuj klucz klienta i certyfikat i pliki certyfikatu CA do instancji niewolnika. Upewnij się, że „/etc/mysql/certs” Katalog istnieje system zdalny.

SCP/etc/mysql/certs/ca-CERT.PEM [e -mail chroniony]:/etc/mysql/certs/  SCP/etc/mysql/certs/client-CERT.PEM [e -mail chroniony]:/etc/mysql/certs/  SCP/etc/mysql/certs/klient.PEM [e -mail chroniony]:/etc/mysql/certs/  

Uwaga: Skonfiguruj klawisze SSH do automatycznego logowania lub użyj haseł do łączenia się z zdalnym.

Krok 6: Przywróć kopię zapasową bazy danych [Slave]

Zaloguj się do serwera klienta replikacji MySQL. Wyodrębnij plik zrzutu za pomocą narzędzia Gunzip. Następnie przywróć bazę danych.

Zrzut gunzip.SQL.GZ  mysql -uroot -p -f < dump.sql  

Następnie sprawdź pozycję pliku dziennika w pliku kopii zapasowej.

zrzut głowicy.SQL -N80 | GREP „master_log_pos”  

Wyjście będzie wyglądało tak:

Wyjście-Zmień Master to Master_log_file = "Mysql-Bin.000007 ", master_log_pos = 154; 

Zanotuj Master_log_file I Master_log_pos Wartości, które zostaną użyte w dalszej części tego artykułu.

Krok 7: Zaktualizuj konfigurację mysql niewolnika [Slave]:

Następnie plik konfiguracyjny MySQL (np.:/Etc/mysql/mysql.conf.D/Mysqld.CNF) i dodaj/aktualizuj wpisy FolloiWng:

[mysqld] server-id = 2 binlog-format = mieszany log-bin = mysql-bin relay-log = mysql-relay-bin-slave-updates = 1 tylko odczyt = 1
1234567[mysqld] server-id = 2binlog-format = mixedlog-bin = mysql-binrelay-log = mysql-relay-binlog-slave-updates = 1read tylko = 1

Krok 8: Rozpocznij replikację niewolników [Slave]

Skonfiguruj instancję Slave z adresem IP instancji głównej wraz z użytkownikiem replikacji, ich hasłem i certyfikatem skopiowanym z instancji głównej. Upewnij się, że zaktualizuj „Mysql-bin.###### '' I „Master_log_pos = ###” Tak samo jak w kroku 6. Dołącz wszystkie zer.

mysql> Zmień Master na master_host = "11.11.11.11 ", master_user = 'replikacja', master_password =" asecurepa $$ w0rd ", master_ssl_ca ="/etc/mysql/certs/ca-CERT.pem ", master_ssl_cert ="/etc/mysql/certs/client-cert.pem ", master_ssl_key ="/etc/mysql/certs/client-key.pem ", master_ssl = 1, master_log_file =" mysql-bin.###### ", master_log_pos = ###;
12345678mysql> Zmień master na master_host = '11.11.11.11 ', master_user = „Replikacja”, master_password =' ​​asecurepa $$ w0rd ', master_ssl_ca ='/etc/mysql/certs/ca-CERT.PEM ', master_ssl_cert ='/etc/mysql/certs/client-cert.pem ', master_ssl_key ='/etc/mysql/certs/client-key.PEM ', master_ssl = 1, master_log_file =' mysql-bin.###### ', master_log_pos = ###;

Na koniec rozpocznij proces replikacji:

mysql> start Slave;
1mysql> start Slave;

To umożliwi i rozpocznie proces replikacji.

Krok 9: Sprawdź replikację

Możesz uruchomić „Pokaż status niewolnika” Zapytanie, aby sprawdzić aktualny status replikacji:

mysql> pokaż status niewolnika \ g
1mysql> pokaż status niewolnika \ g
Wyjście *************************** 1. wiersz *************************.11.11.11 Master_user: Replikacja Master_port: 3306 Connect_retry: 60 Master_log_file: MySQL-Bin.000177 read_master_log_pos: 100443919 przekaźnik_log_file: mysql-relay-bin.000498 Relay_log_pos: 104189538 Relay_master_log_file: mysql-bin.000169 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 104189322 Relay_Log_Space: 972921462 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: Yes Master_SSL_CA_File: /etc/mysql /cert/ca-cert.PEM master_ssl_ca_path: master_ssl_cert:/etc/mysql/certs/client-cert.PEM master_ssl_cipher: master_ssl_key:/etc/mysql/certs/klient.PEM Seconds_behind_master: 13803 Master_ssl_verify_server_cert: no last_io_errno: 0 last_io_error: last_sql_erro: 0 last_sql_error: replice_ignore_server_ids: master_server_id: 1 master_uuid: a548db65-A007-111.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Waiting for dependent transaction to commit Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 Network_Namespace: 1 row w zestawie 1 ostrzeżenie (0.00 s) 

Sprawdź wartość „Sekund_behind_master”. Wartość zero (0) oznacza, że ​​oba systemy są całkowicie synchronizowane.
Mysql Master-Slave Replikacja została pomyślnie skonfigurowana w twoim systemie i jest w trybie pracy. Dziękujemy za skorzystanie z tego samouczka, uprzejmie nie zapomnij podzielić się nim ze znajomymi.

Wniosek

W tym artykule omówiliśmy proces konfigurowania replikacji master-slave MySQL za pomocą uwierzytelnienia za pomocą certyfikatów SSL. Przeszliśmy kroki tworzenia i instalowania certyfikatów, konfigurowania serwerów głównych i niewolników oraz rozwiązywania problemów typowych. Korzystając z certyfikatów SSL, upewniliśmy się, że replikowane dane są bezpieczne i można je uzyskać jedynie autoryzowane strony. Ponadto certyfikaty SSL zostały użyte do uwierzytelnienia serwerów głównych i niewolników, zapewniając dodatkową warstwę bezpieczeństwa. Takie podejście może pomóc organizacjom w poprawie bezpieczeństwa ich środowiska replikacji oraz zapewnienia uczciwości i poufności ich danych.

Ogólnie rzecz biorąc, replikacja master-slave MySQL jest przydatnym narzędziem do poprawy wydajności, skalowalności i tolerancji błędów w systemie bazy danych MySQL. Umożliwia dystrybucję danych na wielu serwerach i może być używany do tworzenia kopii zapasowych i odzyskiwania danych.