Frage

Für mein aktuelles Projekt, das wir eine Dual-Master-Replikationstopologie für einen geographisch getrennten Aufbau der Einrichtung denken; ein db an der Ostküste und die andere db in Japan. Ich bin neugierig, ob jemand versucht hat, das und was es Erfahrung.

Auch ich bin gespannt, was meine andere Optionen sind zur Lösung dieses Problems; wir betrachten Nachrichtenwarteschlangen.

Danke!

War es hilfreich?

Lösung

Nur eine Anmerkung über die technischen Aspekte des Plans: Sie müssen wissen, dass MySQL offiziell nicht Multi-Master-Replikation (nur MySQL Cluster bietet Unterstützung für die synchrone Replikation).

Aber es gibt zumindest eine „Hack“, das macht Multi-Master-Replikation möglich, auch mit einer normalen MySQL-Replikation Setup. Bitte beachten Sie Patrick Galbraith "MySQL Multi-Master-Replikation" für eine mögliche Lösung. Ich habe keine Erfahrung mit diesem Setup, so dass ich es nicht wagen, zu beurteilen, wie möglich dieser Ansatz wäre.

Andere Tipps

Es gibt mehrere Dinge, die bei Datenbanken geographisch zu replizieren. Wenn Sie aus Performance-Gründen tun dies sind, sollten Sie Ihre Replikationsmodell Ihre Daten sind „schließlich konsistent“ unterstützt, wie es einige Zeit dauern kann, um die Replikation Strom in beide zu bringen oder viele Standorte. Wenn Ihr Durchsatz oder Reaktionszeiten zwischen den Standorten sind nicht gut, aktive Replikation möglicherweise nicht die beste Option sein.

Einrichten von MySQL als Dual-Master nicht in dem richtigen Szenario richtig gemacht wirklich gut funktionieren. Aber ich bin nicht sicher, dass es sehr gut in Ihrem Szenario paßt.

Vor allem in mysql Dual-Master-Setup ist wirklich ein Ring-Setup. Server A als Master of B definiert, während B zur gleichen Zeit wie der Master von A definiert ist, so dass beiden Server fungieren sowohl als Master und Slave. Die Replikation funktioniert durch einen binären Protokollversand der SQL-Anweisungen enthält, die der Slave einfügt, wenn es für richtig hält, die in der Regel sofort ist. Aber wenn man es mit den lokalen Einfügungen sind Hämmern, wird es eine Weile dauern, um aufzuholen. Die Slave-Einfügungen sind sequenzielle durch die Art und Weise, so dass Sie keinen Nutzen von mehreren Kernen usw. erhalten

Die primäre Verwendung von Dual-Master mysql ist die Redundanz auf der Server-Ebene hat mit automatischen Failover (oft mit Heartbeat auf Linux). Ohne mysql-Cluster (aus verschiedenen Gründen), ist dies das einzige nutzbare automatische Failover für mysql. Das Setup für Grund Dual-Master ist leicht zu finden auf google . Der Herzschlag Zeug ist ein bisschen mehr Arbeit. Aber das ist nicht wirklich das, was Sie fragen, da dies wirklich als ein einzelner Datenbank-Server verhält.

Wenn Sie das Dual-Master-Setup, weil Sie immer auf eine lokale Datenbank schreiben wollen (an beide zugleich schreiben), müssen Sie Ihre Anwendung in diesem Sinne schreiben. Sie können nie mit automatischer Erhöhung Werte in der Datenbank haben, und wenn Sie eindeutige Werte haben, müssen Sie sicherstellen, dass die beiden Stellen nie den gleichen Wert schreiben. Zum Beispiel könnten Lage A schreiben ungerade eindeutige Zahlen und die Lage B sogar eindeutige Zahlen schreiben konnte. Der Grund dafür ist, dass Sie nicht garantiert sind, dass die Server synchron zu einem bestimmten Zeitpunkt sind, wenn Sie also eine einzigartige Reihe in A eingefügt haben, und dann eine überlappende einzigartige Reihe in B vor dem zweiten Server aufholt, werden Sie hat ein defektes System. Und wenn etwas zuerst bricht, stoppt das gesamte System.

Um es zusammenzufassen: es ist möglich, aber Sie werden sehr vorsichtig auf Zehenspitzen müssen, wenn Sie Business-Software-Gebäude sind auf dieses.

Aufgrund der Eins-zu-viele-Architektur von MySQL-Replikation, haben Sie mit mehreren Mastern einen Replikationsring haben: das heißt, jeder repliziert von den nächsten in einer Schleife. Für zwei, replizieren sie von einander. Dies wurde von so weit zurück wie v3.23 unterstützt.

In einem frühen Ort, wo ich gearbeitet, wir haben es mit v3.23 mit einer ganzen Reihe von Kunden als eine Möglichkeit, genau zu schaffen, was Sie fragen. Wir verwenden SSH-Tunnel über das Internet, die Replikation zu tun. Es dauerte einige Zeit, es zuverlässig und mehrmals bekommen wir eine binäre Kopie von einer Datenbank zur anderen zu tun hatte (zum Glück, keiner von ihnen waren über 2 GB noch benötigt 24-Stunden-Zugang). Auch die Replikation in v3 war nicht annähernd so stabil wie in v4 aber auch in v5, es wird nur aufhören, wenn es irgendeine Art von Fehler erkennt.

die unvermeidliche Replikation Verzögerung zu empfangen, wir neu strukturiert, dass die Anwendung, damit sie nicht auf AUTOINCREMENT Feldern verlassen haben (und entfernt das Attribut aus den Tabellen). Dies war relativ einfach aufgrund der Datenzugriffsschicht wir entwickelt hatten; anstatt es mysql_insert_id() für neue Objekte verwendet wird, erzeugt er die neue ID ersten und eingefügt es mit dem Rest der Reihe entlang. Wir haben auch Website-IDs implementiert, die wir in der oberen Hälfte der ID gespeichert, weil sie BIGINTs waren. Dies bedeutete auch, wir haben nicht die Anwendung ändern, wenn wir einen Kunden hatte, die die Datenbank in drei Standorten wollten. : -)

Es war nicht zu 100% robust. InnoDB wurde gewinnt nur einige Sichtbarkeit, so dass wir nicht einfach Transaktionen nutzen könnten, obwohl wir es in Betracht gezogen. So gab es Rennen Bedingungen gelegentlich, wenn zwei Objekte versucht, mit der gleichen ID erstellt werden. Dies bedeutete eine gescheitert und wir haben versucht, dass in der App zu melden. Aber es war immer noch ein wichtiger Teil Job von jemandem über die Replikation zu beobachten und Dinge zu reparieren, wenn es bricht. Wichtig ist, dass es zu beheben, bevor wir nicht synchron zu weit gekommen, weil in einigen Fällen die Datenbanken wurden in beide Websites und würden schnell schwierig genutzt werden, um wieder zu integrieren, wenn wir einen wieder aufbauen mussten.

Es war eine gute Übung, ein Teil davon zu sein, aber ich würde es wieder nicht. Nicht in MySQL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top