Поддержка высокого уровня доступности и аварийного восстановления собственного клиента SQL Server
В этом разделе рассматривается SQL Server Native Client поддержка (добавленная в SQL Server 2012) для групп доступности Always On. Дополнительные сведения о группах доступности Always On см. в разделах Прослушиватели групп доступности, подключение клиентов и отработка отказа приложений (SQL Server),Создание и настройка групп доступности (SQL Server),Отказоустойчивая кластеризация и Группы доступности AlwaysOn (SQL Server) и Активные вторичные реплики: доступные для чтения вторичные реплики (группы доступности AlwaysOn).
Прослушиватель для заданной группы доступности можно задать в строке подключения. Если приложение SQL Server Native Client подключено к базе данных в группе доступности, которая выполняет отработку отказа, исходное подключение разрывается, и приложение должно открыть новое подключение, чтобы продолжить работу после отработки отказа.
Если вы не подключаетесь к прослушивателю группы доступности и если с именем узла связано несколько IP-адресов, SQL Server Native Client будет последовательно выполнять итерацию по всем 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 Native Client будет активно повторять tcp-подключение.
Свойство MultiSubnetFailover
подключения указывает, что приложение развертывается в группе доступности или экземпляре отказоустойчивого кластера и что SQL Server Native Client попытается подключиться к базе данных на экземпляре первичного SQL Server, пытаясь подключиться ко всем IP-адресам. Если MultiSubnetFailover=Yes
для подключения задано значение , клиент повторяет попытки подключения TCP быстрее, чем интервалы повторной передачи TCP операционной системы по умолчанию. Это позволяет ускорить восстановление соединения после отработки отказа в группе доступности AlwaysOn или в экземпляре отказоустойчивого кластера AlwaysOn; метод может применяться к группам доступности и экземплярам отказоустойчивых кластеров как с одной, так и с несколькими подсетями.
Дополнительные сведения о ключевых словах строки подключения см. в статье Использование ключевых слов строки подключения с SQL Server Native Client.
Указание параметра MultiSubnetFailover=Yes
при соединении с объектом, отличным от прослушивателя группы доступности или экземпляра отказоустойчивого кластера, может привести к снижению производительности и не поддерживается.
Следуйте приведенным ниже рекомендациям для подключения к серверу в группе доступности или экземпляру отказоустойчивого кластера.
Используйте свойство соединения
MultiSubnetFailover
при установке соединения с одной подсетью или с несколькими подсетями; производительность возрастет в любом случае.Чтобы установить соединение с группой доступности, указывайте ее прослушиватель в строке подключения вместо сервера.
При установлении соединения с экземпляром SQL Server, настроенным на работу с более чем 64 IP-адресами, будет возникать ошибка соединения.
Используемый тип проверки подлинности (SQL Server, Kerberos или Windows) не влияет на работу приложения, использующего свойство соединения
MultiSubnetFailover
.Значение
loginTimeout
можно увеличить с учетом времени отработки отказа, это уменьшит количество попыток повторного соединения в приложениях.Распределенные транзакции не поддерживаются.
Если маршрутизация только для чтения неактивна, то подключение к местоположению вторичной реплики в группе доступности завершится ошибкой в следующих случаях:
Если местоположение вторичных реплик не настроено для приема подключений.
Если приложение использует свойство
ApplicationIntent=ReadWrite
(которое обсуждается ниже) и местоположение дополнительных реплик настроено для доступа только для чтения.
При соединении произойдет ошибка, если первичная реплика настроена для отклонения рабочих нагрузок только для чтения, а строка подключения содержит ApplicationIntent=ReadOnly
.
Переход с зеркального отображения базы данных на использование кластеров с несколькими подсетями
Если в строке подключения содержатся ключевые слова MultiSubnetFailover
и Failover_Partner
, то при соединении произойдет ошибка. Ошибка также возникает, если MultiSubnetFailover
используется и SQL Server возвращает ответ партнера отработки отказа, указывающий, что он является частью пары зеркального отображения базы данных.
При обновлении приложения SQL Server Native Client, которое в настоящее время использует зеркальное отображение базы данных, до сценария с несколькими подсетями следует удалить 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
в инструкциях Transact-SQL PRIMARY_ROLE
и SECONDARY_ROLE
.)
Ключевое слово ApplicationIntent
служит для включения маршрутизации только для чтения.
Маршрутизация только для чтения
Маршрутизация только для чтения — это функция, которая может обеспечить доступность реплики базы данных, доступной только для чтения. Включение маршрутизации только для чтения
Необходимо установить соединение с прослушивателем группы доступности Always On.
Ключевое слово
ApplicationIntent
строки подключения должно быть установлено в значениеReadOnly
.Группа доступности должна быть настроена администратором базы данных на поддержку маршрутизации только для чтения.
Возможно, что не все из нескольких соединений, использующих маршрутизацию только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения. Чтобы гарантировать, что все запросы на подключение только для чтения будут соединяться с одной и той же репликой только для чтения, не указывайте прослушиватель группы доступности в ключевом слове строки подключения Server
. Вместо этого укажите имя экземпляра, доступного только для чтения.
На маршрутизацию только для чтения может потребоваться больше времени, чем на подключение к первичной реплике, поскольку маршрутизация только для чтения предусматривает прежде всего подключение к первичной реплике, а затем поиск наиболее подходящей доступной для чтения вторичной реплики. Учитывая этот факт, следует увеличить время ожидания входа в систему.
ODBC
Для поддержки групп доступности Always On в SQL Server Native Client добавлены два ключевых слова строки подключения ODBC:
ApplicationIntent
MultiSubnetFailover
Дополнительные сведения о ключевых словах строки подключения ODBC в SQL Server Native Client см. в статье Использование ключевых слов строки подключения с SQL Server Native Client.
Эквивалентными свойствами соединения являются следующие:
SQL_COPT_SS_APPLICATION_INTENT
SQL_COPT_SS_MULTISUBNET_FAILOVER
Дополнительные сведения о свойствах подключения ODBC в SQL Server Native Client см. в разделе SQLSetConnectAttr.
С SQL Server 2012 года в администраторе источников данных ODBC будут доступны функции ApplicationIntent
ключевых слов и MultiSubnetFailover
для имен DSN, использующих драйвер SQL Server Native Client.
Для подключения приложение SQL SERVER NATIVE CLIENT ODBC может использовать одну из трех функций:
Функция | Описание |
---|---|
SQLBrowseConnect | Список серверов, возвращаемый SQLBrowseConnect , не содержит имен виртуальных сетей. Вы увидите только список серверов без указания того, является ли сервер автономным сервером или сервером-получателем или сервером-получателем в кластере отказоустойчивой кластеризации Windows Server (WSFC), который содержит два или более экземпляров SQL Server, которые были включены для Always On групп доступности. При возникновении ошибки подключения к серверу причина может заключаться в несоответствии настройки ApplicationIntent конфигурации сервера.Поскольку SQLBrowseConnect не распознает серверы в кластере отказоустойчивой кластеризации Windows Server (WSFC), который содержит два или более экземпляра SQL Server, которые были включены для Always On групп доступности, SQLBrowseConnect игнорирует MultiSubnetFailover строку подключения ключевое слово. |
SQLConnect | SQLConnect поддерживает ApplicationIntent и MultiSubnetFailover с помощью имени DSN или свойств соединения. |
SQLDriverConnect | SQLDriverConnect поддерживает ApplicationIntent и MultiSubnetFailover с использованием ключевых слов строки подключения, свойств соединения и имени DSN. |
OLE DB
OLE DB в SQL Server Native Client не поддерживает MultiSubnetFailover
ключевое слово.
OLE DB в SQL Server Native Client будет поддерживать намерение приложения. Для назначений приложений OLE DB будет поддерживаться тот же режим, что и для приложений ODBC (см. выше).
Одна строка подключения OLE DB ключевое слово добавлена для поддержки групп доступности Always On в SQL Server Native Client:
Application Intent
Дополнительные сведения о ключевых словах строки подключения в SQL Server Native Client см. в статье Использование ключевых слов строки подключения с SQL Server Native Client.
Эквивалентными свойствами соединения являются следующие:
SSPROP_INIT_APPLICATIONINTENT
DBPROP_INIT_PROVIDERSTRING
Приложение SQL SERVER NATIVE CLIENT OLE DB может использовать один из методов для указания намерения приложения:
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