• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySQL Load Balancing

x_merlin_x

Neues Mitglied
Hallo zusammen,

ich betreibe ein kleineres Portal auf LAMP-Basis auf einem root-Server von 1&1. Das System ist derzeit an seinen grenzen und weist im Mittelwert einen Load 5 von etwa 5-6 aus. In Traffic-spitzen reden wir schon mal von load 8 - 12. Ab ca. 8 wird die Seite extrem langsam und kaum noch nutzbar. Ich vermute das liegt hauptsächlich am MySQL-Traffic und der damit einhergehenden CPU Auslastung und I/O Limits. Umfangreiche file copies sind nicht mehr möglich ohne die Seite zum Stillstand zu bringen.

Ich möchte darum einen weiteren Server anmieten und einen MySQL-Slave einrichten sowie einen V-Server welcher dann als MySQL Load-Balancer fungiert. Von verteilten Systemen hab ich bislang nur sehr wenig Ahnung.

Ich habe folgende Fragen:


  1. Haltet ihr das vorgeschlagene Setup für den richtigen Weg?
  2. Kann ich ohne weiteres MySQL Traffic bei verteilten Servern innerhalb eines Rechenzentrums laufen lassen oder muss ich zwangsweise verschlüsseln. Wenn ja macht dies überhaupt Sinn da die Performance vermutlich deutlich leidet.
  3. Wie verfällt es sich mit der Ausfallsicherheit. Ist diese dann höher oder geringer als gegenwärtig mit einer einzigen Maschine?
  4. Gibt es hier jemand der gegen Bezahlung mit mir gemeinsam die Sache angehen kann? Als freier Mitarbeiter oder ähnliches.

Vielen Dank im voraus für Eure Hilfe,

Merlin
 
Mit der Idee bist Du durchaus auf dem richtigen Weg. Eine Alternative wäre dagegen ein auch ein komplett neuer Root-Server mit mehr Ressourcen. Denn ein Server der bei einer Last von 12 schon derart ausgelastet ist, ist nicht sehr vorteilhaft. Da gibt es besseres.

Solltest Du bei deiner Webseite bei jedem Aufruf neben den üblichen Logfiles auch noch Dateien schreiben und auslesen, dürfte das auch eine Bremse sein. Der meist unterschätzte Flaschenhals ist die Festplattengeschwindigkeit.

Wenn Du 2 Server hast und einen als reinen Datenbankserver verwendest und beide in einem Rechenzentrum stehen, musst Du normalerweise nichts weiter absichern. Du musst nur darauf achten, dass der Datenbankserver einzig Datenbankverbindungen von der IP des Web-Servers und von lokal zulässt. Das dürfte schon ausreichen.

Zwei Server würden dich auch gegen Ausfallzeit schützen. Du könntest alle Daten auf beiden Servern spiegeln, so dass jederzeit der eine für den anderen einspringen könnte. "Jederzeit" ist gut gesagt. Praktisch ist sowas nicht möglich, aber es ist eine Variante. Ganz sicher wäre das jedoch nur, wenn beide Server in jeweils anderen Rechenzentren stehen.

Wenn Du jemanden suchst, der dich dabei unterstützt, frag in der Jobbörse hier im Forum mal nach.
 
Vielen Dank für das Feedback. Ich bin mittlerweile ein gutes Stück weiter. Auf 2 Testservern laufen ein MySQL Master und ein Slave in replication mode einwandfrei. Dazu habe ich noch auf dem Master-Server MySQL-Proxy aufgesetzt umd das R/W-Splitting zu übernehmen. Dieser läuft laut logs auch:

Code:
2011-03-17 12:49:56: (message) mysql-proxy 0.8.1 started
2011-03-17 12:49:56: (debug) max open file-descriptors = 1024
2011-03-17 12:49:56: (message) proxy listening on port 192.168.0.109:3307
2011-03-17 12:49:56: (message) added read/write backend: 192.168.0.109:3306
2011-03-17 12:49:56: (message) added read-only backend: 192.168.0.108

leider funktioniert das Splitting jedoch nicht. Ein Port-Scan mit nmap zeigt auch keinen offenen Port 3307 - Firewal ist nicht an.

Um das zu testen habe ich versucht mich mit folgendem Kommando einzuwählen:

mysql -p -P 3307

Einlogen geht, jedoch aber auch mit jedem andern Port hinter dem -P ?! Die Queries werden dann immer nur an den master gesendet.

Ich hab das Gefühl das entweder der proxy nicht läuft oder die Einwahl über MySQL auf einen Port 3307 anderst geht.

Kann hier jemand weiterhelfen?
 
Zurück
Oben