Wie schnell ist die MySQL-Replikation?


19

Ich erwäge, die Replikation unserer MySQL-Datenbank einzurichten, um lokale Slaves in jeder unserer Niederlassungen zu haben, während der Master im Hauptbüro die Anwendungsleistung (erheblich) in unseren Niederlassungen verbessern soll.

Die Datenbank selbst ist nicht so groß (<1 GB), aber ich frage mich; In Anbetracht von 200-300 Datensatzaktualisierungen pro Minute: Wie schnell ist die Replikation? (vorausgesetzt, zuerst eine generische 5-MB-DSL-Verbindung, ggf. schneller - versuchen, die Kosten so niedrig wie möglich zu halten, aber das Geld ist für mehr da)

Werden ganze Tabellen in Stapeln repliziert? Wird die Replikation bei Bedarf durchgeführt, während jeder Datensatz in einer Tabelle aktualisiert wird (in den Dokumenten sehe ich, dass er konfigurierbar ist)?

Anmerkungen:

  • Ich denke, 1 Master, 2 Slaves (2 Zweigstellen für jetzt) ​​wie in den Dokumenten hier eingerichtet, außer dass es eine App ist, kein Web-Client
  • Jedes Update, das auf dem Master durchgeführt wird, muss innerhalb von <10 Minuten auf die anderen Slaves repliziert werden.
  • All dies setzt voraus, dass ich unseren ORM (DevExpress XPO) mit dem Konzept des Lesens vom Slave und des Schreibens an den Master glücklich machen kann.

Antworten:


21

Die MySQL-Replikation erfolgt so zeitnah wie möglich, begrenzt durch Festplatten- und Netzwerk-E / A. Die Slaves öffnen dem Master einen Socket, der offen gehalten wird. Wenn eine Transaktion auf dem Master stattfindet, wird sie im Binlog aufgezeichnet und auf dem Slave (den Slaves) einfach wiedergegeben. Wenn der Socket zwischen Master und Slave unterbrochen wird, wird das Binlog bei der nächsten erfolgreichen Verbindung für den Slave wiedergegeben.

Die Multi-Master-Replikation bewirkt dasselbe, jedoch in beide Richtungen.

Einige grundlegende Berechnungen helfen Ihnen dabei, den Bandbreitenbedarf besser zu bestimmen.

Average transaction size * number of slaves * updates/minute = bandwidth needed

Hoffe das hilft.


4

Die Replikation auf der Slaveseite wird von zwei unabhängigen Threads ausgeführt.

  • Der Protokollleseprozess, der eine Verbindung zum Master herstellt, empfängt jede Datenänderungsanweisung und schreibt sie in das Relaisprotokoll.
  • Der SQL Writer-Prozess, der neue Elemente aus dem Relay-Protokoll entnimmt, schreibt die Anweisungen in der Slaves-Datenbank fest und bewegt dann den Slave-Zeiger über diese Anweisung hinaus, um den Empfang der Abfrage anzuzeigen.

Die Replikationswartezeit wird durch die E / A begrenzt, zum einen durch die E / A in der Slave-Datenbank, um die Transaktionen aus dem Relay-Protokoll (das möglicherweise komplexe SQL-Abfragen umfasst) anzuwenden, und zum anderen durch die E / A auf dem Master, um das Binlog zu lesen und an jeden Slave zu senden.

Die MySQL-Replikation erhöht die Leseabfragekapazität, erhöht jedoch nicht die Leistung beim Schreiben von Abfragen. Diese Leistung wird mit der Geschwindigkeit gesteuert, mit der E / As sowohl auf dem Master als auch auf dem Slave in das Binlog geschrieben werden können


3

Replikation in MySQL ist ziemlich schnell, um die Daten zum Slave zu bringen (schneller, als Sie das UPDATEauf dem Master ausführen können , und in ein anderes Fenster wechseln können, um ein SELECTauf dem Slave auszuführen , wenn(und nur wenn) die Netzwerkverbindungen bestehen und alles in Ordnung ist. Jede Verbindung der DSL-Klasse sollte für den allgemeinen Fall Ihrer normalen kleinen Abfragen in Ordnung sein, aber das Kopieren großer Einfüge- / Aktualisierungsabfragen kann einige Zeit in Anspruch nehmen und bei einem Replikations-Stuffup erneut synchronisiert werden (und MySQL ist sehr anfällig dafür die dauern leider eine weile (kopiere deine gesamte datenbank vom master nochmal). Es gibt Tricks, um die Auswirkung der Resynchronisation auf Ihren Master zu begrenzen, wie das Setzen von MySQL in LVM, damit Sie einen sehr schnellen Lock / Snapshot ausführen und den Inhalt des Snapshots mit dem Slave synchronisieren können, aber letztendlich wird eine Resynchronisation zum Erliegen kommen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.