Могут ли группы доступности обеспечить плавное переключение при сбое (без сбоев запросов)?

9

Я тестировал функцию групп доступности в SQL Server 2012 и обнаружил, что при переключении основного сервера на вторичный сервер происходит примерно 15 секунд простоя. Все SQL-запросы, выполняемые в течение этого времени, завершаются сбоем до завершения перехода на другой ресурс.

Есть ли способ уменьшить это до 0 секунд и предотвратить сбой запросов во время перехода на другой ресурс?

Другими словами, есть ли способ заставить любые запросы, выполняемые во время сбоя, перенаправляться на основной сервер вместо сбоя ... и есть ли способ получить новые соединения БД для немедленного подключения к вторичному серверу вместо сбоя подключиться во время перехода на другой ресурс при сбое?

В настоящее время у меня есть 2 сервера, настроенные в группе доступности.

Джон
источник
1
Проверьте этот вопрос (и ответы): dba.stackexchange.com/questions/25124/…
Макс Вернон,
Только Oracle RAC может сделать это.
Ричард Браун
Или Вы должны использовать linux loadballancer в правильных настройках перед сервером sql, например HAproxy.
Kakaz

Ответы:

9

Нет, при AlwaysOn нет способа сделать отказоустойчивое переключение без сбоев (или, насколько я знаю, в SQL Server в целом). Для этого SQL-сервер, к которому вы подключены, должен будет перенести состояние в другой запрос промежуточного узла, а поскольку многие отработки отказа являются неожиданными, это невозможно.

Однако вы можете включить «Secondary-only-read-only» в AlwaysOn, и тогда у ваших читателей будет нулевое время простоя при сбое основного сервера - поскольку они все равно подключаются к вторичной копии для выполнения запросов SELECT, они не будут даже заметить отказоустойчивость. Для пользователей с открытым соединением «Запись» все равно будет прерывание, но по крайней мере некоторая часть вашей пользовательской базы будет работать непрерывно.

SqlRyan
источник
С включенными «вторичными только для чтения», какие-либо запросы на чтение происходят на первичном или они всегда выполняются на вторичных? И что произойдет, если на вторичном сервере возникнет ошибка в этой ситуации?
Джон
Чтение против вторичного устройства происходит только в том случае, если вы настраиваете клиент для подключения к вторичному устройству.
Макс Вернон,
1
Я вижу, так что для этого требуется более умное клиентское приложение.
Джон
@JohnHughes: посмотрите этот документ Microsoft (середина страницы 5): tinyurl.com/9dtvndv и эту запись в блоге: tinyurl.com/8cyr9za . Вам не обязательно нужно более умное приложение - при включении этой функции вы можете указать, что любое приложение может подключаться к читаемому вторичному устройству, но любая попытка выполнить транзакцию DDL / DML будет неудачной. Если вы используете более новый собственный клиент, вы можете указать «ReadIntent», что означает, что новый клиент будет читать из вашего вторичного клиента, в то время как старые клиенты будут продолжать выполнять все транзакции с вашим основным сервером. Опция, но требуется некоторое чтение.
SqlRyan
SqlRyan правильный, нет способа отработки отказа экземпляра SQL Server с помощью AlwaysOn Groups, без отключения клиентов.
Мрденный