Поделиться через


Поддержка высокого уровня доступности и аварийного восстановления собственного клиента SQL Server

В этом разделе описывается поддержка Native Client SQL Server (начиная с версии SQL Server 2012) для Группы доступности AlwaysOn. Дополнительные сведения о Группы доступности AlwaysOn см. в разделах Прослушиватели групп доступности, возможность подключения клиентов и отработка отказа приложений (SQL Server), Создание и настройка групп доступности (SQL Server), Отказоустойчивая кластеризация и группы доступности AlwaysOn (SQL Server) и Активные вторичные реплики: Доступ к вторичным репликам только для чтения (группы доступности AlwaysOn).

Прослушиватель для заданной группы доступности можно задать в строке подключения. Если приложение Native Client SQL Server подключено к базе данных в группе доступности, которая выполняет переход на другой ресурс, то исходное соединение является разорванным, а приложение должно установить новое соединение, чтобы продолжить работу после отработки отказа.

Если соединение с прослушивателем группы доступности не будет установлено, а с именем узла связано несколько IP-адресов, то собственный клиент Native Client SQL Server последовательно переберет все IP-адреса, связанные с записью DNS. Это может занять много времени, если первый IP-адрес, возвращенный DNS-сервером, не привязан ни к одной из сетевых интерфейсных плат. При установлении соединения с прослушивателем группы доступности SQL Server Native Client пытается установить соединения со всеми IP-адресами параллельно. Если одна из попыток соединения завершается успешно, то все остальные производимые попытки соединения отменяются.

ПримечаниеПримечание

Увеличение времени ожидания соединения и реализация логики повторного соединения позволяют повысить вероятность соединения приложения с группой доступности. Кроме того, в связи с возможностью неудачного подключения при отработке отказа группы доступности следует реализовать логику повторного соединения, обеспечивающую неограниченное число попыток соединения до достижения успеха.

Соединение с помощью MultiSubnetFailover

При установлении соединения с прослушивателем группы доступности SQL Server 2012 или экземпляром отказоустойчивого кластера SQL Server 2012 всегда необходимо указывать MultiSubnetFailover=Yes. MultiSubnetFailover дает возможность группам доступности и экземпляру отказоустойчивого кластера в SQL Server 2012 быстрее выполнить отработку отказа, а также значительно сократить время перехода на другой ресурс для топологий AlwaysOn с одной или несколькими подсетями. При отработке отказа с в нескольких подсетях клиент будет выполнять попытки соединения параллельно. Во время отработки отказа в подсети собственный клиент SQL Server будет активно выполнять попытки повторного TCP-соединения.

Свойство соединения MultiSubnetFailover указывает, что приложение развертывается в группе доступности или на экземпляре отказоустойчивого кластера, а также что собственный клиент SQL Server Native Client выполнит попытку соединения с базой данных в основном экземпляре SQL Server, попытавшись установить соединение со всеми IP-адресами группы доступности. Если для соединения указано MultiSubnetFailover=Yes, клиент повторяет попытку соединения по TCP быстрее, чем истекают интервалы ожидания до пересылки по TCP операционной системы по умолчанию. Это позволяет ускорить восстановление соединения после отработки отказа в группе доступности AlwaysOn или в экземпляре отказоустойчивого кластера AlwaysOn; метод может применяться к группам доступности и экземплярам отказоустойчивых кластеров как с одной, так и с несколькими подсетями.

Дополнительные сведения о примерах ключевых слов в строках подключения см. в разделе Использование ключевых слов строки подключения с собственным клиентом SQL Server.

Указание параметра MultiSubnetFailover=Yes при соединении с объектом, отличным от прослушивателя группы доступности или экземпляра отказоустойчивого кластера, может привести к снижению производительности и не поддерживается.

Следуйте приведенным ниже рекомендациям для подключения к серверу в группе доступности или экземпляру отказоустойчивого кластера.

  • Используйте свойство соединения MultiSubnetFailover при установке соединения с одной подсетью или с несколькими подсетями; производительность возрастет в любом случае.

  • Чтобы установить соединение с группой доступности, указывайте ее прослушиватель в строке подключения вместо сервера.

  • При установлении соединения с экземпляром SQL Server, настроенным на работу с более чем 64 IP-адресами, будет возникать ошибка соединения.

  • Поведение приложения, использующего свойство соединения MultiSubnetFailover, не зависит от типа проверки подлинности: SQL Server, Kerberos или Windows.

  • Значение loginTimeout можно увеличить с учетом времени отработки отказа, это уменьшит количество попыток повторного соединения в приложениях.

  • Распределенные транзакции не поддерживаются.

Если маршрутизация только для чтения неактивна, то подключение к местоположению вторичной реплики в группе доступности завершится ошибкой в следующих случаях:

  1. Если местоположение вторичных реплик не настроено для приема подключений.

  2. Если приложение использует свойство ApplicationIntent=ReadWrite (которое обсуждается ниже) и местоположение дополнительных реплик настроено для доступа только для чтения.

При соединении произойдет ошибка, если первичная реплика настроена для отклонения рабочих нагрузок только для чтения, а строка подключения содержит ApplicationIntent=ReadOnly.

Переход с зеркального отображения базы данных на использование кластеров с несколькими подсетями

Если в строке подключения содержатся ключевые слова MultiSubnetFailover и Failover_Partner, то при соединении произойдет ошибка. Ошибка возникает также в том случае, если используется MultiSubnetFailover и SQL Server возвращает ответ партнер по обеспечению отработки отказа, указывающего на то, что он является частью пары зеркального отображения базы данных.

Если производится обновление приложения собственного клиента Native Client SQL Server, в котором в данный момент используется зеркальное отображение базы данных в сценарии с несколькими подсетями, то следует удалить свойство соединения Failover_Partner и заменить его свойством MultiSubnetFailover со значением Yes, а также заменить имя сервера в строке подключения на имя прослушивателя группы доступности. Если в строке подключения используются Failover_Partner и MultiSubnetFailover=Yes, то драйвер выдаст ошибку. Но если в строке подключения используются параметры Failover_Partner и MultiSubnetFailover=No (или ApplicationIntent=ReadWrite), то приложение будет использовать зеркальное отображение базы данных.

Если в базе данных-источнике группы доступности используется зеркальное отображение баз данных, то драйвер вернет ошибку. Это также произойдет в том случае, если используется параметр MultiSubnetFailover=Yes в строке подключения, устанавливающей соединение с базой данных-источником, а не с прослушивателем группы доступности.

Задание намерения приложения

При указании параметра ApplicationIntent=ReadOnly клиент запросит рабочую нагрузку чтения при установлении соединения с базой данных с поддержкой AlwaysOn. Сервер принудительно реализует намерение в момент соединения и во время выполнения инструкции USE database, но только в базе данных с поддержкой Always On.

Ключевое слово ApplicationIntent не работает с базами данных прежних версий, доступными только для чтения.

База данных может допускать или не допускать рабочую нагрузку чтения для целевой базы данных AlwaysOn. (Это выполняется с использованием предложения ALLOW_CONNECTIONS инструкций PRIMARY_ROLE и SECONDARY_ROLE Transact-SQL.)

Ключевое слово ApplicationIntent служит для включения маршрутизации только для чтения.

Маршрутизация только для чтения

Маршрутизация только для чтения — это функция, которая может обеспечить доступность реплики базы данных, доступной только для чтения. Включение маршрутизации только для чтения

  1. Необходимо установить соединение с прослушивателем группы доступности Always On.

  2. Ключевое слово ApplicationIntent строки подключения должно быть установлено в значение ReadOnly.

  3. Группа доступности должна быть настроена администратором базы данных на поддержку маршрутизации только для чтения.

Возможно, что не все из нескольких соединений, использующих маршрутизацию только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения. Чтобы гарантировать, что все запросы на подключение только для чтения будут соединяться с одной и той же репликой только для чтения, не указывайте прослушиватель группы доступности в ключевом слове строки подключения Server. Вместо этого укажите имя экземпляра, доступного только для чтения.

На маршрутизацию только для чтения может потребоваться больше времени, чем на подключение к первичной реплике, поскольку маршрутизация только для чтения предусматривает прежде всего подключение к первичной реплике, а затем поиск наиболее подходящей доступной для чтения вторичной реплики. Учитывая этот факт, следует увеличить время ожидания входа в систему.

Интерфейс ODBC

Для поддержки Группы доступности AlwaysOn в собственном клиенте Native Client SQL Server были добавлены два ключевых слова строки подключения ODBC:

  • ApplicationIntent

  • MultiSubnetFailover

Дополнительные сведения о ключевых словах строк подключений ODBC в собственном клиенте SQL Server см. в разделе Использование ключевых слов строки подключения с собственным клиентом SQL Server.

Эквивалентными свойствами соединения являются следующие:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

Дополнительные сведения о свойствах соединений ODBC в собственном клиенте SQL Server см. в разделе SQLSetConnectAttr.

Возможность использования ключевых слов ApplicationIntent и MultiSubnetFailover будет доступна в администраторе источников данных ODBC для имен DSN, который использует драйвер собственного клиента Native Client SQL Server, начиная с SQL Server 2012.

Приложение собственного клиента ODBC SQL Server для создания соединения может использовать одну из трех функций.

Функция

Описание

SQLBrowseConnect

Список серверов, возвращаемый SQLBrowseConnect, не содержит имен виртуальных сетей. Будет отображен только список серверов без указания того, является ли сервер отдельным, сервером-источником или сервером-получателем в отказоустойчивом кластере, в котором содержатся два экземпляра SQL Server, включенные для Группы доступности AlwaysOn, или более. При возникновении ошибки подключения к серверу причина может заключаться в несоответствии настройки ApplicationIntent конфигурации сервера.

Поскольку SQLBrowseConnect не распознает серверы в отказоустойчивых кластерах, содержащих два или более экземпляра SQL Server, которые были включены для Группы доступности AlwaysOn, SQLBrowseConnect не учитывает ключевое слово строки подключения MultiSubnetFailover.

SQLConnect

SQLConnect поддерживает ApplicationIntent и MultiSubnetFailover с помощью имени DSN или свойств соединения.

SQLDriverConnect

SQLDriverConnect поддерживает ApplicationIntent и MultiSubnetFailover с использованием ключевых слов строки подключения, свойств соединения и имени DSN.

OLE DB

OLE DB в собственном клиенте SQL Server не поддерживает ключевое слово MultiSubnetFailover.

OLE DB в собственном клиенте SQL Server поддерживает назначение приложения. Для назначений приложений OLE DB будет поддерживаться тот же режим, что и для приложений ODBC (см. выше).

В собственном клиенте SQL Server для поддержки Группы доступности AlwaysOn было добавлено одно ключевое слово строки подключения OLE DB:

  • Application Intent

Дополнительные сведения о ключевых словах строк подключения в собственном клиенте SQL Server см. в разделе Использование ключевых слов строки подключения с собственным клиентом SQL Server.

Эквивалентными свойствами соединения являются следующие:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

В приложении собственного клиента OLE DB SQL Server для указания назначения приложения может использоваться один из следующих методов.

  • IDBInitialize::Initialize
    IDBInitialize::Initialize использует ранее настроенный набор свойств для инициализации источника данных и создания объекта источника данных. Укажите назначение приложения в качестве свойства поставщика или в виде расширенной строки свойств.

  • IDataInitialize::GetDataSource
    IDataInitialize::GetDataSource принимает строку подключения, которая может содержать ключевое слово Application Intent.

  • IDBProperties::GetProperties
    IDBProperties::GetProperties получает значение свойства, которое в настоящее время задано для источника данных. Значение Application Intent можно получить с помощью свойств DBPROP_INIT_PROVIDERSTRING и SSPROP_INIT_APPLICATIONINTENT.

  • IDBProperties::SetProperties
    Чтобы задать значение свойства ApplicationIntent, вызовите IDBProperties::SetProperties, передав свойство SSPROP_INIT_APPLICATIONINTENT со значением ReadWrite или ReadOnly или свойство DBPROP_INIT_PROVIDERSTRING со значением, содержащим ApplicationIntent=ReadOnly или ApplicationIntent=ReadWrite.

Назначение приложения можно указать в поле «Свойства назначения приложения» на вкладке «Все» в диалоговом окне Свойства канала передачи данных.

После установки неявных соединений эти подключения будут использовать настройку назначения приложения для родительского подключения. Аналогичным образом несколько сеансов, созданных с использованием одного источника данных, будут наследовать настройки назначения приложения от источника данных.

См. также

Основные понятия

Использование ключевых слов строки подключения с собственным клиентом SQL Server

Другие ресурсы

Компоненты собственного клиента SQL Server