phpbar.de logo

Mailinglisten-Archive

AW: [OT] Frage zu fragmentierten (verteilten) Datenbanken

AW: [OT] Frage zu fragmentierten (verteilten) Datenbanken

Hans-Peter Kohnle mysql at timesoft.org
Sam Feb 14 01:58:22 CET 2004


Hallo,

> > Ich habe seit etwa 1 Jahr eine verteilte DB mit 6 Server am laufen.
Bei
> > der Konfiguration hat mir die Doku von MySQL
> > (http://www.mysql.de/doc/de/) sehr gut geholfen.
> 
> Ich habe eine Master:Slave Installation vorgenommen,
> über ein internes Giganetz, allerdings hat es bei mir, Mysql 4.013
> nie wirklich funktioniert, daher läuft es jetzt auch nicht mehr!

Um hier ein Statement abzugeben, müsste man wissen, wo es konkret
Probleme gab ;-)

> Ich hab auch das Handbuch zu hilfe genommen, aber zu viele
> Schreibfehler auf dem Salve haben mich wieder davon abgebracht!

Was meinst Du mit Schreibfehler? Schreibfehler in der Doku oder
tatsächlich auf dem Slave-Server? Wenn zweites, Festplattenfehler oder
SQL-Fehler IN der Datenbank?

> Aber wenn du mal tipps ausgeben kannst, wieso es bei dir ohne Problem
> läuft wäre ich dir wirklich sehr, sehr, sehr dankbar ;-)

Nun, was mich sehr viel weiter gebracht hat - Ich habe zunächst alles
mit Auszügen aus der Live-DB auf einem Testsystem aufgebaut. Ich habe
mit Hilfe von VMWare mehrere DBs aufgebaut und dann verschiedene
Situationen durchgetestet. Als ich mir dann sicher war, dass ich das
ganze managen und einrichten kann, habe ich das komplette System auf
meine Liveserver übertragen und nach und nach produktiv geschalten.

Ich habe mir kleine Batch-Skripts geschrieben, mit denen ich viele
Aktionen in der Administration schneller erledigen kann.

Das Monitoring mache ich mit dem Perl-Skript mytop. Wenn mich nicht
alles täuscht, wurde dieses Tool von einem Entwickler von Yahoo
geschrieben, da die auch Systeme mit MySQL laufen haben. Ausserdem
verwende ich noch einige eigene Skripte, mit denen der LVS-Director den
Datenbankzustand überwacht.

Ich habe den Programmcode meiner Clients angepasst. So gibt es in der
verteilten DB keine Autoincrementfelder mehr. Ich verwende stattdessen
Checksummen oder md5 verschlüsselte IDs.

Ich denke, dass es auch hilfreich war, dass ich schon mit Adabas
verteilte Datenbanken aufgebaut habe. 

> Ach ja, auch über das i_net hatte ich es mal gemacht, allerdings
kannst du
> das vollkommen vergessen, wenn der Master nicht an den slave senden
kann,
> bleibt der slave stehen

Das stimmt, aber er nimmt die Verbindung zum Master automatisch wieder
auf, sobald dieser wieder erreichbar ist. Also ich kann einen oder auch
mehrere Server aus dem Netz nehmen und wieder hinzufügen und es läuft
hinterher wieder automatisch weiter. Das wird von MySQL selbst geregelt
und ich muss nur in den seltensten Fällen von Hand (SLAVE START)
nachhelfen. Auch dass hatte ich in der Anfangsphase genutzt. Ein Server
(der 1. DB-Server, der die Originaldaten hatte) bei 1&1 und 3 neue
Server bei einem anderen Provider.

> und antwortet nicht auf anfragen! bis er wieder von master bedient
wird,
> allerdings war das noch  mit der ersten 4. Version

Das kann ich gar nicht nachvollziehen. Wenn ein Slave seinen Master
verliert, dann arbeitet der Slave dennoch ganz normal weiter und
beantwortet die Anfragen ganz normal weiter und gibt als Master auch
seine Änderungen an einen weiteren möglichen Slave weiter.

;-) Erst gestern, habe ich noch meine lokale DB mit einer Live-DB im
inet verbunden. So kann ich jetzt die Artikelpflege lokal durchführen
und auch die Statistiken lokal auswerten. Das ganze geht über eine 128k
Standleitung von meinem Netz zu meinem Provider. Interessant wäre noch
zu erwähnen, dass auf dem Datenbankserver draussen gleichzeitig ZWEI
verteilte Datenbanken laufen.

  -----------
 | lokal:DB2 |
  -----------
     |   | 
     |   | 
     |   | 
 ---------------
| DB-Master:DB2 |
 ===============
| DB-Master:DB1 |
 ---------------
    |	      |
 ------   ------
| DB-1 | | DB-5 |
 ------   ------
    |	      |
 ------   ------
| DB-2 | | DB-4 |
 ------   ------
    |       |
 ------     |
| DB-3 |----
 ------


Alles in allem, es ist - befolgt man die Hinweise in der Doku - relativ
einfach eine verteilte DB mit MySQL zu realisieren. Voraussetzung ist
aber auch, dass man mit dem grundlegenden Umgang von MySQL vertraut ist
und man auch im Klaren ist, was bei der Distribution der DBs so
passiert. Es ist sehr hilfreich, wenn man auch mit den einzelnen Tools,
die dem normalen Paketen beiliegen, umgehen kann. Weiterhin sollte man
auch mit den Logdateien von MySQL umgehen können.

Ich bin mir jetzt aber nicht ganz sicher, ob meine Ausführungen
überhaupt jemandem weiterhelfen. Vielleicht reichen sie zumindest als
Beleg dafür, dass es funktioniert.

Hier noch ein paar praktische Tipps:

- Der Ausgangszustand einer verteilten DB MUSS konsistent sein. 
- Auf allen beteiligten Servern sollte die gleiche MySQL Version
verwendet
  werden. Zumindest aber MÜSSEN alle beteiligten Server entweder eine
hohe 
  3er- oder eine 4er-Version installiert haben. Eine gemischte
Installation 
  Version 3 und Version 4 funktionieren nicht.
- Für die Replikation sollte ein spezieller User eingerichtet werden.
Der 
  Slave muss volle Leserechte auf dem Master haben.
- Die Server IDs müssen eindeutig sein.
- Binlog muss auf jedem Server aktiviert sein.
- Je nach Datenbankgrösse muss genügend Platz für die Relay-Logdatei 
  vorhanden sein. (erst ab Version 4)
- die Dateien master.info und (seit Version 4) realay.info dürfen nicht 
  manuell bearbeitet werden.


Gruss HaPe



-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive