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


Время ожидания возникает при подключении к прослушивателю Always On в среде с несколькими подсетью.

Эта статья поможет устранить проблему, которая возникает при подключении к прослушивателю группы доступности SQL Server Always On в среде с несколькими подсетами.

Исходная версия продукта: SQL Server 2012 Developer, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server 2012 Web, SQL Server 2012 Enterprise Core
Исходный номер базы знаний: 2792139

Симптомы

После настройки прослушивателя группы доступности для группы доступности Always On в Microsoft SQL Server 2012 может оказаться не удается связаться с прослушивателем или подключиться к нему из приложения.

Например, при попытке подключиться к прослушивателю SQL Server с помощью SQLCMD, время ожидания подключения истекает. Кроме того, появляется сообщение об ошибке, похожее на следующее:

Sqlcmd: Ошибка: Собственный клиент Microsoft SQL: истекло время ожидания входа.

Примечание.

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

На следующем снимку экрана показан пример того, что происходит при попытке проверить связь с прослушивателем для доступности aglisten. Снимок экрана также показывает успешное подключение к SQL Server с помощью SQLCMD команды при включении параметра -Mотработки отказа нескольких подсетей .

Снимок экрана: окно командной строки при подключении прослушивателя к доступности aglisten.

Примечание.

Для подключения к прослушивателю SQLCMD можно использовать команду вместе с параметром -M , как показано на снимке экрана.

Причина

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

Этот параметр поддерживается в более поздних версиях драйвера SQLClient, который входит в состав платформа .NET Framework 4 и более поздних версий платформа .NET Framework и обратно переносится в платформа .NET Framework 3.5.

Примечание.

Команда PING — это простое средство тестирования подключения, которое не поддерживает новый параметр.

Разрешение

В вашем случае можно использовать одно из следующих решений:

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

  • Чтобы устранить эту ситуацию, когда устаревшие клиенты не могут использовать MultiSubnetFailover свойство, можно изменить значение прослушивателя RegisterAllProvidersIP на 0. Для этого выполните следующую команду в интерфейсе командной строки Windows PowerShell:

    Import-Module FailoverClusters
    Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
    

    Снимок экрана: выходные данные примера команды в Windows PowerShell.

Примечание.

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

Дополнительная информация

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

При создании прослушивателя IP-адрес назначается для каждой уникальной подсети, в которую размещена группа доступности реплика. Например, если прослушиватель создается для группы доступности с репликами, существующими в двух подсетях, в прослушивателе определяются два IP-адреса. Один адрес используется приложением, которое может подключаться к экземпляру SQL Server в подсети 1, а другой — при подключении приложения к экземпляру SQL Server в подсети 2.

В фоновом режиме прослушиватель создает ресурс клиентской точки доступа кластера Windows. Одним из его свойств является RegisterAllProvidersIP. При создании прослушивателя устанавливается значение 1, а все IP-адреса прослушивателя регистрируются на DNS-сервере. Эта конфигурация позволяет сократить время повторного подключения для клиентов.

Поскольку запись DNS содержит все IP-адреса, клиент, который пытается подключиться к прослушивателю, должен знать, как справиться с этой ситуацией. Параметр MultiSubnetFailover позволяет драйверу клиента пробовать подключения параллельно ко всем IP-адресам прослушивателя. MultiSubnetFailover Без параметра драйвер клиента будет пытаться последовательно подключиться ко всем IP-адресам прослушивателя. Последовательные подключения могут привести к длительному времени входа или истечению времени ожидания входа.

Примечание.

Проблема, описанная в этой статье, также влияет на среды SharePoint, настроенные для использования дополнительного реплика группы доступности Always On. Чтобы устранить эту проблему, выполните любое из следующих действий, применимых к вашей версии SharePoint:

Ссылки