Replicatie in MariaDB is in feite het kopiëren van data van de ene database naar de andere, of zelfs naar meerdere databases, zodat alles gesynchroniseerd is – of in ieder geval zou moeten zijn. Als je je ooit hebt afgevraagd waarom je data niet op verschillende servers verschijnt of waarom je back-ups niet werken, dan helpt deze handleiding je verder. Het instellen van replicatie is niet altijd even eenvoudig, vooral niet op CentOS 7, maar als je het goed doet, kan het je leven een stuk makkelijker maken en je load balancing- en failover-opties bieden zonder al te veel gedoe. Eenmaal geconfigureerd, kun je data aanmaken of bijwerken op een primaire server en deze automatisch laten overzetten naar back-ups of andere masters. Zorg er wel voor dat je de basisprincipes goed begrijpt om de klassieke valkuilen zoals firewallproblemen of incompatibele configuraties te vermijden. Er zal wellicht wat vallen en opstaan bij komen kijken, maar dit zou een goede basis moeten bieden voor iedereen die een robuuste MariaDB-configuratie wil opzetten.
Hoe los je MariaDB-replicatieproblemen op in CentOS 7?
Master-master-replicatie configureren — Want waarom niet bijna altijd?
In sommige configuraties kan dit soort zwevende, tweewegsynchronisatie ingewikkeld worden, maar het is enorm handig voor hoge beschikbaarheid. In principe kunnen beide servers lees- en schrijfbewerkingen uitvoeren en fungeren ze als back-up voor elkaar. De sleutel is het correct configureren van het binlog en ervoor zorgen dat elke server een unieke ID heeft. Als je dat niet doet, raakt MariaDB snel in de war – geloof me maar. Zo doe je dat.
Methode 1: Beide masterservers voorbereiden
- Open /etc/my.cnf op elke server en voeg dit gedeelte toe (één voor Master-1, en vervolgens een andere server_id voor Master-2):
#replication server_id = 1 report_host = master log_bin = /var/lib/mysql/mariadb-bin log_bin_index = /var/lib/mysql/mariadb-bin.index relay_log = /var/lib/mysql/relay-bin relay_log_index = /var/lib/mysql/relay-bin.index
Doe dit ook voor de tweede server, maar wijzig server_id naar 2 en pas report_host dienovereenkomstig aan, waarschijnlijk naar het IP-adres of de hostnaam.
service mariadb restart
Soms helpt een herstart, maar meestal is een herstart voldoende. Maak daarna een speciale gebruiker aan voor replicatie:
mysql -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'somepassword';" mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';"
SHOW MASTER STATUS\G
Zoiets als:
File: mariadb-bin.000002 Position: 664
Als uw master deze informatie niet weergeeft, zijn die logboeken mogelijk niet ingeschakeld. Controleer daarom uw configuratie.
Methode 2: Masters verbinden met behulp van binlog-informatie
- Maak nu verbinding met de tweede server en configureer de replicatie zodat deze naar de eerste server verwijst, met behulp van de informatie uit
SHOW MASTER STATUS. - Voer op de tweede server het volgende commando uit:
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='IP_of_Master1', MASTER_USER='repl_user', MASTER_PASSWORD='somepassword', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664; START SLAVE;
Hiermee wordt de replicatieverbinding tot stand gebracht. Herhaal hetzelfde proces op de eerste server, maar wijzig de master-informatie zodat deze naar de tweede server verwijst.
Hoe kan ik controleren of de replicatie werkt?
Zodra beide servers de verbinding hebben bevestigd, is het tijd om te testen. Maak een nieuwe database of tabel aan op Master-1:
CREATE DATABASE test_replication; USE test_replication; CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
Controleer of het automatisch verschijnt op Master-2. Wees niet verbaasd als het niet meteen verschijnt; soms treedt er replicatievertraging op, vooral bij intensieve schrijfbewerkingen. Als het er na een tijdje nog steeds niet is, controleer dan de logbestanden SHOW SLAVE STATUS\Gen zoek naar fouten zoals ‘Gestopt’ of andere problemen. Meestal zijn firewallblokkeringen de boosdoener; de standaardpoort 3306 van MariaDB moet op elke node openstaan om dit betrouwbaar te laten werken.
Hoe stel je een klassieke master-slave-relatie in?
Deze modus is wat de meeste mensen bedoelen als ze het hebben over “database back-up maken” en “leesbelasting verdelen”.Je kiest één server als de hoofdschrijver en één of meer als alleen-lezen kopieën. De configuratie voor de slave is vergelijkbaar: stel dezelfde server-ID in, schakel binaire logboeken in en geef aan waar de master zich bevindt. Vergeet niet om dit read_only=ONop de slave in te stellen als je onbedoelde schrijfbewerkingen wilt voorkomen. Het is ook een goede gewoonte om een initiële dump van je database te maken om te voorkomen dat de my.cnf-configuratie in de war raakt bij een upgrade of initiële synchronisatie.
In principe doe je het volgende:
- Bewerk /etc/my.cnf op de slave — zorg ervoor dat server_id uniek is en stel log_bin in.
- Herstart MariaDB en voer vervolgens de volgende opdracht uit:
STOP SLAVE; CHANGE MASTER TO MASTER_HOST='IP_of_Master', MASTER_USER='repl_user', MASTER_PASSWORD='somepassword', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664; START SLAVE;
SHOW SLAVE STATUS\G. Als Slave_IO_Running en Slave_SQL_Running beide “Ja” zijn, is alles in orde.Sommige valkuilen, zoals firewalld dat poort 3306 blokkeert op CentOS, komen vaak voor. Je moet de poort openen als je een externe verbinding wilt – denk daarbij aan de iptables-regels:
iptables -I INPUT -p tcp -s slave_ip --dport 3306 -j ACCEPT
Als je firewalld gebruikt, overweeg dan firewalld-regels, of schakel het in ieder geval tijdelijk uit tijdens de installatie (niet aanbevolen voor de lange termijn!).
Controleren of alles daadwerkelijk werkt.
Breng een wijziging aan op je master – bijvoorbeeld door een database aan te maken, tabellen toe te voegen of gegevens in te voegen – en controleer vervolgens de slave. Als de gegevens verschijnen, is dat geweldig. Zo niet, dan SHOW SLAVE STATUS\Ggeeft de uitvoer aan wat er mis is: fouten, een verbroken verbinding of vertraging. Soms moet je de slave herstarten of de machtigingen aanpassen, vooral als je de waarde van Last_Error ziet. Op sommige machines mislukt deze configuratie de eerste keer, maar werkt het na een herstart of na het aanpassen van de firewallregels ineens wel. Het is een beetje vreemd, maar dat is typisch CentOS.
Samenvatting
- Configureer my.cnf correct met unieke server-ID’s en paden naar binaire logbestanden.
- Maak een speciale replicatiegebruiker aan met de juiste machtigingen.
- Haal de actuele binlog-informatie op van de masterservers.
- Stel de CHANGE MASTER TO-opdrachten zorgvuldig in en verwijs naar de juiste IP-adressen en logbestanden.
- Controleer regelmatig de status van de slave en verhelp eventuele fouten zodra deze zich voordoen.
- Open poort 3306 in je firewall als externe verbindingen niet werken.
Samenvatting
MariaDB-replicatie op CentOS 7 kan soms wat lastig zijn, vooral met firewalls en configuratiebestanden. Maar als je de basis goed hebt ingesteld – server-ID’s, binlogs, gebruikersrechten – is het behoorlijk betrouwbaar. Soms gaat het niet meteen goed, met name door firewallregels of niet-overeenkomende configuraties, maar als het eenmaal werkt, is het de moeite waard. Verwacht wat vallen en opstaan, maar met geduld krijg je een configuratie die niet alleen zichzelf back-upt, maar ook de belasting verdeelt en hoge beschikbaarheid biedt.