El tiempo de espera se produce al conectarse a un agente de escucha de Always On en un entorno de varias subredes

Este artículo le ayuda a resolver el problema que se produce al conectarse a un agente de escucha de grupo de disponibilidad de SQL Server Always On en un entorno de varias subredes.

Versión original del producto: 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 de KB original: 2792139

Síntomas

Después de configurar el agente de escucha del grupo de disponibilidad para un grupo de disponibilidad de Always On en Microsoft SQL Server 2012, es posible que no pueda hacer ping al agente de escucha ni conectarse a él desde una aplicación.

Por ejemplo, al intentar conectarse a un agente de escucha de SQL Server mediante SQLCMD, se agota el tiempo de espera de la conexión. Además, recibirá un mensaje de error similar al siguiente:

Sqlcmd: Error: Microsoft SQL Native Client: Tiempo de espera de inicio de sesión expirado.

Nota:

Estos síntomas suelen ser intermitentes o están relacionados con la conmutación por error del recurso del grupo de disponibilidad.

En la captura de pantalla siguiente se muestra un ejemplo de lo que ocurre al intentar hacer ping al agente de escucha para la disponibilidad de aglisten. En la captura de pantalla también se muestra una conexión correcta a SQL Server mediante el SQLCMD comando cuando se incluye el parámetro -Mde conmutación por error de varias subredes .

Captura de pantalla de la ventana del símbolo del sistema al hacer ping al agente de escucha para obtener la disponibilidad de aglisten.

Nota:

Puede usar el SQLCMD comando junto con el -M parámetro como se muestra en la captura de pantalla para conectarse al agente de escucha.

Causa

Este problema se produce porque la aplicación usa un proveedor de datos heredado que no admite el nuevo MultiSubnetFailover parámetro o no está configurado para usar este parámetro.

Este parámetro se admite en las versiones más recientes del controlador SQLClient que se incluye con .NET Framework 4 y con versiones posteriores de .NET Framework, y se vuelve a migrar a .NET Framework 3.5.

Nota:

El PING comando es una herramienta de prueba de conectividad sencilla que no admite el nuevo parámetro.

Solución

Puede usar una de las siguientes resoluciones según corresponda a su caso:

  • Para resolver esta situación cuando los proveedores de datos admiten el MultiSubNetFailover parámetro, agregue el MultiSubNetFailover parámetro al cadena de conexión y establézcalo en true.

  • Para resolver esta situación cuando los clientes heredados no pueden usar la MultiSubnetFailover propiedad , puede cambiar el valor del agente de RegisterAllProvidersIP escucha a 0. Para ello, ejecute el siguiente comando desde la Windows PowerShell interfaz de línea de comandos:

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

    Captura de pantalla que muestra la salida de un ejemplo del comando en Windows PowerShell.

Nota:

Después de establecer el RegisterAllProvidersIP valor en 0, la dirección IP en línea actual debe estar sin registrar desde el servidor DNS y la dirección IP sin conexión debe registrarse en el servidor DNS cuando se produce una conmutación por error. Esto puede provocar un retraso de conexión para la siguiente conmutación por error.

Más información

Al intentar conectarse a un agente de escucha definido en más de una subred, la operación puede producir un error si el controlador cliente intenta conectarse mediante una de las direcciones IP sin conexión del agente de escucha.

Cuando se crea un agente de escucha, se designa una dirección IP para cada subred única en la que se hospeda una réplica de grupo de disponibilidad. Por ejemplo, si se crea un agente de escucha para un grupo de disponibilidad que tiene réplicas que existen en dos subredes, se definen dos direcciones IP en el agente de escucha. Una dirección la usa una aplicación que puede conectarse a una instancia de SQL Server en la subred 1 y la otra se usa cuando una aplicación se conecta a una instancia de SQL Server en la subred 2.

En segundo plano, el agente de escucha crea un recurso de punto de acceso de cliente del clúster de Windows. Una de sus propiedades es RegisterAllProvidersIP. Cuando se crea un agente de escucha, se establece en 1 y todas las direcciones IP del agente de escucha se registran en el servidor DNS. Esta configuración proporciona un tiempo de reconexión reducido para los clientes.

Dado que el registro DNS contiene todas las direcciones IP, un cliente que intenta conectarse al agente de escucha debe saber cómo controlar esta situación. El MultiSubnetFailover parámetro permite al controlador de cliente probar las conexiones en paralelo a todas las direcciones IP del agente de escucha. Sin el MultiSubnetFailover parámetro , el controlador de cliente intentará conectarse secuencialmente a todas las direcciones IP del agente de escucha. Las conexiones secuenciales pueden provocar tiempos de inicio de sesión largos o tiempos de espera de inicio de sesión.

Nota:

El problema que se menciona en este artículo también afecta a los entornos de SharePoint que están configurados para usar una réplica de solo lectura secundaria del grupo de disponibilidad de Always On. Para resolver este problema, realice cualquiera de las siguientes acciones que se aplican a la versión de SharePoint:

Referencias