Architektur für hochverfügbares MySQL mit automatischem Failover an verschiedenen Standorten


19

Ich habe nach Hochverfügbarkeitslösungen (HA) für MySQL zwischen Rechenzentren gesucht.

Für Server, die sich in derselben physischen Umgebung befinden, habe ich Dual Master mit Heartbeat (Floating VIP) unter Verwendung eines aktiven passiven Ansatzes bevorzugt. Der Heartbeat erfolgt sowohl über eine serielle Verbindung als auch über eine Ethernet-Verbindung.

Letztendlich ist es mein Ziel, das gleiche Maß an Verfügbarkeit zwischen Rechenzentren aufrechtzuerhalten. Ich möchte ohne manuelles Eingreifen ein dynamisches Failover zwischen beiden Rechenzentren durchführen und trotzdem die Datenintegrität aufrechterhalten.

Es würde BGP an der Spitze geben. Web-Cluster an beiden Standorten, die möglicherweise zwischen beiden Seiten zu den Datenbanken weitergeleitet werden. Wenn die Internetverbindung an Standort 1 unterbrochen wird, werden Clients über Standort 2 zum Webcluster und dann zur Datenbank an Standort 1 weitergeleitet, wenn die Verbindung zwischen beiden Standorten noch besteht.

In diesem Szenario besteht aufgrund der fehlenden physischen Verbindung (serielle Verbindung) eine größere Wahrscheinlichkeit, dass das Gehirn gespalten wird. Wenn das WAN zwischen beiden Standorten ausfällt, landet der VIP an beiden Standorten, an denen eine Vielzahl von unangenehmen Szenarien zu einer Desynchronisierung führen kann.

Ein weiteres potenzielles Problem ist die Schwierigkeit, diese Infrastruktur in Zukunft auf ein drittes Rechenzentrum zu skalieren.

Die Netzwerkschicht ist kein Fokus. Die Architektur ist zu diesem Zeitpunkt flexibel. Wieder ist mein Fokus eine Lösung für die Aufrechterhaltung der Datenintegrität sowie für das automatische Failover mit den MySQL-Datenbanken. Ich würde den Rest wahrscheinlich darum herum entwerfen.

Können Sie eine bewährte Lösung für MySQL HA zwischen zwei physisch unterschiedlichen Standorten empfehlen?

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen. Ich freue mich auf Ihre Empfehlungen.


1
Hallo - hast du schon einen Ansatz gefunden? Es wäre interessant zu hören, wozu Sie sich entschlossen haben. Wir haben das gleiche Problem.
Martin

Ich schätze alle Antworten und die Zeit aller. Leider spricht keine dieser Antworten wirklich die Wurzel der Frage an, dh, wie Menschen die Frage in einer Produktionsumgebung erfolgreich gelöst haben. Wenn ich hier zu einem Schluss komme, werde ich mit Sicherheit meine letzten Gedanken teilen. Bisher scheint dies eine schwerwiegende Einschränkung der Skalierbarkeit von MySQL zu sein.
Warner

Vielleicht bekommen Sie die Schreiblösung nicht, weil Sie die falsche Frage gestellt haben? Welche Daten müssen Sie replizieren und warum? Wenn Sie diese Fragen stellen, können Sie herausfinden, warum Sie die Replikation überhaupt benötigt haben. Split Brain ist nicht nur ein MySQL-Problem, es ist ein Cluster-Konzept.
Der Unix-Hausmeister

Eine Antwort, die ich hier zur Verfügung gestellt habe, enthält einige zusätzliche Informationen: serverfault.com/questions/142683/… Ich werde auch Follow-up bereitstellen, wenn die endgültige Produktionsimplementierung vorliegt .
Warner

Antworten:


9

Sie werden mit dem Problem des "CAP" -Theorems konfrontiert sein. Sie können nicht gleichzeitig Konsistenz, Verfügbarkeit und Partitionstoleranz haben.

DRBD / MySQL HA ist auf die synchrone Replikation auf Blockgeräteebene angewiesen. Dies ist in Ordnung, wenn beide Knoten verfügbar sind oder wenn einer einen vorübergehenden Fehler aufweist, neu gestartet wird usw., und dann zurückkommt. Die Probleme beginnen, wenn Sie eine Netzwerkpartition erhalten.

Netzwerkpartitionen sind äußerst wahrscheinlich, wenn Sie auf zwei Rechenzentren ausgeführt werden. Im Wesentlichen kann keine Partei eine Partition von dem anderen ausfallenden Knoten unterscheiden. Der sekundäre Knoten weiß nicht, ob er übernehmen soll (der primäre ist ausgefallen) oder nicht (die Verbindung ist weg).

Während sich Ihre Computer am selben Standort befinden, können Sie einen sekundären Kommunikationskanal (normalerweise ein serielles Kabel oder ein Crossover-Ethernet) hinzufügen, um dieses Problem zu umgehen. Der sekundäre Computer weiß also, wann der primäre Computer WIRKLICH inaktiv ist und es sich nicht um eine Netzwerkpartition handelt .


Das nächste Problem ist die Leistung. Während DRBD eine anständige ** Leistung liefern kann, wenn Ihre Computer über eine Verbindung mit geringer Latenz verfügen (z. B. Gigabit-Ethernet - aber einige Leute verwenden dedizierte Hochgeschwindigkeitsnetzwerke), dauert das Festschreiben einer Transaktion umso länger, je länger die Latenz des Netzwerks ist *** . Dies liegt daran, dass der sekundäre Server warten muss (wenn er online ist), um alle Schreibvorgänge zu bestätigen, bevor er der App "OK" sagt, um die Haltbarkeit der Schreibvorgänge zu gewährleisten.

Wenn Sie dies in verschiedenen Rechenzentren tun, haben Sie in der Regel mehrere Millisekunden Latenz, auch wenn diese in der Nähe sind.

** Immer noch viel langsamer als ein anständiger lokaler IO-Controller

*** Sie können MyISAM nicht für ein DRBD-System mit hoher Verfügbarkeit verwenden, da es nach einem unsauberen Herunterfahren, das während eines Failovers erforderlich ist, nicht ordnungsgemäß / automatisch wiederhergestellt wird.


Ich schätze deine Zeit und deine Gedanken. Sie haben einige der Probleme, die ich zu vermeiden versuche, sehr gut beschrieben. Idealerweise möchte ich die Vorteile eines aktiven / passiven Dual-Masters für die Wartung und ein schnelles Failover beibehalten und gleichzeitig das Risiko einer Datenbeschädigung minimieren. Ich denke, jemand da draußen hat eine akzeptable Lösung gefunden.
Warner

1
Tatsächlich. Daten sollen nicht zwei Stellen auf einmal sein.
Matt Simmons

3

Wie wäre es mit einem VLAN, um alle Server in den zwei (oder mehr) Rechenzentren miteinander zu verbinden? Sie könnten dann CARP für das automatische Failover verwenden. Verwenden Sie die Datenbankreplikation, um alle Daten synchron zu halten.

Wenn Sie Eigentümer der Rechenzentren sind, können Sie sicherstellen, dass jedes Rechenzentrum über mehrere WAN-Uplinks verfügt.


Das war mein erster Gedanke. Das Einführen von Schicht 2 in einem solchen Ausmaß würde einen Top-down-Ansatz zwischen beiden Standorten erfordern. Andere Serverrollen, die unter Verwendung von LinuxHA redundant sind, müssten ähnliche Implementierungen aufweisen, z. B. die Firewalls. Andernfalls würde es Routingprobleme geben. Letztendlich ist mein Komfortniveau sogar bei mehreren WAN-Uplinks zwischen beiden Standorten wesentlich geringer als bei seriellen und Ethernet-Uplinks. Das ist mehr Risiko, als ich tolerieren kann. Darüber hinaus scheint es eine idealere Lösung zu geben.
Warner

3

Der erste Schritt sollte darin bestehen, Ihre aktuelle HA-Lösung auf eine Lösung zu aktualisieren, die OpenAIS als Ebene für die Clustermitgliedschaft verwendet. Dadurch erhalten Sie viel Flexibilität und können möglicherweise Verbindungen mit geringer Latenz zwischen Standorten herstellen. PaceMaker und RHEL Clustering unterstützen dies.

Für ein automatisches Failover von Rechenzentren benötigen Sie wirklich einen dritten Standort, der als Verbindungsunterbrecher fungiert. Andernfalls können Ihre Standorte nicht zwischen standortübergreifenden Routingproblemen und Ausfall eines Remotestandorts unterscheiden. Microsoft hat einige überraschend gute Webcasts für diesen Bereich:

Windows Server 2008-Clustering mit mehreren Standorten

Offensichtlich ist die genaue Technologie nicht auf die Linux-Domäne abgebildet, aber die Konzepte sind dieselben.


1

Tut mir leid, dies ist ein weiteres Netzwerk, aber ein Gedanke für die Zukunft ...

In dem von Ihnen erwähnten Split-Brain-Szenario könnten Sie auch redundante Verbindungen zwischen zwei Standorten haben, um die Wahrscheinlichkeit zu verringern, dass dies geschieht.


Ich bin da hin und her gegangen. Erstens habe ich es als zu riskant abgeschrieben. Jetzt überlege ich es mir noch einmal. Realistisch gesehen ist das Risiko von Datenkorruption bei zwei vollständig diversifizierten Pfaden ziemlich hoch. Es steht gerade auf meiner Shortlist.
Warner

0

Beachten Sie, dass Sie BGP wahrscheinlich nicht verwenden können, da der kleinste routbare Block 4k, a / 22 ist. Möglicherweise wird eine DNS-basierte Lösung benötigt.


+1 für eine Dosis Realität. Sie können einen gut verwalteten DNS-Dienst wie UltraDNS und dessen Standortüberwachungsdienst "SiteBacker" verwenden, um den besten Weg dorthin zu finden.
Martin

1
Wir haben bereits BGP eingerichtet. Dies liegt außerhalb des Rahmens meiner Frage.
Warner

2
Nein, der kleinste routbare Block ist / 24. Eigentlich nein. Der kleinste physikalisch routbare Block ist / 28, aber Sie werden wahrscheinlich von allen ignoriert. Das kleinste Präfix, das abgehört wird, ist / 24.
Tom O'Connor

0

Es kann schwierig sein, eine richtige Antwort zu geben, abhängig von der Datenmenge, der Anzahl der Server, auf die Sie diese Informationen übertragen möchten usw. Abgesehen davon ist meine Antwort möglicherweise nicht die richtige oder zumindest die gesuchte.

Es gibt keine bewährte Lösung für mehrere Sites mit MySQL. Aber es gibt eine Lösung, die funktioniert. Wie einige wiesen darauf hin, funktioniert DRDB zwar einwandfrei, hat aber je nach Konfiguration seine Grenzen oder mögliche Probleme.

Benötigen Sie jemals einen dritten Standort (ein anderes Rechenzentrum)? Wenn ja, wie viel Zeit und Geld müssen Sie dafür aufwenden?

Wenn Sie jedes Mal, wenn Sie einen Master- / Slave- / DNS-Server, Backups usw. hinzufügen, einen zu verwaltenden Server hinzufügen, wie hoch ist Ihre Verwaltungskapazität in Bezug auf die Anzahl der Server? Wenn Sie diese Zahl definieren können, müssen Sie möglicherweise einige mögliche Lösungen verwerfen und auf die hinarbeiten, die zu Ihren Zahlen passen, damit das Management nicht zu einem Engpass wird.

Angesichts der Tatsache, dass Rechenzentren nicht oft ausfallen, bedeutet mehrere Standorte einen Lastenausgleich und DNS-Hacking. Befindet sich dies im selben Rechenzentrum? Wenn ja, wenn ein Datencenter aus irgendeinem Grund ausfällt, treten Probleme auf, da ein Großteil Ihres DNS und des Lastenausgleichs in diesem Datencenter stattfinden wird.

Möglicherweise müssen Sie also die Situation mit dem gespaltenen Gehirn planen. Für fast jede mögliche Konfiguration ist die Art und Weise, wie eine Spuckgehirnsituation gelöst wird, unterschiedlich. Außerdem benötigt jede Lösung X Zeit.
Es kann auch wesentlich einfacher sein, die Verwendung von 3 Rechenzentren von Anfang an zu planen. Ich bin kein MySQL-Experte, aber ich habe gehört, dass es in der Produktion einfacher war, 3 Master als 2 zu haben, wenn Sie jemals auf ein Problem stießen.

Eine Sache , die Ihnen Last helfen kann , ist Balancing Service durch einen Netzwerkanbieter wie Zeus angeboten, einen Blick hier gibt es wahrscheinlich noch viel mehr bietet diese Art von Service. Ich bin sicher, es hat einen Preis, aber manchmal können Sie einige andere Dinge einschränken.

Viel Glück!


Die Daten sind relativ klein, alles in allem. Ein paar hundert Gigabyte für die Diskussion. Wahrscheinlich die dritte Seite. Bei Bedarf bin ich bereit, die Architektur für eine bessere Lösung zu kompromittieren und später für eine dritte zu überdenken. "Management-Engpass" oder andere administrative Belange fallen nicht in den Geltungsbereich der Frage. Redundanz wird für alle Produktionstechnologien vorhanden sein. Der Schwerpunkt liegt hier auf MySQL.
Warner

0

DRBD ist keine empfohlene Lösung für Remote-Rechenzentren, da dafür Bandbreite erforderlich ist, die die Geschwindigkeit Ihrer Datenbank und Replikation beeinträchtigen kann. Die empfohlene Lösung ist Master-Master-Replikation. Das einzige Problem dabei ist, dass Sie automatisch inkrementierte Felder versetzen müssen.

Wenn Sie eine echte HA-Lösung für MySQL benötigen, müssen Sie sich für MySQL Cluster entscheiden, da DRBD Ihnen bei Fehlern keine Datenintegrität bieten kann.



0

Das Fehlen eines seriellen Kabels zu überwinden ist eigentlich ganz einfach. Sie verwenden ein Gerät aus der dunklen Zeit, das als Modem bezeichnet wird. Sie haben an jedem Ende eines und führen Heartbeat über die PPP-Verbindung aus. Sie können auch Frame Relay verwenden. Beide Methoden beheben alle Probleme, die Sie mit redundanten Pfaden der Ebene 1/2 haben.

Allerdings wird DRBD, das über eine Verbindung mit einer Latenz von mehr als 300 µs (beachten Sie, dass dies 0,3 ms sind) läuft, sehr schnell lächerlich.

Sie sollten die standardmäßige MySQL-Replikation und LinuxHA über PPP & eth verwenden, um die Failovers durchzuführen.

Zumindest habe ich das in der Vergangenheit für Kunden getan.


Interessante Idee. Ich habe DFÜ als Failover auf einem PtP vor verwendet. Ich glaube zwar nicht, dass dadurch das Problem des GAP-Theorems vollständig beseitigt würde, aber ich bin der Meinung, dass dies zusätzlich dazu beitragen könnte, die Wahrscheinlichkeit des Auftretens eines gespaltenen Gehirns zu verringern. Es ist schwierig, dasselbe Maß an Vertrauen zu schaffen, das durch eine direkte physische Verbindung von mehreren Fuß erzeugt wird.
Warner
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.