2008-11-07 3 views
6

Ich habe ehrlich triedthisleftandright und immer noch, dass mein Spiegelserver, als Replikations-Slave eingerichtet bleibt noch hinterherhinkt. Die Nutzerbasis meiner App wächst weiter und ich habe jetzt den Punkt erreicht, an dem ich nicht "herunterfahren" kann, um Datenbanken "neu zu synchronisieren" (nicht einmal am Wochenende).Binlog MySQL Replikation ist ein "Bag of Hurt". Gibt es gute Alternativen?

Anyways, meine Frage: Gibt es irgendwelche plausiblen, erschwinglichen, Alternativen zu binlog Replikation? Ich habe zwei Server, also würde ich nicht einen dritten für den Lastenausgleich kaufen, es sei denn, es ist die einzige Option.

Cheers,

/mp

+0

mysql Replikation ist eine stabile, schnelle und schlanke Lösung, im Vergleich zu den Alternativen. booking.com verwendet unglaublich viele mysql-Instanzen und kaskadierte Replikations-Setups von dem, was ich gehört habe. Wenn Ihre Website wirklich zu groß ist, benötigen Sie möglicherweise einen Fachmann, der Sie bei der Fehlersuche unterstützt, wenn Ihr Slave nicht einfach zu klein ist. Ich persönlich habe Setups mit 10k + Abfragen pro Sekunde, die keine Probleme mit der Slave-Verzögerung haben. Möglicherweise sind auch Ihre Replikationseinstellungen nicht perfekt. – sjas

Antwort

10

Ihr Master parallel und Ihr Slave führt seriell ausführt. Wenn Ihr Master 1,5 Stunden Einfügungen/Aktualisierungen/Ausführungen in einer echten Stunde verarbeiten kann, wird Ihr Slave zurückfallen.

Wenn Sie keine Möglichkeiten finden, die Schreibleistung auf Ihrem Slave zu verbessern (mehr Arbeitsspeicher, schnellere Festplatten, entfernen Sie unnötige Indizes), haben Sie eine Einschränkung in Ihrer Anwendungsarchitektur erreicht. Schließlich werden Sie einen Punkt erreichen, an dem Sie die Änderungen nicht so schnell ausführen können, wie Ihr Master sie parallel ausführen kann.

Viele große Websites haben ihre Datenbanken getauscht: Ziehen Sie in Erwägung, Ihren Master + Slave in mehrere Master + Slave-Cluster aufzuteilen. Dann teilen Sie Ihre Kundenbasis über diese Cluster. Wenn ein Slave zurückfällt, ist es Zeit, einen weiteren Cluster hinzuzufügen.

Es ist nicht billig, aber es sei denn, Sie können eine Möglichkeit finden, binlog-Replikation Anweisungen parallel auszuführen, werden Sie wahrscheinlich keinen besseren Weg finden, es zu tun.

Update (2017): MySQL unterstützt jetzt parallel slave worker threads. Es gibt immer noch viele Variablen, die dazu führen, dass ein Slave zurückfällt, aber die Slaves müssen nicht mehr in der seriellen Reihenfolge schreiben. Die Entscheidung, die Commit-Reihenfolge von parallelen Slave-Threads beizubehalten, ist eine wichtige Option, um zu prüfen, ob der genaue Zustand des Slave zu irgendeinem Zeitpunkt kritisch ist.

+0

manchmal müssen Sie nur die harte Wahrheit zu hören – mauriciopastrana

+0

Alle Anwendungen treffen eine Art Skalierung Einschränkung. Die meisten Datenbanken treffen Festplatten-IO. Es klingt, als ob Ihre Replikation ist. Auf der negativen Seite können Sie keine größeren Datenbankserver kaufen, um die Arbeit zu erledigen.Auf der positiven Seite können Sie kleinere Datenbankserver kaufen :) –

0

Das Hinzufügen von Speicher zum Slave würde wahrscheinlich helfen. Wir sind von 32 auf 128 MB gegangen und der Rückstand ist mehr oder weniger verschwunden. Aber es ist weder billig noch wird es in allen Situationen genug sein.

Der Kauf eines dritten Servers wird wahrscheinlich nicht so viel helfen, aber Sie werden höchstwahrscheinlich nur einen anderen verzögernden Slave bekommen.

1

Haben Sie versucht: 1) SET innodb_flush_log_at_trx_commit = 0 2) SET sync_binlog = 0

Beide helfen, Ihren Slave mit einem kleinen Level von zusätzlichem Risiko zu beschleunigen, wenn Sie einen Server-Ausfall haben.

+0

Diese zwei Befehle werden Wunder, Leistung-weise tun. Denken Sie daran, wenn Ihr Master-Server abstürzt, verlieren Sie möglicherweise Transaktionen, die noch nicht vom RAM in die Binlogs auf der Festplatte gefunden wurden. Wenn das in Ordnung ist, sollten Sie glücklich sein. – sjas