Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье рассматривается поддержка Microsoft SqlClient Data Provider for SQL Server для обеспечения высокой доступности и аварийного восстановления, включая группы Always On Availability Groups. Для получения дополнительной информации смотрите группы доступности Always On.
Теперь в свойстве подключения можно указать прослушиватель группы доступности для группы доступности высокой доступности и аварийного восстановления (HADR), либо экземпляр отказоустойчивого кластера (FCI). Если приложение SqlClient подключается к базе данных Always On, которая выходит из строя, исходное соединение разрывается, и приложение должно открыть новое соединение, чтобы продолжить работу после отказа.
Если вы не подключаетесь к слушателю группы доступности или FCI, и если несколько IP-адресов связаны с именем хоста, SqlClient последовательно перебирает все IP-адреса, связанные с записью DNS. Этот процесс может занять много времени, если первый IP-адрес, возвращаемый DNS-сервером, не привязан ни к одной сетевой интерфейсной карте (NIC). Когда вы подключаетесь к прослушивателю AG или FCI, SqlClient пытается параллельно установить подключения ко всем IP-адресам. Если попытка соединения завершается успешно, драйвер отменяет все ожидающие попытки подключения.
Примечание.
Увеличение времени ожидания соединения и реализация логики повторного соединения позволяют повысить вероятность соединения приложения с группой доступности. Кроме того, поскольку подключение может завершиться сбоем из-за переключения при отказе, следует реализовать логику повторных попыток подключения, повторяя попытки после сбоя до тех пор, пока подключение не будет восстановлено.
В поставщике данных Microsoft SqlClient для SQL Server поддерживаются следующие свойства подключения:
ApplicationIntentMultiSubnetFailover
Вы можете программно изменить эти ключевые слова строк подключения:
Подключение с помощью MultiSubnetFailover
Всегда указывайтеMultiSubnetFailover=True, когда вы подключаетесь к TCP-конечной точке семейства Microsoft SQL. Эта настройка применяется к слушателям групп доступности, экземплярам резервного кластера и конечным точкам с несколькими IP-адресами, такими как База данных SQL Azure, Управляемый экземпляр SQL Azure и SQL Database in Microsoft Fabric.
Когда имя сервера в строке подключения соответствует более чем одному IP-адресу, MultiSubnetFailover=True заставляет SqlClient одновременно открывать соединения со всеми этими адресами и использовать тот, который ответит первым. Без него SqlClient проверяет адреса по одному. Попытка подключения к адресу, который не отвечает, зависает до тех пор, пока не истечёт тайм-аут TCP-подключения в операционной системе, из-за чего может исчерпаться Connect Timeout прежде, чем SqlClient дойдёт до адреса, который отвечает. После отказа адрес, который SqlClient пытается первым, может быть таким, который больше не обслуживает базу данных, поэтому соединение, которое успешно работает с другим адресом, терпит сбой с тайм-аутом.
MultiSubnetFailover=True изменяет то, насколько быстро клиент находит реплику, обслуживающую базу данных. Это не влияет на то, сколько времени требуется серверу для переключения на резервный сервер. При включённой настановке SqlClient также повторяет попытки TCP-соединения быстрее, чем стандартные интервалы перепередачи TCP в операционной системе, что ускоряет повторное подключение как для групп доступности одной и нескольких подсетей, так и для экземпляров резервного кластера.
MultiSubnetFailover=True безопасно для целей с одним IP-адресом. Когда DNS разрешается на один адрес, SqlClient делает одну попытку подключения, так что настройка не стоит ничего, когда она не нужна.
Дополнительные сведения о ключевых словах строк подключения в SqlClient см. в разделе ConnectionString. Рекомендации по соответствующему параметру Transparent Network IP Resolution (TNIR) в .NET Framework, а также сведения об устранении медленных подключений, вызванных именами DNS, которым соответствует несколько IP-адресов, см. в разделах «Отключение Transparent Network IP Resolution» и «Длительные задержки подключения из-за тайм-аута подтверждения связи перед входом».
Используйте следующие рекомендации при настройке MultiSubnetFailover:
Задайте
MultiSubnetFailover=True.Чтобы установить соединение с группой доступности, указывайте ее прослушиватель в строке подключения вместо сервера.
Нельзя использовать
MultiSubnetFailoverпри подключении к именованному экземпляру.Нельзя использовать
MultiSubnetFailoverповерх протокола, кроме TCP.Подключение к экземпляру SQL Server, настроенному с более чем 64 IP-адресами, приводит к сбою соединения.
Нельзя использовать
MultiSubnetFailoverс зеркалированием базы данных. Дополнительные сведения см. в разделе Переход на использование многоподсетевых кластеров вместо зеркального отображения базы данных. Зеркалирование базы данных устарело во всех поддерживаемых версиях SQL Server. Вместо этого используйте группы доступности AlwaysOn.Используемый тип проверки подлинности (SQL Server, Kerberos или Windows) не влияет на работу приложения, использующего свойство соединения
MultiSubnetFailover.Увеличьте значение
Connect Timeout, чтобы учесть время переключения при отказе и уменьшить количество попыток повторного подключения приложения.Распределенные транзакции не поддерживаются.
Если маршрутизация только для чтения неактивна, то подключение к местоположению вторичной реплики завершится ошибкой в следующих случаях.
Если расположение вторичной реплики не настроено для приема подключений.
Если приложение использует свойство
ApplicationIntent=ReadWrite(которое обсуждается ниже) и местоположение дополнительных реплик настроено для доступа только для чтения.
SqlDependency не поддерживается на вторичных репликах, доступных только для чтения.
При соединении произойдет ошибка, если первичная реплика настроена для отклонения рабочих нагрузок только для чтения, а строка подключения содержит ApplicationIntent=ReadOnly.
Переход с зеркального отображения базы данных на использование кластеров с несколькими подсетями
Ошибка подключения (ArgumentException) возникнет, если в строке подключения присутствуют ключевые слова подключения MultiSubnetFailover и Failover Partner, или если используется MultiSubnetFailover=True и протокол, отличный от TCP. Ошибка (SqlException) возникает также в том случае, если используется MultiSubnetFailover и SQL Server возвращает ответ партнера по обеспечению отработки отказа, указывающего на то, что он является частью пары зеркального отображения базы данных.
Если производится обновление приложения SqlClient, в котором в данный момент используется зеркальное отображение базы данных в сценарии с несколькими подсетями, то следует удалить свойство соединения Failover Partner и заменить его свойством MultiSubnetFailover со значением True, а также заменить имя сервера в строке подключения на имя прослушивателя группы доступности. Если в строке подключения используются Failover Partner и MultiSubnetFailover=True, то драйвер выдаст ошибку. Но если в строке подключения используются параметры Failover Partner и MultiSubnetFailover=False (или ApplicationIntent=ReadWrite), то приложение будет использовать зеркальное отображение базы данных.
Драйвер возвращает ошибку, если вы используете зеркалирование базы данных на первичной реплике в группе доступности, а также если в строке подключения, которая подключается к первичной реплике, а не к прослушивателю группы доступности, задан параметр MultiSubnetFailover=True.
Указание назначения приложения
Когда вы задаете ApplicationIntent=ReadOnly, клиент запрашивает рабочую нагрузку для чтения при подключении к базе данных с включенной функцией Always On. Сервер применяет назначение при подключении и во время выполнения оператора SQL USE, но только для базы данных с поддержкой Always On.
Ключевое слово ApplicationIntent не работает с базами данных прежних версий, доступными только для чтения.
База данных может разрешать или запрещать рабочие нагрузки чтения для целевой базы данных Always On. (Это делается с ALLOW_CONNECTIONS условием PRIMARY_ROLE и SECONDARY_ROLE утверждений Transact-SQL.)
Ключевое слово ApplicationIntent служит для включения маршрутизации только для чтения.
Маршрутизация в режиме только чтения
Маршрутизация только для чтения — это функция, которая может обеспечить доступность реплики базы данных, доступной только для чтения. Включение маршрутизации только для чтения
Необходимо установить соединение с прослушивателем группы доступности Always On.
Ключевое слово
ApplicationIntentв строке подключения должно иметь значениеReadOnly.Группа доступности должна быть настроена администратором базы данных на поддержку маршрутизации только для чтения.
Возможно, что не все из нескольких соединений, использующих маршрутизацию только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения. Чтобы гарантировать, что все запросы на подключение только для чтения будут соединяться с одной и той же репликой только для чтения, не указывайте прослушиватель группы доступности в ключевом слове строки подключения Data Source. Вместо этого укажите имя экземпляра, доступного только для чтения.
На маршрутизацию только для чтения может потребоваться больше времени, чем на подключение к первичной реплике, поскольку маршрутизация только для чтения предусматривает прежде всего подключение к первичной реплике, а затем поиск наиболее подходящей доступной для чтения вторичной реплики. Учитывая этот факт, следует увеличить время ожидания входа в систему.