Ricerca nel sito web

Come impostare la replica MariaDB (Master-Slave) in CentOS/RHEL 7 e Debian 8/9


Anche quando alcuni esperti IT sentono la frase "Replica del database", spesso la associano alla necessità di avere più copie delle stesse informazioni per evitare la perdita di dati in caso di guasto dell'hardware o danneggiamento dei dati. Anche se in una certa misura ciò è vero, nella replica del database c'è molto di più del concetto comune di backup di un database e disponibilità dei dati.

Tra gli altri vantaggi della replica del database in una configurazione master-slave possiamo citare:

  1. I backup possono essere eseguiti sul server slave senza influenzare (e essere influenzati da) le operazioni di scrittura nel master.
  2. Le operazioni ad uso intensivo di risorse (come l'analisi dei dati) possono essere eseguite sullo slave senza influenzare le prestazioni del master.

In questo articolo spiegheremo come impostare la replica master-slave in MariaDB 10.1. A differenza della replica classica, MariaDB ha introdotto il concetto di ID transazione globale (GTID) nella v10.0, che consente di cambiare uno slave in connettersi e replicarsi facilmente da un master diverso. Oltre a ciò, lo stato dello slave viene registrato in modo sicuro contro i crash (gli aggiornamenti allo stato vengono eseguiti nella stessa transazione degli aggiornamenti ai dati).

Se stai cercando la replica MySQL in CentOS/RHEL 6, segui questa guida Configura la replica MySQL (Master-Slave) su CentOS/RHEL 6

Installazione di MariaDB 10.1 in CentOS/RHEL 7 e Debian 8/9

Il nostro ambiente di test è costituito dalle seguenti macchine (entrambe sono CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Per installare l'ultima versione di MariaDB, dovremo aggiungere i loro repository ai nostri server. Se stai utilizzando una versione precedente di MariaDB, ad esempio 5.5, considera l'aggiornamento all'ultima versione 10.1 utilizzando l'articolo seguente.

  1. Aggiorna MariaDB 5.5 a MariaDB 10.1

In CentOS/RHEL

Crea un file denominato MariaDB.repo all'interno di /etc/yum.repos.d con i seguenti contenuti sia su Master che su Slave< sistemi:

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

Salva il file e installa MariaDB su entrambi i server usando yum:

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

In Debian/Ubuntu

Aggiungi la chiave per autenticare i pacchetti e il repository 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'

Nota: sostituisci il nome e il nome in codice della distribuzione nella riga evidenziata sopra.

Installa utilizzando il comando apt-get:

apt-get update
apt-get install mariadb-server

Una volta installato MariaDB, esegui la procedura mysql_secure_installation sia sul master che sullo slave, impostiamo un database di test di esempio nella macchina master.

Configurazione di un database MySQL di esempio su Master

Ora configureremo nel server principale il database Employees da https://github.com/datacharmer/test_db (che fornisce un set di dati di 4 milioni di record distribuiti su sei tabelle) in due semplici passaggi:

Clona il repository e usalo per importare il database di esempio nella tua installazione MariaDB:

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

Configurazione di MySQL Server su Master

Per configurare il master, attenersi alla seguente procedura:

PASSO 1: modifica il file /etc/my.cnf. Nella sezione [mysqld], aggiungi le seguenti quattro righe:

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

e riavviare MariaDB:

systemctl restart mariadb

PASSO 2: Accedi al server MariaDB come root, crea l'utente slave e assegna le autorizzazioni necessarie:

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;

Il comando ultimo (SHOW MASTER STATUS) restituisce la posizione corrente nel log binario (le coordinate esatte che indicano esattamente da quale punto lo slave dovrebbe iniziare a replicare:

PASSO 3: esci dal prompt di MariaDB (con exit;) e utilizza il comando seguente per acquisire un'istantanea del database dei dipendenti. Quando premi Invio, ti verrà richiesto di digitare la password per root che hai impostato in precedenza tramite mysql_secure_installation:

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

Una volta completato il dump, connettersi nuovamente al server del database per sbloccare le tabelle e quindi uscire:

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

PASSO 4: Copia il dump nello slave:

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

PASSO 5: esegui la procedura mysql_upgrade per aggiornare le tabelle di sistema (ti verrà richiesto di inserire la password root di MariaDB):

mysql_upgrade -u root -p

PASSO 6: Consentire il servizio di database attraverso il firewall:

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

Ora configuriamo lo slave.

Configurazione di MySQL Server su Slave

Per configurare lo slave, attenersi alla seguente procedura:

PASSO 1: crea l'account per eseguire le attività di replica. Connettiti al server MariaDB locale con:

mysql -u root –p

e inserisci la password che hai impostato in precedenza.

PASSO 2: Una volta connesso al server del database, crea l'utente e un database vuoto e concedi le autorizzazioni:

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

PASSO 3: esci dal prompt di MariaDB e carica il dump creato nel server master:

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

PASSO 4: Modifica il file /etc/my.cnf per assegnare un ID server allo slave sotto [mysqld]< /codice> sezione. Tieni presente che deve essere un numero intero diverso da 1, poiché abbiamo utilizzato 1 nel master:

server_id=2
replicate-do-db=employees

Riavviare il server del database:

systemctl restart mariadb

PASSO 5: esegui la procedura mysql_upgrade per aggiornare le tabelle di sistema (ti verrà richiesto di inserire la password root di MariaDB):

mysql_upgrade -u root -p

PASSO 6: Una volta importato il dump nello slave, mancano solo pochi passaggi per iniziare la replica. Accedere al database ed eseguire i seguenti comandi nel prompt di MariaDB. Prestare particolare attenzione alle variabili MASTER_LOG_FILE e MASTER_LOG_POS, che dovrebbero corrispondere ai valori restituiti da SHOW MASTER STATUS nello STEP 2 di "Configurazione del master" Sopra.

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;

PASSO 7: avvia lo slave e controlla il suo stato senza uscire dal prompt di MariaDB:

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

Non che tu ne abbia bisogno adesso, ma nota che puoi fermare lo schiavo con:

MariaDB [(none)]> STOP SLAVE;

se il comando SHOW SLAVE STATUS\G; restituisce errori. Utilizza questi errori per risolvere i problemi, quindi esegui START SLAVE; per eseguire nuovamente il test.

Testare la replica del database MySQL/MariaDB

Aggiungiamo un record alla tabella employees nel server principale:

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');

Quindi verifica che questa modifica sia stata replicata nello slave:

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

Come puoi vedere, la replica funziona correttamente da master a slave.

Riepilogo

In questo articolo abbiamo spiegato come installare l'ultima versione di MariaDB in CentOS/RHEL 7 e Debian 8/9 e discusso come impostare la replica master-slave con GTID. Per ulteriori informazioni, potresti fare riferimento alla Guida alla replica di MariaDB e non esitare a contattarci utilizzando il modulo sottostante se hai domande o commenti.