Compartilhar via


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 resolver o problema que ocorre quando você se conecta a um ouvinte do grupo de disponibilidade Always On do SQL Server em um ambiente de várias sub-redes.

Versão original do produto: 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
Número original do KB: 2792139

Sintomas

Depois de configurar o ouvinte do grupo de disponibilidade para um Grupo de Disponibilidade Always On no Microsoft SQL Server 2012, talvez você não consiga executar ping no ouvinte ou conectar-se a ele de um aplicativo.

Por exemplo, quando você tenta se conectar a um ouvinte do SQL Server usando SQLCMDo , a conexão atinge o tempo limite. Além disso, você recebe uma mensagem de erro semelhante à seguinte:

Sqlcmd: Erro: Microsoft SQL Native Client: Tempo limite de login expirado.

Observação

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

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

Captura de tela da janela do prompt de comando quando você faz ping no ouvinte para a disponibilidade do aglisten.

Observação

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

Causa

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 incluído no .NET Framework 4 e em versões posteriores do .NET Framework e é portado de volta para o .NET Framework 3.5.

Observação

O PING comando é uma ferramenta de teste de conectividade simples que não suporta o novo parâmetro.

Solução

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

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

  • Para resolver essa situação quando seus clientes legados não podem usar a MultiSubnetFailover propriedade, você pode alterar o valor do RegisterAllProvidersIP listener para 0. Para fazer isso, execute o seguinte comando na interface de linha de comando do 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 cancelado do servidor DNS e o endereço IP offline deve ser registrado no servidor DNS quando ocorrer um failover. Isso pode causar um atraso na 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 na qual uma réplica do grupo de disponibilidade está hospedada. 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 do SQL Server na sub-rede 1 e o outro endereço é usado quando um aplicativo se conecta a uma instância do SQL Server na sub-rede 2.

Nos bastidores, o ouvinte cria um recurso de Ponto de Acesso para Cliente do cluster do Windows. Uma de suas propriedades é RegisterAllProvidersIP. Quando um ouvinte é criado, ele é 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 tente conexões em paralelo com 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 tempos limite de logon.

Observação

O problema mencionado neste artigo também afeta os ambientes do SharePoint configurados para usar uma réplica secundária somente leitura do Grupo de Disponibilidade Always On. Para resolver esse problema, execute qualquer uma das seguintes ações que se aplica à sua versão do SharePoint:

Referências