Frage

Ich habe die MySQL -Replikation, die derzeit bidirektional zwischen zwei Masters auftritt, eines in einem Rechenzentrum lokal, ein weiteres bei Amazon EC2.

Alles scheint normal zu funktionieren, keine Probleme an sich, außer der gelegentlichen Abfrage, die eine Kollision verursacht, aber diese sind nur wenige. Kürzlich habe ich MySQL-Proxy eingerichtet, um zu versuchen, die beiden Server auszugleichen. Der Lastausgleich ist wirklich eingeschaltet, nachdem die lokale Maschine 40 oder mehr Verbindungen erhalten hat, an diesem Punkt die nachfolgenden Datenbankverbindungen in die EC2-Maschine abgelöst werden.

Was uns kürzlich aufgemerkt hat, ist, dass MySQL Proxy uns benachrichtigen wird, dass es 41 Verbindungen gibt und dann seinen Ausgleich startet. Wenn ich jedoch eine Verbindung zur lokalen Maschine herstelle und a mache SHOW PROCESSLIST; Es kann mir nur 30 Verbindungen bieten.

Hat jemand eine Idee, warum das vielleicht?

Zusätzlich dazu als Ergebnis der Ausstellung der SHOW PROCESSLIST; Befehl Ich habe festgestellt, dass es bei beiden Maschinen, die angeben, dass sie mehr als 5000 Sekunden lang ausgeführt haben, sehr viele Fragen gibt. Ich bin mir ziemlich sicher, dass dies "Zombie" -Anfragen sind, aber weiß jemand, warum sie überhaupt erstellt werden?

Zu Ihrer Information Wir führen MySQL Version 5.1.54 in den neuesten Versionen von Ubuntu und Debian aus.

Alle Ideen wären äußerst hilfreich.

Nachtrag

Es stellt sich heraus, dass wir MySQL_PConnect nicht verwenden und in MySQLI -Bibliotheken sorgen. Ich konnte immer noch nicht herausfinden, warum dies geschieht, und werde mich zurücklegen, sobald ich es herausgefunden habe.

War es hilfreich?

Lösung

Ich bin dagegen, beide Meister in einem Dual-Master-Setup zu schreiben. Es gibt zu viele Dinge, die schief gehen können, und sie können chaotisch sein - auto_increments, andere doppelte Schlüssel usw.

Hunderte von "Sleep" -Verbindungen haben praktisch keine Auswirkungen auf einen Server, daher ist die Begrenzung auf 40 nicht nützlich. 10 oder mehr aktiv Verbindungen (Nichtschlafen) können ein Problem sein. In diesem Fall würde ich mir die Fragen ansehen. Normalerweise ist die Optimierung der Fragen die beste Antwort.

Beachten Sie auch, dass jedes Schreiben (Einfügen, Update usw.), der mit einem Master durchgeführt wird, an allen anderen Meistern und Sklaven durchgeführt werden muss. Sie können also nicht wirklich "verbreiten".

Wenn Sie Prozesse haben, die nur liest (ausgewählt), sollten sie zu Sklaven und/oder dem Backup -Master gehen, nicht zu dem lebenden, beschreibbaren, meister. Das wird helfen.

Beachten Sie das Problem "Critical Write". Beispiel: Ein Benutzer veröffentlicht einen Blog -Kommentar und schaut sich dann seine Kommentare an, aber es fehlt. Dies kann passieren, wenn das Schreiben zu einer Maschine ging, aber die Lektüre traf eine andere und die Replikation ist "hinter".

(Meine Kommentare gelten für alle Versionen und alle APIs, nicht nur 5.1 und PHPs Mysqli.)

Ich halte mich von MySQL_PConnect (und anderen Verbindungsbademechanismen) fern. Verbindungsstart/-Antraumdown ist in MySQL sehr schnell. Poolierte Verbindungen können Probleme mit @variables, Transaktionsmodi, SQL_MODES usw. haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top