Beste Lösung für die datenübergreifende MySQL-Master-Slave-Replikation

7

Wir arbeiten an einer neuen Systemarchitektur für unser Unternehmen. Wir haben eine HPC, die in unserem eigenen Rechenzentrum ausgeführt wird, und wir planen unser Front-End- und ein Fallback-System für Amazon Web Service.

Systemarchitektur:

Systemarchitektur

Voraussetzungen:

  • Der HPC-Cluster verfügt über viele Schreibvorgänge
  • Website und API lesen die Daten die meiste Zeit und schreiben selten
  • Der Ping von AWS zu unserem Cluster beträgt ~ 35 ms
  • Wenn unser lokales Rechenzentrum ausfällt, sollte der HPC auf AWS repliziert werden und der MySQL-Slave in den neuen Master umgewandelt werden

Frage:

Was ist die beste Lösung, um die MySQL-Datenbank in einem solchen Setup zu replizieren?

Thomas
quelle

Antworten:

6

Ich habe drei (3) Vorschläge, die Sie vielleicht prüfen möchten ...

VORSCHLAG # 1

Sie können MySQL 5.5 sowohl lokal als auch in AWS verwenden. Sie würden auch die Semisync-Replikation einrichten. Auf diese Weise wird für jede auf dem Master ausgeführte SQL-Anweisung die zuletzt aufgezeichnete SQL-Anweisung an den Slave gesendet.

In meinem letzten Beitrag ( Jul 26, 2012: Replikation der MySQL-Datenbank auf einem anderen VLAN / Subnetz / einer anderen Site ) hatte ich die semisynchrone Replikation über eine geografische Entfernung empfohlen. Interessanterweise weist @AaronBrown experimentell darauf hin, dass eine hohe Latenz die Semisynch-Replikation beeinträchtigen würde ( siehe seinen Blog zu diesem Thema ).

VORSCHLAG # 2

Wenn alle Ihre Daten InnoDB sind, können Sie Percona XtraDB Cluster verwenden (vorzugsweise zwei Slaves in AWS, aber einer würde dies tun). Warum Percona XtraDB Cluster? Sie haben Schreibvorgänge synchronisiert. Ihr einziger großer Engpass wäre ausschließlich die Netzwerkkommunikation (wiederum würde sich eine hohe Latenz nachteilig auswirken).

Hier sind meine früheren Beiträge zur Verwendung von Percona XtraDB Cluster

VORSCHLAG # 3

Wenn Sie die lokale Kopie der Daten jedes Rechenzentrums stärken möchten, würde ich die Verwendung von DRBD vorschlagen, nicht über eine geografische Entfernung, sondern mit einem DRBD-Cluster in jedem Rechenzentrum. In Ihrem Fall müssen Sie mindestens DRBD im lokalen Rechenzentrum haben.

Hier ist mein letzter Beitrag zu diesem Vorschlag:

RolandoMySQLDBA
quelle
Vielen Dank für Ihre Vorschläge. Ich werde versuchen, eine asynchrone Master-Master-Replikation einzurichten, wobei jede Datenbank nur einen Knoten als Master hat (der HPC und das Front-End müssen nicht in dieselben Datenbanken schreiben)
Thomas
Der Typ mit dem Blog in Vorschlag 1 hat für seinen Test nicht mehrere Threads verwendet. An Vorschlag 1 ist nichts auszusetzen, wenn Sie nichts dagegen haben, dass ein Insert Latenz + ms benötigt, um zurückzukehren.
Craftables