Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается поддержка высокой доступности и аварийного восстановления в драйверах 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-SQLPRIMARY_ROLEиSECONDARY_ROLE.
Если все эти специальные целевые объекты недоступны, выполняется чтение из обычной базы данных.
Ключевое слово ApplicationIntent активирует маршрутизацию только для чтения.
Маршрутизация в режиме только чтения
Маршрутизация только для чтения — это функция, которая способна обеспечить доступность реплики базы данных только для чтения. Чтобы включить маршрутизацию только для чтения, необходимо выполнить следующие условия:
Необходимо подключиться к прослушивателю группы доступности Always On.
Ключевое слово
ApplicationIntentв строке подключения должно иметь значениеReadOnly.Администратор базы данных должен настроить группу доступности на включение маршрутизации только для чтения.
Возможно, не все соединения, для каждого из которых используется маршрутизация только для чтения, будут подключаться к одной и той же реплике только для чтения. Изменения в синхронизации баз данных или в конфигурации маршрутизации сервера могут привести к тому, что клиент будет подключаться к различным репликам только для чтения.
Чтобы гарантировать, что все запросы только для чтения будут подключаться к одной и той же реплике только для чтения, не указывайте прослушиватель группы доступности в параметре строки подключения Server. Вместо этого укажите имя экземпляра, доступного только для чтения.
Маршрутизация запросов только для чтения может занимать больше времени, чем подключение к основному серверу. Это происходит потому, что при маршрутизации с правом доступа только для чтения выполняется подключение к первичной реплике, а затем выполняется поиск наиболее подходящей вторичной реплики, доступной для чтения. Из-за необходимости выполнить несколько шагов следует увеличить тайм-аут login как минимум до 30 секунд.