PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL Replizierung Master->Slave Slave->Master



ValiX
26.10.06, 13:14
Hallo,

je mehr ich in diveresen Foren und HowTos lese, desto verwirrter werde ich. Ich brauche mal ein paar konkrete Antworten.:confused:

Ich habe zwei Server (mit Sendmail, MySQL, Apache2). Einer davon ist logischerweise der Slave und ist das Backup vom Master, das falls der Master ausfällt aktiv wird, mithilfe ein paar Skripts und Heartbeat habe ich soweit alles, außer der MySQL Geschichte.

Ich weiß, dass ich einen Slave als Kopie des Masters mitlaufen lassen kann, mit viel Geduld und Spucke kriege ich das auch konfiguriert (gibt ja einige Tutorials). Ursprünglich hatte ich angedacht mit der Slave-Funktion von MySQL den Backup auf dem aktuellen Datenbestand zu halten und nachts die komplette Datenbank vom Master auf den Slave zu kopieren. Soweit käme ich auch noch.

Nur wenn jetzt der Master ausfällt, sollen die Clients weiterhin auf die DB schreiben dürfen, also in dem Fall auf die des Slaves. Wenn ich dann den Master wieder boote, wollte ich die gesamte Datenbank, sowie die html-docs, wie beim nächtlichen Backup rüberziehen, nur diesmal halt vom Slave auf den Master, gut dafür muss für 2-3 Minuten MySQL auf beiden Servern abgeschaltet werden und dann muss vorallem der Master auch die Masterdatenbank haben und der Slave wiederum nur die Slavedatenbank. So hätte ich effektiv den Master auf dem Stand des Backups gebracht. Ist das ohne allzugroße und für Linuxneulinge unüberschaubaren Aufwand so möglich, gibt es was einfacheres? Spricht was dagegen? Geht das auch bei 5 Datenbanken gleichzeitig, oder muss ich die MySQL-Replizierung für jede DB einzeln einstellen?

Falls für euch nützlich, ich habe Debian 3.1 @ 2.8.6-3-686-smp Kernel und MySQL4.1 über apt-get.

Fettes THX für alle Infos.

ValiX
26.10.06, 14:55
Mir kommt da so eine Idee, ich lasse das evtl. mit dem permanenten Replizieren.
So kann ich beide weiterhin als "Master" laufen lassen, habe den ganzen Konfig-Humbug nicht vor mir. Denn ich habe ja ne 1Gbit Crossoverleitung...da habe ich keinen Stress mit Traffic.

Ich lasse einfach stündlich (oder halbstündlich, das ist überwiegend eine "lesende Datenbank"), sagen wir um 10 nach, ein sich selbst überschriebendes Backup auf dem Master von MySQLdump erzeugen. Kopiere es mit scp auf den "Slave". Und spiele es ein. Um 20 nach erstelle ich ein Backup der "Slave"-Datenbank. Ebenfalls wird es immer wieder von neueren Dumps überschrieben, allerdings unterscheidet es sich in der Bezeichnung von den Masterdumps.

Sollte der Master mal nicht erreichbar sein, habe ich Heartbeat, das die IP umswitcht. Die Datenbank auf dem Slave ist max. eine Stunde/Halbestunde alt -das ist neu genug- , neue Daten werde ja wieder gebackupt, wenn der Master wieder online geht holt er sich beim booten ein Backup vom Slave ab, zieht es sich rein und beide sind auf dem gleichen Stand und Heartbeat Switch wieder um.

Wenn ich das alles im Halbstunden Takt mache, ist der Maximale Datenverlust bei einer Stunde, wenn es ganz ungünstig läuft (Kurz vorm Backup ziehe ist Master offline, -> Daten auf Slave 25 Min alt, z.B. von 10:00 -> da keine neuen Daten auf Slave hat das nächste Slave Backup um 10:30 keine Neuerungen -> innerhalb der nächsten halben Stunde (10:45) geht Master wieder online und zieht sich das Backup von 10:30 was auf dem Stand von 10:00 ist vom Slave.

Da die Datenbanken 15MB (+ca 2 MB in 90 Tagen), 2 MB und 100kb groß sind, 2-11 Tabellen enthalten sind die auch in Sekunden schnelle eingespielt. Evtl könnte man die Taktung der Backups sogar auf 20 min reduzieren. Zur Zeit ist das was ich beschrieben habe in nicht mal 5 Min erledigt, so ist noch Luft für weitere DBs und größere.

Ich selbst gebe den Datenbanken so wie sie sind keine Lebensdauer über 10 Jahren, also ((8x365t+2x366t)/90t)*2MB = 80 MB maximales Wachstum. Das hält sich in meinen Augen sehr in Grenzen, wo bei Datensätze älter als 4 Jahre wieder raus könnten.....hmm da könnte ich sogar auf ein Backup alle 15 Minuten gehen :rolleyes:. Und ich müsst MySQL noch nicht einmal abschalten

Was haltet ihr von der Idee?