Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматривается поддержка SqlClient (добавленная в платформу .NET Framework 4.5) для обеспечения высокой доступности и аварийного восстановления с помощью функций Always On: групп доступности Always On (AG) и экземпляров отказоустойчивого кластера Always On с SQL Server 2012 или более поздней.
Теперь можно указать прослушиватель группы доступности или имя FCI в свойстве подключения. Если приложение SqlClient подключено к базе данных, которая переключается на резерв, исходное соединение разрывается, и приложение должно открыть новое подключение для продолжения работы после отказа.
Если вы не подключаетесь к AG или FCI, и если с именем узла связано несколько IP-адресов, SqlClient последовательно переберет все IP-адреса, связанные с записью DNS. Это может занять много времени, если первый IP-адрес, возвращенный DNS-сервером, не привязан ни к одной из сетевых интерфейсных плат. SqlClient при подключении к FCI или к слушателю группы доступности пытается установить подключения ко всем IP-адресам параллельно. Если попытка соединения завершается успешно, драйвер отменяет все ожидающие попытки подключения.
Примечание.
Увеличение времени ожидания соединения и реализация логики повторного соединения позволяют повысить вероятность соединения приложения с группой доступности. Кроме того, из-за возможного переключения на резервный ресурс может произойти сбой соединения, поэтому следует реализовать логику повторного соединения, пытаясь восстановить его до успешного завершения.
Следующие свойства подключения были добавлены в SqlClient в платформе .NET Framework 4.5:
ApplicationIntentMultiSubnetFailover
Вы можете программно изменить эти ключевые слова строк подключения:
Примечание.
Установка MultiSubnetFailover на true не требуется для платформы .NET Framework версий 4.6.1 и более поздних. Он необходим в .NET Core и .NET 5+.
Соединение с MultiSubnetFailover
Всегда указывайте MultiSubnetFailover=True при подключении к FCI или прослушивателю группы доступности.
MultiSubnetFailover обеспечивает более быструю отработку отказа для всех групп доступности и ЦК в SQL Server 2012 или более поздней версии и значительно сокращает время отработки отказа для топологий AlwaysOn с несколькими подсетями. Во время отказа в системе с несколькими подсетями клиент пытается установить соединения параллельно. Во время аварийного переключения подсети клиент непрерывно пытается восстановить TCP-подключение.
Свойство MultiSubnetFailover подключения указывает, что приложение использует группу доступности или FCI, а SqlClient попытается подключиться к базе данных на основном экземпляре SQL Server, пытаясь подключиться ко всем IP-адресам. Когда для соединения установлено свойство MultiSubnetFailover=True, то клиент производит повторные попытки установить TCP-соединение быстрее интервалов повторной отправки TCP-пакетов по умолчанию для операционной системы. Это позволяет ускорить повторное подключение после отработки отказа группы доступности (AG) или класса отказоустойчивости (FCI) и применяется как к одно-, так и к многоподсетевым AG и FCI.
Дополнительные сведения о ключевых словах строк подключения в SqlClient см. в разделе ConnectionString.
Указание MultiSubnetFailover=True при подключении к чему-либо, кроме группы доступности или FCI, может привести к негативному влиянию на производительность и не поддерживается.
Используйте следующие рекомендации для подключения к серверу с помощью одной из функций AlwaysOn:
Используйте свойство соединения
MultiSubnetFailoverпри установке соединения с одной подсетью или с несколькими подсетями; производительность возрастет в любом случае.Чтобы подключиться к группе доступности, укажите прослушиватель группы доступности в качестве сервера в строке подключения.
При установлении соединения с экземпляром SQL Server, настроенным на работу более чем с 64 IP-адресами, будет возникать ошибка соединения.
Используемый тип проверки подлинности (SQL Server, Kerberos или Windows) не влияет на работу приложения, использующего свойство соединения
MultiSubnetFailover.Увеличьте значение
Connect Timeout, чтобы учесть время на отработку отказов и уменьшить число попыток повторного подключения приложения.Распределенные транзакции не поддерживаются.
Если маршрутизация только для чтения неактивна, то подключение к местоположению вторичной реплики завершится ошибкой в следующих случаях.
Если местоположение вторичной реплики не настроено для принятия подключений.
Если приложение использует свойство
ApplicationIntent=ReadWrite(которое обсуждается ниже) и местоположение вторичных реплик настроено для доступа только для чтения.
На вторичных репликах в режиме только для чтения SqlDependency не поддерживается.
При соединении произойдет ошибка, если первичная реплика настроена для отклонения рабочих нагрузок только для чтения, а строка подключения содержит ApplicationIntent=ReadOnly.
Переход с зеркального отображения базы данных на использование кластеров с несколькими подсетями
Если в строке подключения содержатся ключевые слова ArgumentException и MultiSubnetFailover, или если Failover Partner используется с любым протоколом, кроме TCP, произойдет ошибка подключения. Ошибка (SqlException) также возникает, если используется MultiSubnetFailover, и SQL Server возвращает ответ партнера по отказоустойчивости, указывающий, что он является частью пары зеркалирования базы данных.
Если производится обновление приложения SqlClient, в котором в данный момент используется зеркальное отображение базы данных в сценарии с несколькими подсетями, то следует удалить свойство соединения Failover Partner и заменить его свойством MultiSubnetFailover со значением True, а также заменить имя сервера в строке подключения на имя прослушивателя группы доступности. Если в строке подключения используются Failover Partner и MultiSubnetFailover=True, то драйвер выдаст ошибку. Но если в строке подключения используются параметры Failover Partner и MultiSubnetFailover=False (или ApplicationIntent=ReadWrite), то приложение будет использовать зеркальное отображение базы данных.
Драйвер вернет ошибку, если зеркальное отображение базы данных используется для базы данных-источника в группе доступности, а свойство MultiSubnetFailover=True указано в строке подключения для соединения с базой данных-источником, а не с прослушивателем группы доступности.
Определение намерения приложения
При указании параметра ApplicationIntent=ReadOnly клиент запросит рабочую нагрузку чтения при установлении соединения с базой данных с поддержкой AlwaysOn. Сервер будет обеспечивать выполнение намерения в момент установления соединения и во время выполнения инструкции USE database, но только в базе данных с поддержкой Always On.
Ключевое слово ApplicationIntent не работает с базами данных прежних версий, доступными только для чтения.
База данных может разрешать или запрещать нагрузки на чтение в целевой базе данных AlwaysOn. (Это выполняется с использованием предложения ALLOW_CONNECTIONS в инструкциях Transact-SQL PRIMARY_ROLE и SECONDARY_ROLE.)
Ключевое слово ApplicationIntent служит для включения маршрутизации только для чтения.
Маршрутизация только для чтения
Маршрутизация только для чтения — это функция, которая способна обеспечить доступность реплики базы данных только для чтения. Включение маршрутизации только для чтения
- Необходимо установить соединение с прослушивателем группы доступности Always On.
- Ключевое слово
ApplicationIntentстроки подключения должно быть установлено в значениеReadOnly. - Группа доступности должна быть настроена администратором базы данных на поддержку маршрутизации только для чтения.
Возможно, что не все из нескольких соединений, использующих маршрутизацию только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения. Чтобы гарантировать, что все запросы на подключение только для чтения будут соединяться с одной и той же репликой только для чтения, не указывайте прослушиватель группы доступности в ключевом слове строки подключения Data Source. Вместо этого укажите имя экземпляра, доступного только для чтения.
На маршрутизацию только для чтения может потребоваться больше времени, чем на подключение к первичной реплике, поскольку маршрутизация только для чтения предусматривает прежде всего подключение к первичной реплике, а затем поиск наиболее подходящей доступной для чтения вторичной реплики. Учитывая этот факт, следует увеличить время ожидания входа в систему.