Sådan opsættes MariaDB (Master-Slave) replikering i CentOS/RHEL 7 og Debian 8/9


Selv når nogle it-folk hører sætningen “Database replikation”, forbinder de det ofte med behovet for at have flere kopier af de samme oplysninger for at undgå tab af data i tilfælde af hardwarefejl eller datakorruption. Selvom det er sandt i nogen grad, er der meget mere ved databasereplikering end det almindelige koncept med sikkerhedskopiering af en database og datatilgængelighed.

Blandt andre fordele ved replikering af database i en master-slave-opsætning kan vi nævne:

  1. Sikkerhedskopier kan foretages på slave-serveren uden at påvirke (og blive påvirket af) skrivehandlingerne i masteren.
  2. Ressourceintensive operationer (såsom dataanalyse) kan udføres på slaven uden at påvirke mesterens ydeevne.

I denne artikel vil vi forklare, hvordan man opsætter master-slave-replikering i MariaDB 10.1. I modsætning til klassisk replikering introducerede MariaDB konceptet med globale transaktions-id'er (GTID'er) i v10.0, som gør det muligt at ændre en slave, der nemt kan oprette forbindelse til og replikere fra en anden master. Derudover registreres slavens tilstand på en crash-safe måde (opdateringer til staten udføres i samme transaktion som opdateringerne til dataene).

Hvis du leder efter MySQL-replikering under CentOS/RHEL 6, skal du følge denne vejledning Opsætning af MySQL (Master-Slave) -replikering på CentOS/RHEL 6

Installation af MariaDB 10.1 i CentOS/RHEL 7 og Debian 8/9

Vores testmiljø består af følgende maskiner (begge er CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

For at installere den nyeste version af MariaDB skal vi tilføje deres arkiver til vores servere. Hvis du bruger ældre version af MariaDB siger 5.5, kan du overveje at opgradere til den nyeste 10.1-version ved hjælp af nedenstående artikel.

  1. Opgrader MariaDB 5.5 til MariaDB 10.1

Opret en fil med navnet MariaDB.repo inde i /etc/yum.repos.d med følgende indhold på både Master- og Slave-systemer:

# 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

Gem filen og installer MariaDB på begge servere ved hjælp af yum:

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

Tilføj nøglen til at godkende pakker og MariaDB-arkivet:

# 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'

Bemærk: Erstat distributionsnavn og kodenavn i ovenstående fremhævede linje.

Installer ved hjælp af apt-get-kommandoen:

# apt-get update
# apt-get install mariadb-server

Når du har installeret MariaDB, skal du køre mysql_secure_installation -proceduren på både master og slave. Lad os oprette en testtestdatabase i mastermaskinen.

Opsætning af en prøve MySQL-database på Master

Vi opretter nu på masterserveren Medarbejdere -databasen fra https://github.com/datacharmer/test_db (som giver et datasæt på 4 millioner poster fordelt på seks tabeller) i to enkle trin:

Klon lageret og brug det til at importere eksempeldatabasen til din MariaDB-installation:

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

Konfiguration af MySQL Server på Master

Følg disse trin for at konfigurere masteren:

TRIN 1: Rediger filen /etc/my.cnf . Under afsnittet [mysqld] skal du tilføje følgende fire linjer:

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

og genstart MariaDB:

# systemctl restart mariadb

TRIN 2: Log på MariaDB-serveren som root, opret brugerslave og tildel de nødvendige tilskud:

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;

Den sidste kommando (VIS MASTERSTATUS) returnerer den aktuelle position i binærloggen (de nøjagtige koordinater, der angiver på præcis, hvilket punkt slaven skal begynde at replikere fra:

TRIN 3: Afslut MariaDB-prompt (med exit; ) og brug følgende kommando til at tage et øjebliksbillede af medarbejdernes database. Når du trykker på Enter, bliver du bedt om at indtaste adgangskoden til root, du oprettede tidligere gennem mysql_secure_installation :

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

Når dumpen er afsluttet, skal du oprette forbindelse til databaseserveren igen for at låse op for tabellerne og derefter afslutte:

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

TRIN 4: Kopier dumpen til slaven:

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

TRIN 5: Kør mysql_upgrade -proceduren for at opgradere systemtabellerne (du bliver bedt om at indtaste MariaDB-rodadgangskoden):

# mysql_upgrade -u root -p

TRIN 6: Tillad databasetjenesten gennem firewallen:

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

Lad os nu konfigurere slaven.

Konfiguration af MySQL-server på slave

Følg disse trin for at konfigurere slaven:

TRIN 1: Opret kontoen for at udføre replikationsopgaverne. Opret forbindelse til den lokale MariaDB-server med:

# mysql -u root –p

og indtast den adgangskode, du oprettede tidligere.

TRIN 2: Når du er tilsluttet databaseserveren, skal du oprette brugeren og en tom database og give tilladelser:

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

TRIN 3: Afslut MariaDB-prompten, og indlæs det dump, der er oprettet i masterserveren:

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

TRIN 4: Rediger /etc/my.cnf -filen for at tildele et server-id til slaven under afsnittet [mysqld] . Bemærk, at det skal være et andet heltal end 1, som vi brugte 1 i masteren:

server_id=2
replicate-do-db=employees

Genstart databaseserveren:

# systemctl restart mariadb

TRIN 5: Kør mysql_upgrade -proceduren for at opgradere systemtabellerne (du bliver bedt om at indtaste MariaDB-rodadgangskoden):

# mysql_upgrade -u root -p

TRIN 6: Når dumpen er importeret til slaven, er vi kun få skridt til at begynde at replikere. Log på databasen, og kør følgende kommandoer i MariaDB-prompten. Vær særlig opmærksom på variablerne MASTER_LOG_FILE og MASTER_LOG_POS , som skal matche de værdier, der returneres af SHOW MASTER STATUS i TRIN 2 i "Konfiguration af master" ovenfor.

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;

TRIN 7: Start slaven og kontroller dens status uden at afslutte MariaDB-prompten:

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

Ikke at du har brug for dette nu, men bemærk at du kan stoppe slaven med:

MariaDB [(none)]> STOP SLAVE;

hvis kommandoen SHOW SLAVE STATUS\G; returnerer eventuelle fejl. Brug disse fejl til fejlfinding, og kør derefter START SLAVE; for at teste igen.

Test MySQL/MariaDB database replikering

Lad os tilføje en post til medarbejdertabellen på masterserveren:

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

Kontroller derefter, at denne ændring blev replikeret i slaven:

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

Som du kan se, fungerer replikering korrekt fra master til slave.

Resumé

I denne artikel har vi forklaret, hvordan man installerer den nyeste version af MariaDB i CentOS/RHEL 7 og Debian 8/9, og diskuteret, hvordan man opsætter master-slave-replikering med GTID'er. For mere information kan du henvise til MariaDB-replikeringsvejledningen, og tøv ikke med at kontakte os ved hjælp af nedenstående formular, hvis du har spørgsmål eller kommentarer.