Skalierungslösungen für MySQL (Replikation, Clustering)
In der Start arbeite ich an überlegen wir nun, Skalierung Lösungen für unsere Datenbank. Dinge, die etwas verwirrend (für mich zumindest) mit MySQL, die die MySQL cluster, Replikation und MySQL cluster Replikation (ab ver. 5.1.6), ist eine asynchrone version des MySQL-cluster. Das MySQL-Handbuch beschreibt einige der Unterschiede in Ihrer cluster-FAQ, aber es ist schwer zu ermitteln, aus, wenn eine oder die andere.
Ich würde schätzen, dass jede Beratung von Menschen, die vertraut sind mit den unterschieden zwischen denjenigen, die Lösungen und was sind die vor-und Nachteile, und wenn Sie tun, Sie empfehlen die Verwendung der einzelnen.
InformationsquelleAutor der Frage Eran Galperin | 2008-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich EINE MENGE zu Lesen über die verfügbaren Optionen. Ich habe auch meine Hände auf High Performance MySQL 2nd edition, die ich sehr empfehlen kann.
Dies ist, was ich haben es geschafft, Stück zusammen:
Clustering
Clustering im Allgemeinen Sinne ist die Verteilung der Last auf viele Server, die erscheinen, um eine externe Anwendung als ein server.
MySQL-NDB-Cluster
MySQL-NDB-Cluster ist eine verteilte in-memory -, shared-nothing-storage-engine mit synchroner Replikation und automatische Daten-Aufteilungen (entschuldigen Sie mich, ich Leihe mir buchstäblich aus der High-Performance-Buch, aber Sie hat es sehr schön dort). Es kann ein high-performance-Lösung für einige Anwendungen, aber auch web-Anwendung im Allgemeinen nicht gut tun.
Das große problem ist, dass über die sehr einfache Abfragen (touch nur eine Tabelle), der cluster wird in der Regel für die Suche nach Daten auf mehrere Knoten, die die Netzwerk-Latenz zu kriechen und deutlich verlangsamen Abschluss Zeit für die Abfragen. Da der Antrag behandelt, der den cluster wie ein computer, es kann nicht sagen, welche Knoten zum abrufen der Daten aus.
Darüber hinaus die in-memory-Anforderung ist nicht praktikabel, für viele große Datenbanken.
Continuent Sequoia
Dies ist eine weitere clustering-Lösung für MySQL, die fungiert als middleware, die oben auf dem MySQL-server. Es bietet synchrone Replikation, load balancing und failover. Es sorgt auch dafür, dass Anfragen immer die Daten aus der aktuellen Kopie, die automatisch mit der Auswahl eines Knoten, der die frischen Daten.
Ich habe einige gute Dinge auf, und insgesamt klingt es ziemlich vielversprechend.
Föderation
Föderation ist ähnlich wie das clustering, also ich zupfte es hier auch. MySQL bietet Föderation über die federated storage engine. Ähnlich wie die NDB-cluster-Lösung, es funktioniert gut mit einfachen Abfragen nur - aber noch schlimmer die cluster für die komplizierten, (da die Netzwerk-Latenz ist viel höher).
Replikation und load-balancing -
MySQL hat die eingebaute Fähigkeit zum erstellen von Repliken einer Datenbank auf verschiedenen Servern. Dies kann für viele Sachen verwendet werden - die Aufteilung der Last zwischen den Servern, hot-backups, Erstellung von test-Servern und failover.
Das grundlegende einrichten der Replikation mit einem master-server-handling meist schreibt, und ein oder mehrere slaves Handhabung liest nur. Eine erweiterte Variante ist, dass der master-master Konfiguration, die es erlaubt, zu skalieren schreibt, als auch von mehreren Servern gleichzeitig schreibend.
Jede Konfiguration hat Ihre vor-und Nachteile, aber es ist ein problem, die Sie alle teilen, ist die Replikation Verzögerung - da die MySQL-Replikation ist asynchron, nicht alle Knoten verfügen über die aktuellsten Daten zu jeder Zeit. Dies erfordert die Anwendung bewusst zu sein, die Replikation und Replikation integrieren-bewusst-Abfragen zu arbeiten, wie erwartet. Für einige Anwendungen könnte dies nicht ein problem sein, aber wenn Sie immer die frischesten Daten werden die Dinge etwas kompliziert.
Replikation erfordert einige load balancing, Aufteilung der Last zwischen den Knoten. Dies kann so einfach wie einige änderungen am Anwendungs-code, oder über eine dedizierte software-und hardware-Lösungen.
Splitter und Aufteilungen
Splitter häufigsten verwendete Ansatz zur scale-Datenbank-Lösungen. Sie teilen die Daten in kleinere Scherben und breitete Sie über verschiedene server-Knoten. Dies erfordert die Anwendung bewusst zu sein, die änderung von Daten, die Speicher, um effizient zu arbeiten, wie es braucht, um zu wissen, wo zu finden die Informationen, die es braucht.
Gibt es die Abstraktion von frameworks zur Verfügung, um den Umgang mit Daten Splitter, wie Hibernate Shards, eine Erweiterung der Hibernate ORM (das ist leider in Java. Ich bin mit PHP). HiveDB ist eine solche Lösung, die auch unterstützt Splitter Ausgleich.
Andere
Sphinx
Sphinx ist eine Volltext-Suchmaschine, die verwendet werden können für weit mehr als einen test sucht. Für viele Abfragen, es ist viel schneller als MySQL (vor allem für die Gruppierung und Sortierung), und können Sie entfernte Systeme Abfragen können parallel und fassen die Ergebnisse - die machen es sehr nützlich bei der Verwendung mit Splitter.
Im Allgemeinen sphinx verwendet werden, sollten mit anderen Skalierung Lösungen, um mehr über die verfügbaren hardware-und Infrastruktur. Der Nachteil ist, dass müssen Sie wieder den code der Anwendung, um bewusst sein, sphinx, Sie Weise zu nutzen.
Zusammenfassung
Skalierung Lösungen unterscheiden sich je nach den Anforderungen der Anwendung, die es braucht. Für uns und für die meisten web-Anwendungen, glaube ich, dass die Replikation (wahrscheinlich multi-master) ist der Weg zu gehen, mit einem load balancer verteilen die Last. Splitter der spezifischen Problemfelder (riesige Tabellen) ist auch ein muss, um in der Lage zu skalieren horizontal.
Bin ich auch zu geben, einen Schuss zu Continuent Sequoia und sehen, ob es wirklich kann was es verspricht, da es sich um die geringste Menge von den Anwendungscode ändern zu müssen.
InformationsquelleAutor der Antwort Eran Galperin
Disclaimer: ich habe nicht verwendet MySQL Cluster, also ich werde nur von dem, was ich gehört habe.
MySQL-Cluster ist ein HA (high availability) - Lösung. Es ist schnell, weil es alle in Erinnerung, aber es ist das wirkliche Alleinstellungsmerkmal ist die Verfügbarkeit. Es gibt keinen single point of failure. Mit der Replikation, auf der anderen Seite, wenn der master ausfällt, haben Sie, um tatsächlich zu wechseln, um das Replikat, und es kann eine kleine Menge von Zeit, nach unten. (obwohl die DRBD-Lösung ist eine weitere alternative, die hohe Verfügbarkeit)
Cluster erfordert, dass die gesamte Datenbank in den Speicher passt. Das bedeutet, dass jede Maschine im cluster haben muss, um genügend Speicherplatz für die gesamte Datenbank. Das ist also keine praktikable Lösung für sehr große Datenbanken (oder zumindest ist es eine sehr teure Lösung).
Ich denke, dass es sei denn HA ist super wichtig (Lesen: wahrscheinlich nicht), es ist mehr Aufwand (und Geld), als es Wert ist. Die Replikation ist meistens der bessere Weg zu gehen.
Edit: ich vergaß zu erwähnen auch, dass Cluster nicht erlauben, foreign keys, und range scans sind langsamer als bei anderen Motoren. Hier ist ein link, der darüber berichtet, Bekannte Beschränkungen von MySQL Cluster
InformationsquelleAutor der Antwort nathan
Es gibt einige gute Gespräche darüber, wie die Leute, die pflegen drupal.org strukturiert Ihre Datenbank-Server:
Beide sind von 2007, also der Clustering-Unterstützung können jetzt stärker, aber zu der Zeit wählten Sie die Replikation.
InformationsquelleAutor der Antwort acrosman
Die kühle Sache über das tun der Replikation ist, dass es einfach ist. Setzen Sie einfach bis zu 2 mysql-Boxen, ändern Sie die Server-id auf die zweite box, und zeigen Sie dann die zweite box an die erste über den change master to-Befehl.
Hier ist der entsprechende sample-slave mein.cnf config
So stellen Sie sicher, dass jeder slave bekommt eine Server-id um 1 erhöht (also das nächste slave-server 3)
einrichten einen Benutzernamen und ein Passwort, das der slave eine Verbindung herstellen können,
Dann laufen
change master to MASTER_HOST = 'x.x.x.x';
ändern master, MASTER_PASSWORD = "xxxxx";
und so weiter.
schließlich führen Sie "start slave;"
Up kommt dein Sklave und startet replizieren. süß nicht wahr!
Dies setzt Voraus, Sie beginnen mit 2 leeren Servern. Dann können Sie dump deiner db in der master-server, und wie es lädt, es wird auch die Last auf dem slave.
Können Sie die slave-status durch ausführen von:
show slave status \G
Viel Spaß mit Ihr.. soooo einfach...
InformationsquelleAutor der Antwort Zak
Die "in-memory" - Einschränkung verhindert, dass uns von MySQL cluster für unsere fast 50 GB an Daten, so verwenden wir DRBD plus linux Heartbeat.
Es ist wie eine Art von raid-array zwischen zwei (oder mehr) Boxen hält, dass die Datenbanken /logs /configs synchron (aber nur auf einem server sein können "live" in einer Zeit,). Failover automatisch erfolgt, verwendet die gleiche IP-Adresse und ist schnell, wie eine mysql neu starten, so, dass ist schon eine gute Lösung für uns.
InformationsquelleAutor der Antwort Brent
Dabei Hohe Verfügbarkeit Studium stieß ich auf viele Lösungen, und wahrscheinlich in unserem Fall, die war mehr write-intensive-system, ich fand DRBD cluster, die besser als der NDB-cluster, da Sie mehr Anzahl der Transaktionen pro Sekunde.
Mysql-Replikation kann Ihnen eine backup-Maschine, die können entweder als Sklave zu Lesen oder kann verwendet werden, im Fall von disaster recovery.
Mit verschiedenen Modi auf Transaktions-management durch DRBD Sie können einige reduzieren, was die Leistung Treffer von device-level-Replikation von Daten über das Netzwerk. Für zuverlässiges system, das sollte nicht verlieren Sie jede Transaktion, im Falle des Scheiterns Verwendung von C-Modus, sonst gehe für B.
Versuchte ich zur Liste einige der learnings habe ich während der Einrichtung des DRBD-cluster http://www.techiegyan.com/?p=132
Es funktioniert wirklich gut auf dedizierte Verbindung für die Replikation, d.h. reserve-separate high-speed-Schnittstellen auf beiden Maschinen nur für drbd-Replikation. Herzschlag kontrollieren können, die cluster gut mit allen Dienstleistungen, die man von einem D. H. IP-Adressen, Partitionen, drbd und mysql.
Bin ich noch zu entdecken, die Master-Master-Konfiguration auf DRBD. Wird als update und wenn ich, um Erfolg zu haben.
Dank.
InformationsquelleAutor der Antwort Adi
in meinen Augen, die Verwirrung, die hier nur schickt mich zurück zu Mnesia. Mit Fragmentierung, erklärenden und pragmatischen Umgang mit Indizes, Standort Transparenz von Datenbank-Repliken von e.t.c
In unserer Einrichtung führen Wir sowohl MySQL Cluster und Mnesia. Unsere Daten irgendwie saisonal. So was passiert, ist, nach einiger Zeit, wir entlasten mnesia von Daten, die nicht mehr verwendet werden und werfen es in MYSQL cluster. Dies hält unsere mnesia effizient. Auch wir haben realisierte Anwendungen in der main-stream-Sprachen (Python, Clojure e.t.c) dass die Verwendung der Daten direkt aus der MySQL.
Kurz gesagt, wir führen mnesia auf der Oberseite des MySQL-Cluster. MySQL Cluster kann die Bearbeitung großer Datenmengen eine Datenbank kann bis zu 50 GB plus. Wir haben mnesia einschalten die Erlang/OTP - Anwendungen. Java - und PHP - Zugriff auf die Daten von mnesia über maßgeschneiderte REST (vor kurzem Sparsamkeit) APIs mit JSON und XML als Formate für den Austausch.
Den data access layer abstrahiert den Zugriff auf Daten in Mnesia und alt geliefert Daten in MySQL Cluster, wenn Sie gebraucht wird. Mnesia ist hier im wesentlichen um die macht Erlang/OTP-Anwendungen.Einmal wird es hogged mit Daten, wir werfen es in MYSQL Cluster. Der data access layer können den Zugriff auf Daten in mnesia und MySQL in eine abstrahierte API für alle Anwendungen.
Was ich hier sagen kann ist, dass Mnesia wurde die beste option für uns. Die Tische sind sehr fragmentiert und indiziert, Abfragen ausführen sehr gut, und die Datenbank repliziert wird über 2 Standorte, verbunden über einen tunnel.
Früher auf, denn wir hatten die Befürchtung, dass mnesia kann nicht verarbeitet werden, wie viele Datensätze wie möglich, da die Tabelle Größenbeschränkung. Aber wir fanden, dass diese Aussage falsch ist. Mit guten tuning (Fragmentierung), unsere mnesia-Datenbanken halten durchschnittlich etwa 250 Millionen Datensätze pro Jahr.
Profitierten wir von Erlang die komplexen Daten-Struktur und die Tatsache, dass Mnesia schlucken kann es unverändert. Die Erlang /OTP-Anwendungen sind sehr effizient, alle anderen apps in älteren Sprachen und mit unserem system wir planen, migrieren Sie alle zu Erlang/OTP-Technologie. Von Erlang wir nahtlos Zugriff auf die Daten von MySQL Cluster und ausführen von Abfragen auf seinen Servern ganz wunderbar, In der Tat, wir haben gefolgert, dass seine Erlang/OTP, die vollständig unter Verwendung der MySQL-server-Ressourcen, aufgrund seiner (Erlang) massive Parallelität.
Mnesia hat für uns sehr gut.Mnesia ist völlig verändert die Art und Weise betrachten wir Datenbanken wegen seiner mitreißenden performance. Unsere Solaris server-CPU-Kerne sind beschäftigt bei einem Durchschnitt von über 48% Auslastung zu Spitzenzeiten.
Berate ich Sie zu prüfen, mnesia und wer weiß, vielleicht beantworten Sie eine Reihe von Ihrer distribution oder Replikation benötigt.
InformationsquelleAutor der Antwort Muzaaya Joshua
Ich habe Sie nicht genutzt, aber von den docs würde ich sagen, dass die Replikation ist die bevorzugte Lösung, wenn die größte Belastung aus der Datenbank Lesen.
InformationsquelleAutor der Antwort Javier
MySQL cluster ist eine seltsame beastie und jedes mal haben wir ausgewertet, es ist entweder durchgeführt, die sehr schlecht oder unzuverlässig.
Es ist schrecklich kompliziert zum einrichten (Sie benötigen mindestens drei Knoten, evtl. mehr). Auch gibt es keine Bestimmung für die clients, die ein Failover, so dass Sie zu tun haben, dass Sie sich selbst (Oder etwas anderes verwenden als proxy etc).
Es ist sehr clever, weil er keine automatische hash-Partitionierung auf die primäre Taste, die erlaubt das skalieren schreibt, und auch, weil es keinen single point of failure.
Aber ich glaube wirklich, es ist besser geeignet für den besonderen Zweck den Fällen, für die es entworfen wurde. Es kann in den meisten Fällen ersetzen Sie eine andere Datenbank-engine (z.B. InnoDB) in Leistung oder features.
InformationsquelleAutor der Antwort MarkR