Kapitel 5: MySQL-Datenbankadministration 319
Antwort: Sie sollten einen Server als Master aufsetzen und alle Schreibvorg¨ange zu
ihm lenken, und so viele Slaves wie m¨oglich einrichten und die Lesevorg¨ange zwischen
Master und Slaves verteilen. Ausserdem k¨onnen Sie die Slaves mit --skip-bdb,
--low-priority-updates und --delay-key-write-for-all-tables starten, um f¨ur die
Slaves Geschwindigkeitsverb esserungen zu erzielen. In diesem Fall benutzt der Slave nicht
transaktionale MyISAM-Tabellen anstelle von BDB-Tabellen, um mehr Geschwindigkeit zu
erhalten.
Frage: Was muss ich in meinem Client-Code tun, damit dieser Performance-verb essernde
Replikation nutzt?
Antwort: Wenn der Teil Ihres Codes, der f¨ur den Datenbankzugriff zust¨andig ist, korrekt
abstrahiert / modularisiert ist, sollte die Konvertierung zur replizierten Einrichtung sehr
glatt und einfach verlaufen:
¨
Andern Sie die Implementation Ihres Datenbankzugriffs so, dass
von irgend einem Slave oder dem Master gelesen und immer zum Master geschrieben wird.
Wenn Ihr Code nicht diese Abstraktionsebene besitzt, ist die Einrichtung eines Replika-
tionssystems ein guter Grund, ihn zu s¨aubern. Sie k¨onnten damit beginnen, eine Wrapper-
Bibliothek oder ein Wrapper-Modul mit folgenden Funktionen zu benutzen:
• safe_writer_connect()
• safe_reader_connect()
• safe_reader_query()
• safe_writer_query()
safe_ bedeutet, dass die Funktion sich um die Handhabung jeglicher Fehlerbedingungen
k¨ummert.
Danach sollten Sie Ihren Client-Code so umwandeln, dass er die Wrapper-Bibliothek be-
nutzt. Dieser Prozess kann anfangs etwas anstrengend und aufregend sein, wird sich aber
auf lange Sicht lohnen. Alle Applikationen, die dem geschilderten Muster folgen, werden
ebenfalls Nutzen aus der Master-/Slaves-L¨osung ziehen. Der Code wird sich viel einfacher
pflegen lassen und Optionen zur Probleml¨osung werden trivial sein. Sie brauchen einfach
nur ein oder zwei Funktionen zu ¨andern, um zum Beispiel zu loggen, wie lang jede Anfrage
dauerte, oder welche Anfrage unter Ihren Tausenden einen Fehler produzierte. Wenn Sie
schon eine Menge Code geschrieben haben, wollen Sie den Umwandlungsprozess wahrschein-
lich automatisieren. Hierf¨ur k¨onnen Sie zum Beispiel Monty’s replace-Dienstprogramm
benutzen, das der Standard-Distribution von MySQL beiliegt, oder Ihr eigenes Perl-Skript
schreiben. Hoffentlich folgt Ihr Code irgend einem erkennbaren Muster - wenn nicht, ist
es wahrscheinlich ohnehin besser, ihn neu zu schreiben, oder zumindest, ihn durchzugehen
und manuell in ein Muster zu bringen.
Beachten Sie, dass Sie nat¨urlich andere Namen f¨ur die Funktionen verwenden k¨onnen.
Wichtig ist, eine einheitliche Schnittstelle f¨ur Verbindungen zum Lesen, Verbindungen zum
Schreiben, Durchf¨uhren von Lesevorg¨angen und Durchf¨uhrung von Schreibvorg¨angen zu
haben.
Frage: Wann und in welchem Umfang kann MySQL-Replikation die Performance meines
Systems verbessern?
Antwort: MySQL-Replikation bringt die meisten Vorteile auf einem System mit h¨aufigen
Lesevorg¨angen und nicht so h¨aufigen Schreibvorg¨angen. Theoretisch k¨onnen Sie eine Ein-
richtung aus einem Master und vielen Slaves so skalieren, dass Sie solange Slaves hinzuf¨ugen,
Comentários a estes Manuais