isotopp wrote:Das funktioniert so einfach nicht.
Ich hätte gedacht, der ausgefallene Server repliziert nach seiner Auferstehung und alles ist wieder gut.
Du hast mehr als dieses Problem.
Du hast zwei Server links und rechts. Unter dem Namen mysql.deinedomain.de lieferst Du beide IPs in zufälliger Reihenfolge aus, wenn nach mysql.deinedomain.de gefragt wird.
Deine Anwendung hat bisher auf links geschrieben, aber links geht runter. Deine Anwendung hängt einen Timeout lang, und fragt dann neu nach den IPs. Dein DNS liefert immer noch beide Namen, und Deine Anwendung (wie auch jeder andere) hat eine 50% Chance, eine Inaktive IP bei der großen IP-Lotterie zu gewinnen.
Dann ist die Frage, warum links runtergekommen ist.
Wenn links runtergefahren wurde, dann ist nach einem Restart links korrekt initialisiert und liest das Binlog von rechts weiter da wo er aufgehört hat. Außerdem ist rechts dann in der Lage, mit der alten auf rechts gespeicherten Binlog-Position von links weiter zu machen, denn die hat sich ja nicht geändert.
Wenn links aber platt war und von einem Backup oder rechts neu aufgesetzt wurde (etwa weil neue Platten drin sind), dann hat links kein Binlog mehr. Der Slave auf rechts muß also neu aufsetzen, und die Inhalte von rechts und links müssen zueinander passen.
Es ist also nicht damit getan, links einfach wieder in Betrieb zu nehmen, sondern man muß aufpassen, daß die beiden auf demselben Stand sind, und daß die Binlog-Positionen zu dem jeweiligen Stand passen.
isotopp wrote:
Wenn Du die beiden MySQL-Server mit heartbeat verdrahtest, kann es besser funktionieren, aber dann reicht Master-Slave. Das Failback ist sowieso kompliziert, und das Failover kann den Slave dann zum Master oder Standalone befördern.
Ok, dann muß ich mir da selbst was basteln... :-(
Normal würde man halt links und rechts als jeweils eine physikalische IP (etwa .2 und .3) aufsetzen. mysql würde man zu einer virtuellen IP .4 auflösen. Die .4 würde man dann einem Server (etwa links) als Sekundäre IP auf dem Interface zuordnen (also auf eth0:1 würde man .4 laufen lassen), verwaltet von heartbeat.
Wenn links runter geht, bemerkt das heartbeat auf rechts, und fährt links runter, greift sich die IP und fährt die auf eth0:1 auf rechts hoch. Außerdem fährt es ein weiteres Script, damit ein mysqld auf rechts auf .4 hochkommt. Dieses Script kann dann auch aus dem bisherigen Slave auf rechts einen Standalone machen.
Für die Anwendung ändert sich nix - die schreibt immer auf .4 (mysql).