GNU/Linux >> Znalost Linux >  >> Cent OS

Jak nakonfigurovat replikaci MariaDB na CentOS Linux

Jde o proces vytváření duplicitních verzí DB. Proces replikace je nejen zkopíruje databázi, ale také synchronizuje změny z hlavního na jeden z podřízených. To však neznamená, že podřízené databáze jsou identickou kopií hlavní, protože replikaci lze nakonfigurovat tak, že bude replikováno pouze schéma tabulek, sloupců nebo řádků, tedy částečná replikace. Replikace zajišťuje, že tyto specifické nakonfigurované objekty jsou mezi různými databázemi synchronizovány.

Koncepty replikace Mariadb

Zálohy :Replikaci lze použít pro zálohy DB. Například máte replikaci master -> slave. Pokud dojde ke ztrátě masteru (například selže hdd), můžete obnovit svou db z master.

Škálování :Pro řešení škálování můžete použít replikaci master -> slave. Pokud máte například několik velkých a máte dotaz SQL, pomocí replikace můžete tyto dotazy oddělit pro každý uzly replikace. Zápis SQL by měl být prováděn pouze na hlavním serveru, pro dotazy pouze pro čtení lze použít podřízený server.

Řešení pro šíření :Pro distribuci můžete použít replikaci. Můžete například distribuovat různá prodejní data do různých databází.

Řešení převzetí služeb při selhání :Například máte replikaci master -> slave(1) -> slave(2) -> slave(3). Můžete napsat skript pro hlavní monitorování, pokud hlavní monitor selže, skript může rychle změnit slave(1) nový na master master -> slave(1) -> slave(2) a vaše aplikace bude pokračovat v práci bez výpadků

Jednoduchá schematická demonstrace replikace

Než začnete, dobře víte, co je binární protokol a Ibdata1. binární protokol obsahuje záznam o všech změnách v db, datech a struktuře a také o tom, jak dlouho trvalo provedení každého příkazu. Bin log se skládá z nastavených log souborů a indexu. To znamená, že hlavní příkazy SQL jako CREATE, ALTER, INSERT, UPDATE a DELETE budou vkládány do tohoto protokolu, příkazy jako SELECT nebudou protokolovány. Tyto informace lze zaznamenat do souboru obecného query.log. Jednoduše Ibdata1 je soubor, který obsahuje všechny tabulky a všechny informace o db.

Konfigurace hlavního serveru

Je dobré mít aktualizovaný server

sudo yum install update -y && sudo yum install upgrade -y

Pracujeme na serveru centos 7

sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

Nainstalujte MariaDB

sudo yum install mariadb-server -y

Spusťte MariaDB a povolte její spuštění při spuštění serveru

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Výstup:

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

Zkontrolujte stav MariaDB

sudo service mariadb status

nebo použijte

sudo systemctl is-active mariadb.service

Výstup:

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

Nastavte heslo MariaDB

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

SOME_ROOT_PASSWORD – vaše heslo uživatele root. V mém případě použiji "q" - heslo, pak se pokusím přihlásit:

sudo mysql -u root -pSOME_ROOT_PASSWORD

Výstup:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Napište 'help;' nebo '\h' pro pomoc. Chcete-li vymazat aktuální vstupní příkaz, zadejte '\c'.

Umožňuje vytvořit databázi s tabulkou s některými daty

Vytvořit databázi/schéma

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

Kde:

test_repl - Name of shcema which will be replicated

Výstup:

Query OK, 1 row affected (0.00 sec)

Vytvořit tabulku Osoby

mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

Výstup:

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

Vložte nějaká data

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

Výstup:

Query OK, 5 row affected (0.00 sec)

Zkontrolujte data

mysql> select * from Persons;

Výstup:

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

Nakonfigurujte MariaDB pro replikaci

Budete muset upravit soubor my.cnf na hlavním serveru, abyste povolili binární protokolování a nastavili id ​​serveru. Budu používat textový editor vi, ale použití může použít jakýkoli vhodný pro váš, například nano, joe atd.

sudo vi /etc/my.cnf 

a vložte do config v sekci [mysqld] takové řádky.


log-basename=master
log-bin
binlog-format=row
server_id=1

Výstup:

Poté restartujte MariaDB:

sudo service mariadb restart

Přihlaste se do MariaDB a zkontrolujte binární protokoly:

sudo mysql -u root -pq test_repl

mysql> ZOBRAZIT STAV HLAVNÍHO;

Výstup:

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     3913 |              |                  |
+--------------------+----------+--------------+------------------+

Pamatujte: Hodnoty "Soubor" a "Pozice". TUTO HODNOTU BUDETE POTŘEBOVAT NA SLAVE SERVER

Vytvořit uživatele pro replikaci

mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;

Výstup:

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Zkontrolujte uživatele v db

mysql> select * from mysql.user WHERE user="replication_user"\G;

Výstup:

mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....

Vytvořte DB výpis (snímek všech dat, která budou replikována) hlavní formulář

mysqldump -uroot -pSOME_ROOT_PASSWORD  test_repl > full-dump.sql

Kde:

SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;

Musíte obnovit výpis mysql (full-dump.sql) na podřízeném serveru. Je potřeba pro replikaci.

Konfigurace podřízeného serveru

Všechny tyto příkazy musíte provést na podřízeném serveru

Předpokládejme, že máme čerstvý/aktualizovaný server CentOS 7.x s nejnovějším serverem mariaDB a můžete se přihlásit jako root k serveru maria DB (toto bylo popsáno v první části článku)

Přihlaste se do konzole Maria DB a vytvořte DB

mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;

Obnovte data z hlavního na podřízeném serveru

mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

Kde:

full-dump.sql - its DB Dump that you have create at test server.

Přihlaste se do Maria DB a nastavte replikaci

mysql>     CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;

Kde:

MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master

Spusťte režim slave

mysql> slave start;

Výstup:

Query OK, 0 rows affected (0.00 sec)

Zkontrolujte stav slave

mysql> show slave status\G;

Výstup:

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
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: 4175
Relay_Log_Space: 1089
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)

V tomto kroku by mělo být vše v pořádku a neměly by zde být chyby.

Otestujte replikaci

Na MAIN/MASTER serveru přidejte nějaké entity do DB

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

Poté přejděte na SLAVE server a zkontrolujte replikovaná data

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
...................
|        6 | LastName6 | FirstName6 | Address6 | City6 |
|        7 | LastName7 | FirstName7 | Address7 | City7 |
|        8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+

Můžete vidět, že data jsou replikována na podřízený server. Znamená to, že replikace funguje. Doufám, že se vám článek líbil. Pokud máte nějaké dotazy, dejte nám vědět.


Cent OS
  1. Jak nakonfigurovat LVM na Linux / CentOS / Redhat

  2. Jak nakonfigurovat úložiště YUM v Linux/Centos/Redhat | YUM v Linuxu/Centos/Redhat

  3. Jak nainstalovat a nakonfigurovat docker v Rocky Linux/Centos 8

  1. Jak nainstalovat a nakonfigurovat Redis 6 na Rocky Linux/Centos 8

  2. Jak nainstalovat a nakonfigurovat Ansible na Rocky Linux/CentOS 8

  3. Jak nainstalovat Erlang na Rocky Linux/Alma Linux/CentOS 8

  1. Jak nainstalovat a nakonfigurovat R na RHEL 8 / CentOS 8 Linux System

  2. Jak nainstalovat a nakonfigurovat Mono na Rocky Linux 8 a CentOS 8

  3. Jak nakonfigurovat OpenSSH na CentOS 7