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

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

В этом разделе описывается поддержка высокой доступности и аварийного восстановления в драйверах Microsoft Drivers for PHP for SQL Server, добавленная в версии 3.0.

Начиная с версии 3.0 драйверов Microsoft для PHP для SQL Server, в строке подключения в качестве сервера можно указать прослушиватель группы доступности для группы доступности высокой доступности и аварийного восстановления или экземпляр отказоустойчивого кластера.

Установите MultiSubnetFailover=True, если целевым объектом является База данных SQL Azure, Управляемый экземпляр SQL Azure, база данных SQL в Microsoft Fabric, прослушиватель группы доступности или экземпляр отказоустойчивого кластера. Драйвер пытается параллельно подключить TCP-соединения ко всем разрешенным IP-адресам и использует первое успешное соединение. Если приложение подключено к базе данных, для которой выполняется аварийное переключение, исходное соединение прерывается, и приложение должно открыть новое соединение, чтобы продолжить работу после аварийного переключения.

Когда DNS разрешается на один адрес, MultiSubnetFailover=True не создаёт дополнительных попыток параллельного подключения, поэтому он безопасен на целях с одним IP.

Драйверы принимают True, 1 или Yes, в любом случае, и передают эту опцию базовому драйверу ODBC. Они рассматривают любое другое значение как False, не сообщая об этом как об ошибке, поэтому значение с опечаткой молча отключает этот параметр.

MultiSubnetFailover имеет следующие ограничения:

  • Вы не можете использовать его поверх протокола, кроме TCP.

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

  • Вы не можете использовать его с зеркалированием базы данных. Не задавайте этот параметр, если в строке подключения также используется Failover_Partner или если вы подключаетесь к первичной реплике, а не к прослушивателю группы доступности. Дополнительные сведения см. в разделе «Переход к использованию многоподсетевых кластеров при использовании зеркалирования баз данных».

Для База данных SQL Azure serverless с включенной автопаузой, если вы задаете LoginTimeout, укажите не менее 60 секунд. Автоматически приостановленная база данных возобновляется при первой попытке подключения, и эта попытка может провалиться из-за ошибки 40613, пока база данных возобновляется, поэтому приложение должно попробовать снова. Для получения дополнительной информации смотрите разделы «Автопауза и автовозобновление».

Для получения дополнительной информации о группах доступности Always On см. раздел «Что такое группа доступности Always On?».

Прозрачное разрешение IP-адресов сети (TNIR)

Прозрачное разрешение сетевых IP-адресов (TNIR) — это устаревший механизм резервного переключения драйвера ODBC между несколькими IP-адресами, которым управляет параметр подключения TransparentNetworkIPResolution; по умолчанию он включён.

Следуйте рекомендациям из предыдущего раздела и установите MultiSubnetFailover=True для указанных там целей. Когда MultiSubnetFailover=True, драйвер пытается параллельно установить TCP-соединения со всеми разрешёнными IP-адресами. Опция TransparentNetworkIPResolution не влияет на последовательность соединения, поэтому её не нужно устанавливать или учитывать в строка подключения.

Для полной ссылки на взаимодействие TNIR и MultiSubnetFailover см. раздел «Использование прозрачного сетевого IP-разрешения с драйвером ODBC».

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

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

При обновлении PHP-приложения, которое в настоящее время использует зеркалирование базы данных, для работы в многоподсетевой среде удалите свойство соединения Failover_Partner и замените его свойством MultiSubnetFailover, установив значение True. Замените имя сервера в строке подключения на прослушиватель группы доступности. Если строка подключения использует Failover_Partner и MultiSubnetFailover=True, драйвер выдает ошибку. Однако, если строка подключения использует Failover_Partner и MultiSubnetFailover=False (или ApplicationIntent=ReadWrite), используется зеркальное отображение базы данных.

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

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

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

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

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

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

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

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

  • Георепликация

  • Масштабирование чтения

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

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

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

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

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

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

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

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

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

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