Czy grupy dostępności mogą zapewnić bezproblemowe przełączanie awaryjne (bez błędów zapytań)?

9

Testowałem funkcję grup dostępności w SQL Server 2012 i stwierdzam, że jest około 15 sekund przestoju, gdy serwer główny przechodzi w tryb awaryjny do serwera pomocniczego. Wszystkie zapytania SQL wykonane w tym czasie kończą się niepowodzeniem, dopóki przejście do trybu failover nie zostanie zakończone.

Czy jest jakiś sposób, aby zmniejszyć to do 0 sekund i zapobiec awarii zapytań podczas przejścia w tryb failover?

Innymi słowy, czy istnieje sposób, aby zapytania nie działały podczas przekierowania na serwer główny zamiast awarii ... i czy istnieje sposób na uzyskanie nowych połączeń db, aby natychmiast połączyć się z serwerem pomocniczym zamiast nie połączyć podczas przejścia w tryb failover?

Obecnie mam 2 serwery skonfigurowane w grupie dostępności.

Jan
źródło
1
Sprawdź to pytanie (i odpowiedzi): dba.stackexchange.com/questions/25124/…
Max Vernon
Może to zrobić tylko Oracle RAC.
Richard Brown
Lub Powinieneś użyć linux loadballancer w odpowiednich ustawieniach przed serwerem SQL, jak HAproxy.
kakaz

Odpowiedzi:

9

Nie, nie ma sposobu na przejście w tryb failover z zerowym przestojem za pomocą AlwaysOn (lub, ogólnie rzecz biorąc, w SQL Server). Aby to zrobić, SQL Server, z którym jesteś połączony, musiałby wykonać transfer stanu do innego węzła w połowie zapytania, a ponieważ wiele przełączeń awaryjnych jest nieoczekiwanych, nie jest to możliwe.

Możesz jednak włączyć „Secondary tylko do odczytu” w AlwaysOn, a wtedy czytelnicy mieliby zero przestojów, gdy główny serwer przejdzie w tryb awaryjny - ponieważ i tak łączą się z dodatkową kopią, aby wykonać swoje zapytania SELECT, nie zrobiliby tego nawet zauważ przełączenie awaryjne. Użytkownicy nadal mieliby przerwę z połączeniem „Zapis”, ale przynajmniej część bazy użytkowników byłaby nieprzerwana.

SqlRyan
źródło
Po włączeniu opcji „pomocnicze tylko do odczytu”, czy jakieś żądania odczytu pojawiają się na urządzeniu głównym, czy zawsze są wykonywane na urządzeniach pomocniczych? A co się stanie, jeśli serwer pomocniczy ma awarię w tej sytuacji?
John
Odczyt w stosunku do pomocniczego występuje tylko wtedy, gdy skonfigurujesz klienta do łączenia się z pomocniczym.
Max Vernon
1
Rozumiem, więc wymaga to inteligentniejszej aplikacji klienckiej.
Jan
@JohnHughes: Sprawdź ten dokument Microsoft (środek strony 5): tinyurl.com/9dtvndv i ten post na blogu: tinyurl.com/8cyr9za . Niekoniecznie potrzebujesz inteligentniejszej aplikacji - po włączeniu tej funkcji możesz określić, że każda aplikacja może połączyć się z czytelnym urządzeniem pomocniczym, ale każda próba wykonania transakcji DDL / DML zakończy się niepowodzeniem. Jeśli korzystasz z nowszego klienta natywnego, możesz określić „ReadIntent”, co oznacza, że ​​nowszy klient będzie czytał dane z twojego dodatkowego serwera, podczas gdy starsi klienci będą nadal wykonywać wszystkie transakcje na twoim podstawowym. Opcja, ale potrzebna jest pewna lektura.
SqlRyan
SqlRyan jest poprawny, nie ma możliwości przełączenia awaryjnego instancji SQL Server przy użyciu grup dostępności AlwaysOn bez rozłączania klientów.
mrdenny,