Von Matthias Jung auf Donnerstag, 17. Dezember 2020
Kategorie: Data Management

MySQL Multi Master Replikation: Niemand kann zwei Herren dienen (Matthäus 6,24)?

Seit der MySQL-Version 5.7 gibt es eine Neuerung im Umfeld der Replikation: Multi Source Replication. In diesem Blog möchten wir Sie kurz darüber informieren, was die Besonderheiten dieses Replikationssetups sind und wie man dieses einrichtet. In unserem Beispiel soll es zwei Master (Port 3306 und 3307) und ein Replikat (Port 3308) geben. 

Globalisierung ist hier ein Segen

Die Voraussetzung für ein solches Setup ist der Einsatz von GTIDs (Globalen Transaktions-IDs). Eine global Transaktions-ID beinhaltet neben einer eindeutigen Transaktions-ID auch immer die UUID des originären Servers (DB), auf dem diese Transaktion durchgeführt wurde. GTIDs gibt es bei MySQL ab der Version 5.6

Mehr dazu unter: https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-concepts.html

Die Nutzung von GTIDs und ein paar weitere grundlegende Einstellungen sind bei den aktuellen Releases (wir haben mit der Version 8.0.19 getestet) so eingestellt, dass man direkt loslegen kann.

In unserem Beispielsetup haben wir drei Datenbankserver auf einem Host:

Vorbereitung ist alles.

Zunächst legen wir auf den beiden (!) Master-Systemen einen Replikations-User an:

Zusätzlich erstellen wir Sicherungen von den beiden zu replizierenden Datenbanken:

Diese Dumps beinhalten den Zeitpunkt des Backups in Form einer GTID. Diese wird aus den Backups ermittelt und gespeichert (notiert):

Zusätzlich wird die Backup-Datei so überarbeitet, dass die entsprechende SET-Anweisung zum automatischen Setzen der GTID auf dem Replikat entfernt wird:

Nun werden auf dem Replikat-Server (3308) beide Backups der jeweiligen Master-Datenbanken eingespielt.

Nach der Pflicht kommt die Kür

Nun können wir mit dem Einrichten der eigentlichen Replikation beginnen. Dazu werden auf dem Replikat (3308) die GTIDs der beiden Master-Systeme konfiguriert:

Im Anschluss daran werden zwei Replikations-Channels deklariert und Filter eingerichtet von welchem Master welche Daten repliziert werden sollen:

Der Filter sorgt dafür, dass nur die Tabellen aus der Datenbank „db3306" über den entsprechenden Kanal übertragen werden. Für den zweiten Master wird eine dementsprechende Konfiguration erzeugt.

Mittels des Kommandos „start slave" werden dann beide Channels aktiviert. Natürlich kann man die Channels auch getrennt starten und stoppen:

Das Monitoring der Replikation und der Channels kann über das althergebrachte „show slave status"-Kommando oder über entsprechende Views im „performance_schema" erfolgen:

Gib deinen HTML Code hier ein...

Fazit

Wir hoffen, dass wir einen kurzen Überblick über das Thema Multi-Master-Replikation geben konnten. Die Einrichtung einer solchen Replikation ist recht einfach und dennoch sehr nützlich. Eine umfangreiche Dokumentation inkl. eines Beispielsetups finden Sie unter: https://dev.mysql.com/doc/refman/8.0/en/replication-multi-source.html

Natürlich stehen auch wir rund um Ihre Fragen zum Thema MySQL zur Verfügung. Sprechen Sie uns an.

Kommentare hinterlassen