3 Stimmen

Programmierung der Ausfallsicherung für SQL-Server-Cluster

Ich habe derzeit keinen Zugang zu einem SQL-Server-Cluster für die Entwicklung (einer, der Clusterdienste mit einem SAN dahinter verwendet), werde dies aber in Zukunft für die Live-Umgebung tun.

Wenn ich dies von einer .NET-Umgebung aus programmiere, was muss ich dann in meinem Code tun, wenn der Knoten, mit dem ich verbunden bin, ausfällt? Ist der Failover zum anderen Knoten völlig transparent? Muss ich eine Art von Ausnahme abfangen und selbst versuchen, die Verbindung wiederherzustellen? Gibt es ein Codemuster für diesen Fall?

3voto

Remus Rusanu Punkte 280155

Bei der Ausfallsicherung wird die Verbindung zum Server vollständig unterbrochen. Sie können die Verbindung in der Regel nach einigen Sekunden bis Minuten wiederherstellen, nachdem der Standby-Server gestartet ist und die Datenbanken von den freigegebenen Laufwerken wiederhergestellt hat. Alle Transaktionen, die zum Zeitpunkt des Failovers laufen, werden rückgängig gemacht.

In Ihrer Anwendung ist ein Failover ein "Lights-out"-Ereignis, Sie verlieren alle Verbindungen und jeder Versuch, die Verbindung wiederherzustellen, schlägt fehl, bis die Wiederherstellung des Standby-Servers abgeschlossen ist. Wenn Sie eine korrekte Transaktionssemantik verwenden, werden die Daten korrekt sein und eine gut geschriebene Anwendung wird ohne Probleme fortgesetzt. Wenn Sie Transaktionen nicht ordnungsgemäß verwenden, werden Sie alle Arten von Inkonsistenzen durch logische Halbschreibvorgänge haben, die nicht ordnungsgemäß durch eine Transaktionsgrenze geschützt sind.

Sie können die Ausfallsicherung immer an einigen virtuellen Maschinen testen. Sowohl Virtual Server als auch HyperV können Cluster auf virtueller Hardware simulieren (Virtual PC allerdings nicht), und ich gehe davon aus, dass VMWare dies ebenfalls kann (obwohl ich es nie ausprobiert habe).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X