Время ожидания возникает при подключении к прослушивателю 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
отработки отказа нескольких подсетей .
Примечание.
Для подключения к прослушивателю 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
Примечание.
После установки 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:
Для SharePoint 2007: классифицируется как устаревшее приложение. Поэтому sharePoint 2007 нельзя настроить для использования
MultiSubnetFailover
параметра . Вместо этого необходимо использовать команду Windows PowerShell, описанную в разделе Разрешение.Для SharePoint 2010: теперь доступны пакеты накопительных обновлений
MultiSubnetFailover
, которые добавляют поддержку параметра . Дополнительные сведения о пакетах обновления см. в следующей статье: