Master/Fallback Replikation
Hi,
ich bevorzuge die Inselbildung statt Master/N-Slave Replikationen, weil sie einfach performanter sind. Allerdings habe ich dadurch keine erhöhte Ausfallsicherheit. Daher dachte ich jetzt einen Fallback zu realisieren.
Aktuell sieht es so aus. Ich verteile die tables auf mehrere Server (gejointe müssen zusammen bleiben):
table1 & table2 auf Server A
table3 & table4 auf Server B
table5 & table6 auf Server C
Je nachdem welche Tabelle man ansprechen möchte, erstellt man eine entsprechende Datenbankverbindung. Die Performance ist je nach Verteilung der tables optimal.
Ein Fallback Konstrukt stelle ich mir dagegen so vor:
table1 & table2 (MASTER) / table3 & table4 (FALLBACK) auf Server A
table3 & table4 (MASTER) / table5 & table6 (FALLBACK) auf Server B
table5 & table6 (MASTER) / table1 & table2 (FALLBACK) auf Server C
Und so wäre der technische Ablauf:
1.) alle INSERT/UPDATE Befehle werden doppelt abgesendet (1x an MASTER und 1x an FALLBACK). SELECT Abfragen gehen nur an MASTER.
2.) kann eine DB-Verbindung nicht aufgebaut werden oder schlägt ein I/U beim MASTER fehl (z.B. table korrupt), so fliegt die DB-Verbindung aus dem Script und der entsprechende FALLBACK fungiert als MASTER (Meldung an Technik)
3.) schlägt ein I/U bei einem FALLBACK fehl, so wird der table gelöscht und über den MASTER wiederhergestellt (x Fehlversuche = DB-Verbindung fliegt aus der Liste, Meldung an Technik)
4.) falls ein Server nach einem Ausfall wieder repariert wurde, müssen alle Verbindungen kurz unterbrochen werden. MASTER und FALLBACK werden jeweils über FALLBACK und MASTER der Produktivumgebung wiederhergestellt und die DB-Verbindung der Liste wieder hinzugefügt.
Ich habe aktuell Bedenken, dass ein FALLBACK ein I/U "verschlucken" könnte und wenn dann der MASTER ausfällt, dann ist der Datenstand doch nicht so aktuell, wie er eigentlich sein sollte. Ist also die Frage, ob man da irgendwo in Intervallen die rows/size bzw. bei MyISAM die checksum vergleicht. Aber dann frage ich mich wieder, warum da überhaupt was verschluckt werden sollte. Im Fehlerfall greift ja schließlich 3.). Oder hab ich vielleicht in der Theorie eine mögliche Fehlerquelle übersehen?
Gruß
|