Высокая доступность и аварийное восстановление в Linux и macOS

Скачать драйвер ODBC

Драйверы ODBC для Linux и macOS поддерживают группы доступности Always On. Дополнительные сведения о группах доступности Always On см. в следующих статьях:

Прослушиватель для конкретной группы доступности можно задать в строке подключения. Если приложение ODBC для Linux или macOS подключено к базе данных в группе доступности, которая выполняет отработку отказа, то исходное соединение разрывается. Затем приложение должно установить новое соединение для продолжения работы после отработки отказа.

Если вы не подключаетесь к прослушивателю группы доступности, драйвер ODBC для Linux или macOS будет последовательно перебирать все IP-адреса, связанные с именем узла DNS. Если первый IP-адрес, возвращенный DNS-сервером, будет недоступным, эти итерации могут занять много времени.

При подключении к прослушивателю группы доступности драйвер пытается установить соединения ко всем IP-адресам в параллельном режиме. Если попытка соединения завершается успешно, драйвер отменяет все ожидающие попытки подключения.

Примечание

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

Подключение с помощью MultiSubnetFailover

При соединении с прослушивателем группы доступности SQL Server 2012 (11.x) или с экземпляром отказоустойчивого кластера SQL Server 2012 (11.x) всегда указывайте MultiSubnetFailover=Yes. MultiSubnetFailover обеспечивает быструю отработку отказа для всех групп доступности и экземпляра отказоустойчивого кластера в SQL Server 2012 (11.x).

Это свойство соединения также значительно сокращает время отработки отказа для топологий Always On с одной или несколькими подсетями. При отработке отказа в сети с несколькими подсетями клиент пытается установить соединения параллельно. При отработке отказа драйвер агрессивно повторяет попытки соединения по протоколу TCP.

Свойство соединения MultiSubnetFailover указывает, что приложение развертывается в группе доступности или экземпляре отказоустойчивого кластера. Драйвер пытается подключиться к базе данных на основном экземпляре SQL Server, пытаясь подключиться ко всем IP-адресам.

При соединении с MultiSubnetFailover=Yes клиент предпринимает повторные попытки установить TCP-соединение быстрее интервалов повторной отправки TCP-пакетов по умолчанию для операционной системы. MultiSubnetFailover=Yes позволяет ускорить восстановление соединения после отработки отказа группы доступности Always On или экземпляра отказоустойчивого кластера Always On. MultiSubnetFailover=Yes применяется к группам доступности и экземплярам отказоустойчивого кластера как с одной подсетью, так и с несколькими.

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

Рекомендации

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

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

  • Укажите прослушиватель группы доступности в строке подключения вместо сервера.

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

  • С параметром MultiSubnetFailover=Yes можно использовать проверку подлинности SQL Server или проверку подлинности Kerberos — на работу приложения это не повлияет.

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

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

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

  • если расположение вторичных реплик не настроено на прием подключений;

  • Если приложение использует ApplicationIntent=ReadWrite и местоположение дополнительных реплик настроено для доступа только для чтения.

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

Указание намерения приложения

В строке подключения можно указать ключевое слово ApplicationIntent. Присваиваемые значения: ReadWrite (по умолчанию) или ReadOnly.

Если задано значение ApplicationIntent=ReadOnly, при подключении клиент запрашивает рабочую нагрузку чтения. Сервер принудительно реализует намерение в момент соединения и во время выполнения инструкции USE для базы данных.

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

Целевые объекты ReadOnly

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

Если все эти специальные целевые объекты недоступны, выполняется чтение из обычной базы данных.

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

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

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

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

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

  • Администратор базы данных должен настроить группу доступности на включение маршрутизации только для чтения.

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

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

Маршрутизация только для чтения может занять больше времени, чем подключение к первичной реплике. Это происходит потому, что при маршрутизации с правом доступа только для чтения выполняется подключение к первичной реплике, а затем выполняется поиск наиболее подходящей вторичной реплики, доступной для чтения. При выполнении этих нескольких действий время ожидания для операции login нужно увеличить как минимум на 30 секунд.

Синтаксис ODBC

Группы доступности Always On поддерживаются двумя ключевыми словами строки подключения ODBC:

  • ApplicationIntent

  • MultiSubnetFailover

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

Эквивалентными атрибутами подключения являются следующие:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

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

Приложение ODBC, использующее группы доступности Always On, может использовать одну из двух указанных далее функций для установки соединения.

Функция Описание
Функция SQLConnect SQLConnect поддерживает ApplicationIntent и MultiSubnetFailover с помощью имени источника данных (DSN) или атрибута соединения.
Функция SQLDriverConnect SQLDriverConnect поддерживает ApplicationIntent и MultiSubnetFailover с помощью DSN, ключевое слово строки подключения или атрибут соединения.

См. также

Ключевые слова строки подключения и имена источников данных (DSN)

Рекомендации по программированию

Заметки о выпуске