Zoeken op website

MariaDB-replicatie (Master-Slave) instellen in CentOS/RHEL 7 en Debian 8/9


Zelfs als sommige IT-mensen de uitdrukking ‘Databasereplicatie’ horen, associëren ze dit vaak met de noodzaak om meerdere kopieën van dezelfde informatie te hebben om gegevensverlies te voorkomen in het geval van hardwarestoringen of gegevensbeschadiging. Hoewel dat tot op zekere hoogte waar is, houdt databasereplicatie veel meer in dan het gebruikelijke concept van het maken van back-ups van een database en de beschikbaarheid van gegevens.

Naast andere voordelen van databasereplicatie in een master-slave-opstelling kunnen we het volgende noemen:

  1. Back-ups kunnen op de slaveserver worden gemaakt zonder de schrijfbewerkingen in de master te beïnvloeden (en erdoor te worden beïnvloed).
  2. Resource-intensieve handelingen (zoals data-analyse) kunnen op de slave worden uitgevoerd zonder de prestaties van de master te beïnvloeden.

In dit artikel leggen we uit hoe je master-slave-replicatie instelt in MariaDB 10.1. In tegenstelling tot de klassieke replicatie heeft MariaDB in v10.0 het concept van Global Transaction IDs (GTIDs) geïntroduceerd, waarmee een slave naar maak eenvoudig verbinding met en repliceer vanaf een andere master. Bovendien wordt de status van de slave crashveilig vastgelegd (updates van de status gebeuren in dezelfde transactie als de updates van de data).

Als u op zoek bent naar MySQL-replicatie onder CentOS/RHEL 6, volgt u deze handleiding MySQL (Master-Slave)-replicatie instellen op CentOS/RHEL 6

MariaDB 10.1 installeren in CentOS/RHEL 7 en Debian 8/9

Onze testomgeving bestaat uit de volgende machines (beide zijn CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Om de nieuwste versie van MariaDB te installeren, moeten we hun repository's aan onze servers toevoegen. Als je een oudere versie van MariaDB gebruikt, bijvoorbeeld 5.5, overweeg dan om te upgraden naar de nieuwste versie 10.1 met behulp van onderstaand artikel.

  1. Upgrade MariaDB 5.5 naar MariaDB 10.1

In CentOS/RHEL

Maak een bestand met de naam MariaDB.repo binnen /etc/yum.repos.d met de volgende inhoud op zowel Master als Slave< systemen:

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

Sla het bestand op en installeer MariaDB op beide servers met behulp van yum:

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

In Debian/Ubuntu

Voeg de sleutel toe om pakketten en de MariaDB-repository te authenticeren:

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'

Opmerking: Vervang distributie naam en codenaam in de hierboven gemarkeerde regel.

Installeer met de opdracht apt-get:

apt-get update
apt-get install mariadb-server

Nadat u MariaDB heeft geïnstalleerd, voert u de mysql_secure_installation procedure uit op zowel de master als de slave. Laten we een voorbeeldtestdatabase opzetten op de mastermachine.

Een voorbeeld van een MySQL-database opzetten op Master

We zullen nu op de hoofdserver de database Employees van https://github.com/datacharmer/test_db opzetten (die een dataset van 4 levert miljoen records verdeeld over zes tabellen) in twee eenvoudige stappen:

Kloon de repository en gebruik deze om de voorbeelddatabase naar uw MariaDB-installatie te importeren:

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

MySQL-server configureren op Master

Volg deze stappen om de master te configureren:

STAP 1: Bewerk het bestand /etc/my.cnf. Voeg onder de sectie [mysqld] de volgende vier regels toe:

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

en start MariaDB opnieuw:

systemctl restart mariadb

STAP 2: Meld u als root aan bij de MariaDB-server, maak de gebruikersslave aan en wijs de benodigde rechten toe:

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;

Het laatste commando (SHOW MASTER STATUS) retourneert de huidige positie in het binaire log (de exacte coördinaten die precies aangeven op welk punt de slave moet beginnen met repliceren:

STAP 3: Sluit de MariaDB-prompt af (met exit;) en gebruik de volgende opdracht om een momentopname te maken van de werknemersdatabase. Wanneer u op Enter drukt, wordt u gevraagd het wachtwoord voor root in te voeren dat u eerder hebt ingesteld via mysql_secure_installation:

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

Nadat de dump is voltooid, maakt u opnieuw verbinding met de databaseserver om de tabellen te ontgrendelen en sluit u vervolgens af:

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

STAP 4: Kopieer de dump naar de slaaf:

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

STAP 5: Voer de mysql_upgrade procedure uit om de systeemtabellen te upgraden (u wordt gevraagd het MariaDB root-wachtwoord in te voeren):

mysql_upgrade -u root -p

STAP 6: Laat de databaseservice door de firewall:

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

Laten we nu de slaaf configureren.

MySQL-server op slaaf configureren

Volg deze stappen om de slave te configureren:

STAP 1: Maak het account aan om de replicatietaken uit te voeren. Maak verbinding met de lokale MariaDB-server met:

mysql -u root –p

en voer het wachtwoord in dat u eerder hebt ingesteld.

STAP 2: Eenmaal verbonden met de databaseserver, maakt u de gebruiker en een lege database aan en verleent u machtigingen:

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

STAP 3: Sluit de MariaDB-prompt af en laad de dump die op de masterserver is gemaakt:

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

STAP 4: Bewerk het /etc/my.cnf bestand om een server ID toe te wijzen aan de slaaf onder de [mysqld] sectie. Houd er rekening mee dat het een ander geheel getal moet zijn dan 1, omdat we 1 in de master hebben gebruikt:

server_id=2
replicate-do-db=employees

Start de databaseserver opnieuw:

systemctl restart mariadb

STAP 5: Voer de mysql_upgrade procedure uit om de systeemtabellen te upgraden (u wordt gevraagd het MariaDB root-wachtwoord in te voeren):

mysql_upgrade -u root -p

STAP 6: Zodra de dump naar de slaaf is geïmporteerd, zijn we nog maar een paar stappen verwijderd van het repliceren. Meld u aan bij de database en voer de volgende opdrachten uit in de MariaDB-prompt. Besteed speciale aandacht aan de variabelen MASTER_LOG_FILE en MASTER_LOG_POS, die moeten overeenkomen met de waarden die worden geretourneerd door SHOW MASTER STATUS in STAP 2 van 'De master configureren' boven.

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;

STAP 7: Start de slave en controleer de status ervan zonder de MariaDB-prompt te verlaten:

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

Niet dat je dit nu nodig hebt, maar let op: je kunt de slaaf tegenhouden met:

MariaDB [(none)]> STOP SLAVE;

als de opdracht SHOW SLAVE STATUS\G; fouten retourneert. Gebruik deze fouten om problemen op te lossen en voer vervolgens START SLAVE; uit om opnieuw te testen.

Test MySQL/MariaDB-databasereplicatie

Laten we een record toevoegen aan de tabel werknemers op de hoofdserver:

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

Controleer vervolgens of deze wijziging in de slaaf is gerepliceerd:

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

Zoals u kunt zien, werkt de replicatie correct van master naar slave.

Samenvatting

In dit artikel hebben we uitgelegd hoe je de nieuwste versie van MariaDB in CentOS/RHEL 7 en Debian 8/9 installeert, en besproken hoe je master-slave-replicatie met GTID's instelt. Voor meer informatie kunt u de MariaDB-replicatiehandleiding raadplegen en aarzel niet om contact met ons op te nemen via het onderstaande formulier als u vragen of opmerkingen heeft.