Der beste Weg, um die Replikation von Master zu Multi-Master einzurichten

7

URSPRÜNGLICHE FRAGE: Ich habe mehrere Server, die alle als Master fungieren müssen, als ob einer ausfällt, der nächste Server startet und übernimmt. Ich frage mich nur, wie ich am besten replizieren kann. Alle Server befinden sich in verschiedenen Rechenzentren.

Fragen

  • Wäre es in Ordnung, jeden Server als Master-Master mit dem 'Supermaster' einzurichten?
  • Welche Art von Konflikten hätte ich?
  • Gibt es bessere Möglichkeiten, dies zu tun?

AKTUALISIERTE FRAGE: Wir haben Server auf der ganzen Welt in verschiedenen Rechenzentren und jeder Server benötigt Zugriff auf eine Datenbank. Dies ist normalerweise auf localhost.

Jeder Server muss in der Lage sein, die Datenbank zu aktualisieren, und jeder Server ist so ziemlich ein Spiegel jedes anderen Servers. Diese bleiben alle über einen Server (Supermaster) synchron, mit dem alle kommunizieren können.

Alle Server kommunizieren nur mit Supermaster, sie kennen keinen anderen Server. Der Super-Master selbst ist ein Spiegel der anderen Server, nur mit dem zusätzlichen Service, sie alle zu synchronisieren.

Manchmal ist der Supermaster aus verschiedenen Gründen offline. In diesem Fall fahren die anderen Server wie gewohnt fort, einschließlich Lesen und Schreiben von Daten. Wenn der Supermaster wieder hochfährt, startet er den Synchronisierungsprozess und sortiert und löst Konflikte zwischen den anderen Servern. Wenn dies abgeschlossen ist, haben alle Server einen Spiegel der Daten und sind alle "synchronisiert".

Nachdem ich ein bisschen mehr über die Frage nachgedacht habe, sind meine Fragen:

  • Gibt es eine Möglichkeit, auf jedem Server eine einzige Datenbank zu haben, die auf der ganzen Linie gleich ist, ohne einen einzigen Punkt zu haben, an dem ich die Datenbank wie in einer Sterntopologie aktualisieren kann?
  • Gibt es eine bessere Option, um MySQL für meine Situation auf breiter Front zu replizieren?

Jede Hilfe wird sehr geschätzt.

Elgoog
quelle

Antworten:

8

Es gibt vier (4) Optionen, die Sie kombinieren müssen

Option 1: MySQL in der Sterntopologie

Um das Rad nicht neu zu erfinden, lesen Sie bitte meine früheren Beiträge zu diesem Thema

Option 2: Verwenden Sie DRBD

Option 3: Verwenden Sie die semisynchrone Replikation

Jede Netzwerklatenz kann sich auf das Sammeln von Binärprotokollen auswirken, und der Versand von Einträgen über ein Netzwerk kann ein Engpass sein. Durch die Verwendung der semisynchronen Replikation von MySQL 5.5 können Sie die MySQL Heartbeat-Eigenschaften optimieren, um zu minimieren, dass die Replikation aufgrund einer signifikanten Netzwerklatenz ihren Platz verliert.

Option 4: Zirkuläre Replikation

Wenn Sie mehrere Master haben, ist eine zirkuläre Replikation ein Muss. Es gibt viele Produkte für die zirkuläre Replikation, wie z. B. mysql-mmm (im Kommentar erwähnt), das sich innerhalb der Grenzen eines einzelnen Rechenzentrums hervorragend eignet. Dies ist nur ein Teil Ihres Puzzles, da vier (4) Dinge außerhalb einer nur kreisförmigen Replikation untergebracht werden müssen:

  1. Netzwerk-Latenz
  2. Geogrpahic Entfernung
  3. Redundanz auf Datenträgerebene pro DataCenter (von DRBD verwaltet)
  4. Automatisches Failover des DBVIP-Backbones von DRBD (über ucarp)

VORBEHALT

Dies ist möglicherweise nicht Ihre vollständige Antwort, aber diese Optionen können Ideen liefern, die Sie in verschiedenen Szenarien ausprobieren können. In der Sterntopologie können Sie beispielsweise Folgendes tun:

SZENARIO 1

  • Lassen Sie den DB-Server in einem Rechenzentrum SuperMaster sein, der InnoDB-Daten enthält
  • Haben Sie den Verteilungsmaster im selben Rechenzentrum (nur binäre Protokolle)
  • Lassen Sie alle Slaves vom Verteilungsmaster replizieren

SZENARIO # 2

  • Lassen Sie den DB-Server in einem Rechenzentrum SuperMaster sein, der keine Daten enthält. Dies bedeutet, dass der Supermaster der Verteilungsmaster ist (nur binäre Protokolle).
  • Lassen Sie alle Slaves vom Verteilungsmaster replizieren

SZENARIO # 3

  • Richten Sie in jedem Rechenzentrum in Circular Replication einen Verteilungsmaster ein
  • Verfügen Sie in jedem Rechenzentrum über eine MySQL-Instanz (Local SuperMaster) mit InnoDB als einziger Speicher-Engine
  • Hängen Sie an jeden lokalen SuperMaster zwei oder mehr gelesene Slaves. Jeder gelesene Slave sollte MyISAM als Hauptspeicher-Engine verwenden. Jede MyISAM-Tabelle sollte ROW_FORMAT = FIXED haben, um die Lesegeschwindigkeit um 20-30% zu erhöhen

Was die Möglichkeiten angeht, liegt es an Ihrer Vorstellungskraft und Ihrem Abteilungsbudget.

Links für MySQL und DRBD

DRBD für Redundanz auf Festplattenebene und ucarp für DBVIP Automatic Failover

RolandoMySQLDBA
quelle
Klingt so, als gäbe es ein bisschen zu überlegen. Ich interessiere mich für Option 1 (erster Link) (unter 'Update'). Gibt es im Internet Tutorials, die sich damit befassen, damit ich eine Vorstellung davon bekommen kann, wie es ausführlich gemacht wird?
Elgoog
Auch eine andere Frage könnte ich den Verteilungsmaster im Falle eines Fehlers spiegeln? Mit allen anderen Slaves noch aktiv und Updates werden an den 'Spiegel' DM
gesendet
Dafür ist DRBD gedacht: Zum Spiegeln des MySQL-DB-Ordners für SuperMaster. Sie können auch ein anderes DRBD-Paar einrichten, um den Verteilungsmaster zu spiegeln.
RolandoMySQLDBA
Nachdem ich während des Mittagessens darüber nachgedacht habe, habe ich meine Frage aktualisiert, um die Situation besser widerzuspiegeln. Ob Wetter oder nicht, Ihre Antwort ist immer noch zutreffend. Ich danke Ihnen für Ihre Hilfe und möchte Ihre Gedanken zur Situation einholen.
Elgoog
Elgoog, würden Sie sich für MySQL MMM interessieren? Mithilfe von Skripten wird eine einzelne IP-Adresse als Einstiegspunkt für das Schreiben auf einen verfügbaren MySQL-Server in Ihrem Serverpool erstellt. Hier ist ein Link. Wenn Sie möchten, dass ich eine Antwort mit der Einrichtung bei der Arbeit schreibe, lassen Sie es mich wissen. mysql-mmm.org
Craig Efrein