2017-01-18 2 views
0

Mein Ziel ist es, ausreichende CPU-Ressourcen der beiden Knoten in meinem Galera-Cluster zu verwenden, so dass mein End-to-End-Stack mehr TPS unterstützen kann. Im Moment ist mein voller Stack durch einen einzigen Mariadb-Server von 36vcpu beschränkt und kann bis 10000 TPS gehen.Beunruhigend niedrige Leistung mit Galera-Cluster

Ich möchte fast 20000 TPS durch die Verwendung von 2 Knoten von DB in einem Galera-Cluster unterstützen (As 1 kann etwa 10000 TPS unterstützen - dies wurde durch CPU eingeschränkt). Zu diesem Zeitpunkt interessiere ich mich nicht für Split-Brain und andere Replikations- oder Grenzlinien-Szenarien. Ich habe es zunächst mit 2 Knoten in Galera mit einem ha-Proxy Load Balancer getestet, aber sehr schlechte Ergebnisse (nur 3500 TPS). Versuche ich etwas zu erreichen, was galera nicht kann? Einige Blickwinkel bitte.

Jeder andere Mechanismus, durch den ich meine DB für die Anwendung Clustering über die Begrenzung von 10000 TPS auf einem Knoten Cluster kann?

+0

Ich bin kein Experte für MySQL-Clustering, aber ich denke, da Sie auf Geschwindigkeit und nicht auf Replikation abzielen, sollten Sie eine Shared-Nothing-Clusterarchitektur für MySQL wie NDB anstelle eines replikationsfokussierten Clusters wie Galera betrachten. – JNevill

+0

Sie können Galera mit 2 Knoten in einem Produktionssystem nicht verwenden. Wenn ein Knoten abstürzt und erneut synchronisiert wird, wird ein zweiter Knoten für die Resynchronisierung verwendet, so dass Ihr Cluster ausgefallen ist. Es ist auch wichtig, die Ladung zu sehen. Für eine hohe Leselast ist Galera das Beste. Um auch über Multicast im Netzwerk nachzudenken, muss ein Knoten nur an 1 Adresse und nicht an jeden Knoten senden. Optimiere die my.cnf. und zuletzt MaxScal statt HaProxy. –

Antwort

1

Jede Transaktion (in Galera) muss unter Zeit mit allen anderen Knoten sprechen, um zu bestätigen, dass die Transaktion überall funktioniert. Schließlich müssen diese Knoten die Transaktion durchführen. Abhängig von vielen Faktoren kann dieser Aufwand viel geringer sein als der Aufwand des ursprünglichen Knotens.

Alle Formen der Replikation beinhalten, auf dem Slave das 'Schreiben' zu wiederholen, das auf dem Master aufgetreten ist. Der Trick ist, den Aufwand des Sklaven zu minimieren; aber das kann nur teilweise getan werden.

Wenn ein Standalone-Server bei 10K-Transaktionen auslastet, ist es unwahrscheinlich, dass Replikationseinstellungen 20K über 2 Knoten durchführen können. Es kann möglich sein, 20K mit 3 oder mehr Knoten zu bekommen.

Galera scheint an 4-5 Knoten die Spitze zu erreichen. Das heißt, die Synchronisation wird überwältigend, wodurch die Skalierung begrenzt wird.

Oracles "InnoDB-Cluster" sieht vielversprechend aus, wenn es möglich ist, über 5 Knoten hinauszugehen. Es ist jetzt etwas in 5.7 und 8.0 verfügbar.

NDB Cluster hängt von "eventueller Konsistenz" ab, was ein sehr unterschiedliches Modell als "asynchron" (reguläre Replikation), "Semi-Sync" oder "Sync" von Galera oder InnoDB Cluster ist. NDB scheint vielleicht, wenn Transaktionen niemals miteinander in Konflikt stehen, oder zumindest nicht von verschiedenen Knoten.

Es wurden Experimente durchgeführt, bei denen 10K erreicht wurden. Versuchen Sie this.

Bitte beschreiben Sie Ihre 'Transaktionen'; Es kann andere Techniken geben, um die Leistung zu verbessern. Zum Beispiel läuft ein INSERT mit 100 Zeilen etwa 10 mal so schnell wie 100 einreihige INSERTs; viel von den Einsparungen in der CPU.

Verwandte Themen