Hvordan sette opp MariaDB (Master-Slave) replikering i CentOS/RHEL 7 og Debian 8/9


Selv når noen IT-folk hører uttrykket Databasereplikering, forbinder de det ofte med behovet for å ha flere kopier av den samme informasjonen for å unngå tap av data i tilfelle maskinvarefeil eller datakorrupsjon. Selv om det til en viss grad er sant, er det mye mer ved databasereplikering enn det vanlige konseptet med å sikkerhetskopiere en database og datatilgjengelighet.

Blant andre fordeler med databasereplikering i et master-slave-oppsett kan vi nevne:

  1. Sikkerhetskopiering kan gjøres på slaveserveren uten å påvirke (og bli påvirket av) skriveoperasjonene i masteren.
  2. Ressursintensive operasjoner (som dataanalyse) kan utføres på slaven uten å påvirke ytelsen til masteren.

I denne artikkelen vil vi forklare hvordan du setter opp master-slave-replikering i MariaDB 10.1. I motsetning til klassisk replikering, introduserte MariaDB konseptet Global Transaction IDs (GTIDs) i v10.0, som gjør det mulig å endre en slave for å koble til og replikere fra en annen master enkelt. På toppen av det blir statusen til slaven registrert på en krasjsikker måte (oppdateringer til tilstanden gjøres i samme transaksjon som oppdateringene til dataene).

Hvis du leter etter MySQL-replikering under CentOS/RHEL 6, følg denne veiledningen Konfigurer MySQL (Master-Slave)-replikering på CentOS/RHEL 6

Installerer MariaDB 10.1 i CentOS/RHEL 7 og Debian 8/9

Vårt testmiljø består av følgende maskiner (begge er CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

For å installere den nyeste versjonen av MariaDB, må vi legge til lagrene deres på serverne våre. Hvis du bruker eldre versjon av MariaDB, si 5.5, bør du vurdere å oppgradere til siste 10.1-versjon ved å bruke artikkelen nedenfor.

  1. Oppgrader MariaDB 5.5 til MariaDB 10.1

Lag en fil med navnet MariaDB.repo inne i /etc/yum.repos.d med følgende innhold på både master- og slavesystemer:

# 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

Lagre filen og installer MariaDB på begge serverne ved å bruke yum:

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

Legg til nøkkelen for å autentisere pakker og MariaDB-depotet:

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

Merk: Erstatt distribusjonsnavn og kodenavn i den uthevede linjen ovenfor.

Installer med apt-get-kommandoen:

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

Når du har installert MariaDB, kjør mysql_secure_installation-prosedyren på både master og slave, la oss sette opp en prøvetestdatabase i mastermaskinen.

Sette opp en prøve MySQL-database på Master

Vi vil nå sette opp Employees-databasen i hovedserveren fra https://github.com/datacharmer/test_db (som gir et datasett med 4 millioner poster fordelt på seks tabeller) i to enkle trinn:

Klon depotet og bruk det til å importere eksempeldatabasen til MariaDB-installasjonen din:

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

Konfigurere MySQL Server på Master

Følg disse trinnene for å konfigurere masteren:

TRINN 1: Rediger /etc/my.cnf-filen. Under [mysqld]-delen legger du til følgende fire linjer:

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

og start MariaDB på nytt:

# systemctl restart mariadb

TRINN 2: Logg på MariaDB-serveren som root, opprett brukerslaven og tildel de nødvendige tilskuddene:

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 siste kommandoen (SHOW MASTER STATUS) returnerer gjeldende posisjon i den binære loggen (de eksakte koordinatene som indikerer på nøyaktig hvilket tidspunkt slaven skal begynne å replikere fra:

TRINN 3: Avslutt MariaDB-ledeteksten (med exit;) og bruk følgende kommando for å ta et øyeblikksbilde av ansattes database. Når du trykker Enter, vil du bli bedt om å skrive inn passordet for root du satte opp tidligere gjennom mysql_secure_installation:

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

Etter at dumpingen er fullført, kobler du til databaseserveren igjen for å låse opp tabellene og avslutter deretter:

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

TRINN 4: Kopier dumpen til slaven:

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

TRINN 5: Kjør mysql_upgrade-prosedyren for å oppgradere systemtabellene (du vil bli bedt om å angi MariaDB-rotpassordet):

# mysql_upgrade -u root -p

TRINN 6: Tillat databasetjenesten gjennom brannmuren:

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

La oss nå konfigurere slaven.

Konfigurere MySQL Server på Slave

Følg disse trinnene for å konfigurere slaven:

TRINN 1: Opprett kontoen for å utføre replikeringsoppgavene. Koble til den lokale MariaDB-serveren med:

# mysql -u root –p

og skriv inn passordet du konfigurerte tidligere.

TRINN 2: Når du er koblet til databaseserveren, oppretter du brukeren og en tom database, og gir tillatelser:

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

TRINN 3: Avslutt MariaDB-ledeteksten og last dumpen som er opprettet i hovedserveren:

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

TRINN 4: Rediger /etc/my.cnf-filen for å tilordne en server-ID til slaven under [mysqld]-delen. Merk at det må være et annet heltall enn 1, da vi brukte 1 i masteren:

server_id=2
replicate-do-db=employees

Start databasetjeneren på nytt:

# systemctl restart mariadb

TRINN 5: Kjør mysql_upgrade-prosedyren for å oppgradere systemtabellene (du vil bli bedt om å angi MariaDB-rotpassordet):

# mysql_upgrade -u root -p

TRINN 6: Når dumpen er importert til slaven, er vi bare noen få skritt for å begynne å replikere. Logg på databasen og kjør følgende kommandoer i MariaDB-ledeteksten. Vær spesielt oppmerksom på MASTER_LOG_FILE- og MASTER_LOG_POS-variablene, som skal samsvare med verdiene som returneres av SHOW MASTER STATUS i TRINN 2 av Konfigurere masteren 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;

TRINN 7: Start slaven og sjekk statusen uten å gå ut av MariaDB-ledeteksten:

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

Ikke at du trenger dette nå, men merk at du kan stoppe slaven med:

MariaDB [(none)]> STOP SLAVE;

hvis kommandoen SHOW SLAVE STATUS\G; returnerer noen feil. Bruk disse feilene til å feilsøke og kjør deretter START SLAVE; for å teste på nytt.

Test MySQL/MariaDB-databasereplikering

La oss legge til en post i medarbeidertabellen i hovedserveren:

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

Bekreft deretter at denne endringen ble replikert i slaven:

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

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

Sammendrag

I denne artikkelen har vi forklart hvordan du installerer den nyeste versjonen av MariaDB i CentOS/RHEL 7 og Debian 8/9, og diskutert hvordan du setter opp master-slave-replikering med GTID-er. For mer informasjon kan det være lurt å se MariaDB Replication Guide, og ikke nøl med å kontakte oss ved å bruke skjemaet nedenfor hvis du har spørsmål eller kommentarer.