Vyhledávání na webu

Jak nastavit replikaci MariaDB (Master-Slave) v CentOS/RHEL 7 a Debian 8/9


I když někteří IT lidé slyší frázi „Replikace databáze“, často si to spojují s potřebou mít více kopií stejných informací, aby se předešlo ztrátě dat v případě selhání hardwaru nebo poškození dat. I když je to do určité míry pravda, replikace databáze obsahuje mnohem více než běžný koncept zálohování databáze a dostupnosti dat.

Mezi další výhody replikace databáze v nastavení master-slave můžeme zmínit:

  1. Zálohování lze provádět na podřízeném serveru, aniž by to ovlivnilo (a bylo jimi ovlivněno) operace zápisu na hlavním serveru.
  2. Operace náročné na zdroje (jako je analýza dat) lze provádět na podřízeném zařízení, aniž by to ovlivnilo výkon nadřízeného.

V tomto článku vysvětlíme, jak nastavit replikaci master-slave v MariaDB 10.1. Na rozdíl od klasické replikace MariaDB představila koncept Global Transaction ID (GTIDs) ve v10.0, který umožňuje změnit slave na snadno připojit a replikovat z jiného masteru. Kromě toho se stav podřízeného zařízení zaznamenává způsobem bezpečným při havárii (aktualizace stavu se provádějí ve stejné transakci jako aktualizace dat).

Pokud hledáte replikaci MySQL pod CentOS/RHEL 6, postupujte podle tohoto průvodce Nastavení replikace MySQL (Master-Slave) na CentOS/RHEL 6

Instalace MariaDB 10.1 v CentOS/RHEL 7 a Debian 8/9

Naše testovací prostředí se skládá z následujících počítačů (oba jsou CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Abychom mohli nainstalovat nejnovější verzi MariaDB, budeme muset přidat jejich úložiště na naše servery. Pokud používáte starší verzi MariaDB, řekněme 5.5, zvažte upgrade na nejnovější verzi 10.1 pomocí níže uvedeného článku.

  1. Upgrade MariaDB 5.5 na MariaDB 10.1

V CentOS/RHEL

Vytvořte soubor s názvem MariaDB.repo uvnitř /etc/yum.repos.d s následujícím obsahem na Master i Slave< systémy:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Uložte soubor a nainstalujte MariaDB na oba servery pomocí yum:

yum update && yum install MariaDB-server MariaDB-client

V Debianu/Ubuntu

Přidejte klíč pro ověření balíčků a úložiště MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Poznámka: Nahraďte distribuční name a codename ve zvýrazněném řádku výše.

Nainstalujte pomocí příkazu apt-get:

apt-get update
apt-get install mariadb-server

Jakmile nainstalujete MariaDB, spusťte postup mysql_secure_installation na hlavním i podřízeném počítači, pojďme nastavit ukázkovou testovací databázi na hlavním počítači.

Nastavení ukázkové databáze MySQL na Master

Nyní na hlavním serveru nastavíme databázi Zaměstnanci z https://github.com/datacharmer/test_db (která poskytuje datovou sadu 4 milion záznamů rozmístěných v šesti tabulkách) ve dvou jednoduchých krocích:

Naklonujte úložiště a použijte jej k importu ukázkové databáze do vaší instalace MariaDB:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Konfigurace serveru MySQL na Master

Chcete-li nakonfigurovat master, postupujte takto:

KROK 1: Upravte soubor /etc/my.cnf. V části [mysqld] přidejte následující čtyři řádky:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

a restartujte MariaDB:

systemctl restart mariadb

KROK 2: Přihlaste se k serveru MariaDB jako root, vytvořte uživatelského slave a přidělte potřebná oprávnění:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

poslední příkaz (SHOW MASTER STATUS) vrací aktuální pozici v binárním protokolu (přesné souřadnice, které přesně označují, od kterého bodu by měl slave začít replikaci:

KROK 3: Ukončete výzvu MariaDB (pomocí exit;) a pomocí následujícího příkazu pořiďte snímek databáze zaměstnanců. Když stisknete Enter, budete vyzváni k zadání hesla pro root, které jste dříve nastavili prostřednictvím mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

Po dokončení výpisu se znovu připojte k databázovému serveru, abyste odemkli tabulky, a poté ukončete:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

KROK 4: Zkopírujte výpis do podřízeného:

scp employees-dump.sql [email :/root/ 

KROK 5: Spusťte postup mysql_upgrade pro upgrade systémových tabulek (budete vyzváni k zadání hesla root MariaDB):

mysql_upgrade -u root -p

KROK 6: Povolte databázovou službu přes bránu firewall:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Nyní nakonfigurujeme slave.

Konfigurace serveru MySQL na Slave

Chcete-li nakonfigurovat podřízenou jednotku, postupujte takto:

KROK 1: Vytvořte účet pro provádění úloh replikace. Připojte se k místnímu serveru MariaDB pomocí:

mysql -u root –p

a zadejte heslo, které jste dříve nastavili.

KROK 2: Po připojení k databázovému serveru vytvořte uživatele a prázdnou databázi a udělte oprávnění:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

KROK 3: Ukončete výzvu MariaDB a načtěte výpis vytvořený na hlavním serveru:

mysql -u root -p employees < employees-dump.sql

KROK 4: Upravte soubor /etc/my.cnf a přiřaďte podřízenému serveru ID pod [mysqld] sekce . Všimněte si, že to musí být jiné celé číslo než 1, protože jsme použili 1 v hlavní:

server_id=2
replicate-do-db=employees

Restartujte databázový server:

systemctl restart mariadb

KROK 5: Spusťte postup mysql_upgrade pro upgrade systémových tabulek (budete vyzváni k zadání hesla root MariaDB):

mysql_upgrade -u root -p

KROK 6: Po importu výpisu do podřízeného zařízení zbývá jen několik kroků k zahájení replikace. Přihlaste se k databázi a spusťte následující příkazy ve výzvě MariaDB. Věnujte zvláštní pozornost proměnným MASTER_LOG_FILE a MASTER_LOG_POS, které by se měly shodovat s hodnotami vrácenými SHOW MASTER STATUS v KROKU 2 „Konfigurace hlavního serveru“ výše.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

KROK 7: Spusťte slave zařízení a zkontrolujte jeho stav, aniž byste opustili výzvu MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Ne že byste to teď potřebovali, ale všimněte si, že otroka můžete zastavit pomocí:

MariaDB [(none)]> STOP SLAVE;

pokud příkaz SHOW SLAVE STATUS\G; vrátí nějaké chyby. Použijte tyto chyby k odstranění problémů a poté spusťte START SLAVE; a znovu otestujte.

Otestujte replikaci databáze MySQL/MariaDB

Pojďme přidat záznam do tabulky zaměstnanci na hlavním serveru:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Poté ověřte, že tato změna byla replikována v podřízeném:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Jak vidíte, replikace funguje správně od hlavního k podřízenému.

souhrn

V tomto článku jsme vysvětlili, jak nainstalovat nejnovější verzi MariaDB v CentOS/RHEL 7 a Debianu 8/9, a probrali jsme, jak nastavit replikaci master-slave s GTID. Pro více informací se můžete podívat do MariaDB Replication Guide a v případě dotazů nebo připomínek nás neváhejte kontaktovat pomocí níže uvedeného formuláře.