O tempo limite ocorre quando você se conecta a um ouvinte Always On no ambiente de várias sub-redes

Este artigo ajuda você a resolve o problema que ocorre quando você se conecta a um ouvinte de grupo de disponibilidade SQL Server Always On em um ambiente de várias sub-redes.

Versão original do produto: SQL Server Desenvolvedor 2012, SQL Server 2012 Enterprise, SQL Server 2012 Express, SQL Server 2012 Standard, SQL Server Web 2012, SQL Server Enterprise Core 2012
Número de KB original: 2792139

Sintomas

Depois de configurar o ouvinte do grupo de disponibilidade para um grupo de disponibilidade Always On no Microsoft SQL Server 2012, talvez não seja possível localizar o ouvinte ou conectá-lo a ele de um aplicativo.

Por exemplo, quando você tenta se conectar a um ouvinte de SQL Server usando SQLCMD, o tempo limite de conexão. Além disso, você recebe uma mensagem de erro que se assemelha ao seguinte:

Sqlcmd: Erro: Microsoft SQL Native Client: tempo limite de logon expirou.

Observação

Esses sintomas geralmente são intermitentes ou relacionados ao failover do recurso do grupo de disponibilidade.

A captura de tela a seguir mostra um exemplo do que ocorre quando você tenta pingar o ouvinte para a disponibilidade de aglisten. A captura de tela também mostra uma conexão bem-sucedida com SQL Server usando o SQLCMD comando quando você inclui o parâmetro -Mde failover de várias sub-redes .

Captura de tela da janela Prompt de Comando quando você pinga no ouvinte para a disponibilidade de aglisten.

Observação

Você pode usar o SQLCMD comando junto com o -M parâmetro, conforme mostrado na captura de tela para se conectar ao ouvinte.

Motivo

Esse problema ocorre porque seu aplicativo usa um provedor de dados herdado que não dá suporte ao novo MultiSubnetFailover parâmetro ou não está configurado para usar esse parâmetro.

Esse parâmetro tem suporte em versões mais recentes do driver SQLClient que é incluído com o .NET Framework 4 e com versões posteriores do .NET Framework e está de volta portado para o .NET Framework 3.5.

Observação

O PING comando é uma ferramenta simples de teste de conectividade que não dá suporte ao novo parâmetro.

Resolução

Você pode usar uma das seguintes resoluções conforme aplicável ao seu caso:

  • Para resolve essa situação quando os provedores de dados dão suporte ao MultiSubNetFailover parâmetro, adicione o MultiSubNetFailover parâmetro ao cadeia de conexão e defina-o como true.

  • Para resolve essa situação quando seus clientes herdados não puderem usar a MultiSubnetFailover propriedade, você pode alterar o valor do RegisterAllProvidersIP ouvinte para 0. Para fazer isso, execute o seguinte comando na interface de linha de comando Windows PowerShell:

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

    A captura de tela mostra a saída de um exemplo do comando no Windows PowerShell.

Observação

Depois de definir o RegisterAllProvidersIP valor como 0, o endereço IP online atual deve ser não registrado no servidor DNS e o endereço IP offline deve ser registrado no servidor DNS quando ocorrer um failover. Isso pode causar um atraso de conexão para o próximo failover.

Mais informações

Quando você tenta se conectar a um ouvinte definido em mais de uma sub-rede, a operação pode falhar se o driver cliente tentar se conectar usando um dos endereços IP offline do ouvinte.

Quando um ouvinte é criado, um endereço IP é designado para cada sub-rede exclusiva em que um grupo de disponibilidade réplica está hospedado. Por exemplo, se um ouvinte for criado para um grupo de disponibilidade que tenha réplicas existentes em duas sub-redes, dois endereços IP serão definidos no ouvinte. Um endereço é usado por um aplicativo que pode se conectar a uma instância de SQL Server na sub-rede 1 e o outro endereço é usado quando um aplicativo se conecta a uma instância de SQL Server na sub-rede 2.

Nos bastidores, o ouvinte cria um recurso do Ponto de Acesso ao Cliente do cluster do Windows. Uma de suas propriedades é RegisterAllProvidersIP. Quando um ouvinte é criado, isso é definido como 1 e todos os endereços IP do ouvinte são registrados no servidor DNS. Essa configuração fornece tempo de reconexão reduzido para clientes.

Como o registro DNS contém todos os endereços IP, um cliente que tenta se conectar ao ouvinte deve saber como lidar com essa situação. O MultiSubnetFailover parâmetro permite que o driver cliente experimente conexões em paralelo a todos os endereços IP do ouvinte. Sem o MultiSubnetFailover parâmetro, o driver cliente tentará se conectar sequencialmente a todos os endereços IP do ouvinte. Conexões sequenciais podem causar um longo tempo de logon ou tempo limite de logon.

Observação

O problema mencionado neste artigo também afeta ambientes do SharePoint configurados para usar o réplica secundário do Grupo de Disponibilidade de Always On. Para resolve esse problema, execute qualquer uma das seguintes ações aplicadas à sua versão do SharePoint:

Referências