Können Verfügbarkeitsgruppen ein nahtloses Failover bereitstellen (ohne Abfragefehler)?

9

Ich habe die Funktion "Verfügbarkeitsgruppen" in SQL Server 2012 getestet und stelle fest, dass beim Ausfall des Primärservers auf den Sekundärserver eine Ausfallzeit von ca. 15 Sekunden auftritt. Alle während dieser Zeit ausgeführten SQL-Abfragen schlagen fehl, bis der Failover-Übergang abgeschlossen ist.

Gibt es eine Möglichkeit, dies auf 0 Sekunden zu reduzieren und zu verhindern, dass Abfragen während des Failover-Übergangs fehlschlagen?

Mit anderen Worten, gibt es eine Möglichkeit, Abfragen während des Fehlers zum Umleiten auf den Primärserver auszuführen, anstatt zu scheitern ... und gibt es eine Möglichkeit, neue Datenbankverbindungen zu erhalten, um sofort eine Verbindung zum Sekundärserver herzustellen, anstatt zu scheitern während des Failover-Übergangs verbinden?

Ich habe derzeit 2 Server in der Verfügbarkeitsgruppe eingerichtet.

John
quelle
1
Überprüfen Sie diese Frage (und die Antworten): dba.stackexchange.com/questions/25124/…
Max Vernon
Das kann nur Oracle RAC.
Richard Brown
Oder Sie sollten Linux Loadballancer in den richtigen Einstellungen vor dem SQL Server wie HAproxy verwenden.
Kakaz

Antworten:

9

Nein, mit AlwaysOn (oder, soweit mir bekannt ist, in SQL Server im Allgemeinen) ist kein Failover ohne Ausfallzeiten möglich. Zu diesem Zweck müsste der SQL Server, mit dem Sie verbunden sind, während der Abfrage eine Statusübertragung auf einen anderen Knoten durchführen. Da viele Failover unerwartet sind, ist dies nicht möglich.

Sie können jedoch in AlwaysOn "Nur-Lese-Sekundärdateien" aktivieren, und dann haben Ihre Leser keine Ausfallzeit, wenn der Primärserver ausfällt. Da sie ohnehin eine Verbindung zu einer sekundären Kopie herstellen, um ihre SELECT-Abfragen auszuführen, würden sie dies nicht tun Beachten Sie sogar das Failover. Es würde immer noch eine Unterbrechung für Benutzer mit einer offenen "Schreib" -Verbindung geben, aber zumindest ein Teil Ihrer Benutzerbasis würde nicht unterbrochen.

SqlRyan
quelle
Mit „read-only secondaries“ aktiviert ist , tun alle Leseanforderungen auf dem primären auftreten oder sind sie immer auf den Sekundär getan? Und was passiert, wenn der sekundäre Server in dieser Situation einen Fehler aufweist?
John
Das Lesen für eine Sekundärseite erfolgt nur, wenn Sie den Client so konfigurieren, dass eine Verbindung zur Sekundärseite hergestellt wird.
Max Vernon
1
Ich verstehe, das erfordert also eine intelligentere Client-App.
John
@ JohnHughes: Sehen Sie sich dieses Microsoft-Dokument (Mitte von Seite 5) an: tinyurl.com/9dtvndv und diesen Blog-Beitrag: tinyurl.com/8cyr9za . Sie benötigen nicht unbedingt eine intelligentere App. Wenn Sie die Funktion aktivieren, können Sie festlegen, dass jede Anwendung eine Verbindung zur lesbaren sekundären App herstellen kann. Der Versuch, eine DDL / DML-Transaktion durchzuführen, schlägt jedoch fehl. Wenn Sie den neueren nativen Client verwenden, können Sie "ReadIntent" angeben. Dies bedeutet, dass der neuere Client von Ihrem sekundären Client liest, während ältere Clients weiterhin alle Transaktionen für Ihren primären Client ausführen. Eine Option, aber etwas Lesen ist erforderlich.
SqlRyan
SqlRyan ist korrekt. Es gibt keine Möglichkeit, ein Failover einer SQL Server-Instanz mithilfe von AlwaysOn-Verfügbarkeitsgruppen durchzuführen, ohne dass die Clients getrennt werden.
Mrdenny