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 SQLCMD
o , 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 -M
de failover de várias sub-redes.
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 oMultiSubNetFailover
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 doRegisterAllProvidersIP
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
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:
Para o SharePoint 2007: é classificado como um aplicativo herdado. Portanto, o SharePoint 2007 não pode ser configurado para usar o
MultiSubnetFailover
parâmetro. Em vez disso, você precisa usar o comando do Windows PowerShell descrito na seção Resolução .Para o SharePoint 2010: agora estão disponíveis pacotes de atualização cumulativa que adicionam suporte para o
MultiSubnetFailover
parâmetro. Para obter mais informações sobre os pacotes de atualização, consulte o seguinte artigo: