Configuración de uno o varios agentes de escucha de grupo de disponibilidad AlwaysOn: Resource Manager

SE APLICA A: SQL Server en máquina virtual de Azure

En este documento se muestra cómo usar PowerShell para realizar una de las siguientes tareas:

  • Crear un equilibrador de carga
  • Agregar direcciones IP a un equilibrador de carga existente para grupos de disponibilidad de SQL Server.

Un agente de escucha del grupo de disponibilidad es un nombre de red virtual al que se conectan los clientes para acceder a la base de datos. En Azure Virtual Machines, un equilibrador de carga contiene la dirección IP del cliente de escucha. El equilibrador de carga enruta el tráfico a la instancia de SQL Server que está escuchando en el puerto de sondeo. Normalmente, un grupo de disponibilidad usa un equilibrador de carga interno. Un equilibrador de carga interno de Azure puede hospedar una o varias direcciones IP. Cada una usa un puerto de sondeo específico.

La capacidad para asignar varias direcciones IP a un equilibrador de carga interno es nueva en Azure y solo está disponible en el modelo de Resource Manager. Para completar esta tarea, debe tener un grupo de disponibilidad de SQL Server implementado en Azure Virtual Machines con el modelo de Resource Manager. Las dos máquinas virtuales de SQL Server deben pertenecer al mismo conjunto de disponibilidad. Puede usar la plantilla de Microsoft para crear automáticamente el grupo de disponibilidad en Azure Resource Manager. Esta plantilla crea automáticamente el grupo de disponibilidad, incluido el equilibrador de carga interno. Si lo prefiere, puede configurar manualmente un grupo de disponibilidad AlwaysOn.

Para completar los pasos de este artículo, los grupos de disponibilidad deben estar ya configurados.

Temas relacionados:

Nota

Este artículo se ha actualizado para usar el módulo Az de Azure PowerShell. El módulo Az de PowerShell es el módulo de PowerShell que se recomienda para interactuar con Azure. Para empezar a trabajar con el módulo Az de PowerShell, consulte Instalación de Azure PowerShell. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Inicio de una sesión de PowerShell

Ejecute el cmdlet Connect-Az Account y aparecerá una pantalla de inicio de sesión donde podrá especificar sus credenciales. Use las mismas credenciales que las utilizadas para iniciar sesión en el Portal de Azure.

Connect-AzAccount

Si tiene varias suscripciones, use el cmdlet Set-AzContext para seleccionar la suscripción que se debe usar en la sesión de PowerShell. Para ver la suscripción que se usa en la sesión actual de PowerShell, ejecute Get-AzContext. Para ver todas las suscripciones, ejecute Get-AzSubscription.

Set-AzContext -SubscriptionId '4cac86b0-1e56-bbbb-aaaa-000000000000'

Verificación de la versión de PowerShell

Los ejemplos de este artículo se prueban con la versión 5.4.1 del módulo de Azure PowerShell.

Verifique que el módulo de PowerShell utiliza la versión 5.4.1 o una posterior.

Consulte Instalación del módulo de Azure PowerShell.

Configurar el Firewall de Windows

Configure Firewall de Windows para permitir el acceso de SQL Server. Las reglas de firewall permiten las conexiones TCP para el uso de puertos por la instancia de SQL Server, así como el sondeo del agente de escucha. Para instrucciones detalladas, consulte Configurar Firewall de Windows para el acceso al motor de base de datos. Cree una regla de entrada para el puerto de SQL Server y para el puerto de sondeo.

Si restringe el acceso con Azure Network Security Group, asegúrese de que las reglas de permiso incluyan las direcciones IP de back-end de VM con SQL Server, y direcciones IP flotantes del equilibrador de carga para la escucha de grupo de disponibilidad y la dirección IP principal del clúster, si corresponde.

Determinar la SKU requerida del equilibrador de carga

Azure Load Balancer está disponible en dos SKU: Básico y Estándar. Se recomienda el equilibrador de carga estándar. Si las máquinas virtuales están en un conjunto de disponibilidad, se permite el equilibrador de carga básico. Si las máquinas virtuales están en una zona de disponibilidad, se requiere un equilibrador de carga estándar. El equilibrador de carga estándar requiere que todas las direcciones IP de las VM usen direcciones IP estándar.

La plantilla de Microsoft actual para un grupo de disponibilidad usa un equilibrador de carga básico con direcciones IP básicas.

Nota

Si usa un equilibrador de carga estándar y Azure Storage para el testigo en la nube, tendrá que configurar un punto de conexión de servicio .

En los ejemplos de este artículo se especifica un equilibrador de carga estándar. En los ejemplos, el script incluye -sku Standard.

$ILB= New-AzLoadBalancer -Location $Location -Name $ILBName -ResourceGroupName $ResourceGroupName -FrontendIpConfiguration $FEConfig -BackendAddressPool $BEConfig -LoadBalancingRule $ILBRule -Probe $SQLHealthProbe -sku Standard

Para crear un equilibrador de carga básico, quite -sku Standard de la línea que crea el equilibrador de carga. Por ejemplo:

$ILB= New-AzLoadBalancer -Location $Location -Name $ILBName -ResourceGroupName $ResourceGroupName -FrontendIpConfiguration $FEConfig -BackendAddressPool $BEConfig -LoadBalancingRule $ILBRule -Probe $SQLHealthProbe

Script de ejemplo: creación de un equilibrador de carga interno con PowerShell

Nota

Si ha creado el grupo de disponibilidad con la plantilla Microsoft, ya se ha creado el equilibrador de carga interno.

El siguiente script de PowerShell crea un equilibrador de carga interno, configura las reglas de equilibrio de carga y establece una dirección IP para el equilibrador de carga. Para ejecutar el script, abra Windows PowerShell ISE y pegue el script en el panel Script. Use Connect-AzAccount para iniciar sesión en PowerShell. Si tiene varias suscripciones de Azure, puede usar Select-AzSubscription para establecer la suscripción.

# Connect-AzAccount
# Select-AzSubscription -SubscriptionId <xxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>

$ResourceGroupName = "<Resource Group Name>" # Resource group name
$VNetName = "<Virtual Network Name>"         # Virtual network name
$SubnetName = "<Subnet Name>"                # Subnet name
$ILBName = "<Load Balancer Name>"            # ILB name
$Location = "<Azure Region>"                 # Azure location
$VMNames = "<VM1>","<VM2>"                   # Virtual machine names

$ILBIP = "<n.n.n.n>"                         # IP address
[int]$ListenerPort = "<nnnn>"                # AG listener port
[int]$ProbePort = "<nnnn>"                   # Probe port

$LBProbeName ="ILBPROBE_$ListenerPort"       # The Load balancer Probe Object Name              
$LBConfigRuleName = "ILBCR_$ListenerPort"    # The Load Balancer Rule Object Name

$FrontEndConfigurationName = "FE_SQLAGILB_1" # Object name for the front-end configuration 
$BackEndConfigurationName ="BE_SQLAGILB_1"   # Object name for the back-end configuration

$VNet = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName 

$Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name $SubnetName 

$FEConfig = New-AzLoadBalancerFrontendIpConfig -Name $FrontEndConfigurationName -PrivateIpAddress $ILBIP -SubnetId $Subnet.id

$BEConfig = New-AzLoadBalancerBackendAddressPoolConfig -Name $BackEndConfigurationName 

$SQLHealthProbe = New-AzLoadBalancerProbeConfig -Name $LBProbeName -Protocol tcp -Port $ProbePort -IntervalInSeconds 15 -ProbeCount 2

$ILBRule = New-AzLoadBalancerRuleConfig -Name $LBConfigRuleName -FrontendIpConfiguration $FEConfig -BackendAddressPool $BEConfig -Probe $SQLHealthProbe -Protocol tcp -FrontendPort $ListenerPort -BackendPort $ListenerPort -LoadDistribution Default -EnableFloatingIP 

$ILB= New-AzLoadBalancer -Location $Location -Name $ILBName -ResourceGroupName $ResourceGroupName -FrontendIpConfiguration $FEConfig -BackendAddressPool $BEConfig -LoadBalancingRule $ILBRule -Probe $SQLHealthProbe 

$bepool = Get-AzLoadBalancerBackendAddressPoolConfig -Name $BackEndConfigurationName -LoadBalancer $ILB 

foreach($VMName in $VMNames)
    {
        $VM = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $VMName 
        $NICName = ($vm.NetworkProfile.NetworkInterfaces.Id.split('/') | select -last 1)
        $NIC = Get-AzNetworkInterface -name $NICName -ResourceGroupName $ResourceGroupName
        $NIC.IpConfigurations[0].LoadBalancerBackendAddressPools = $BEPool
        Set-AzNetworkInterface -NetworkInterface $NIC
        start-AzVM -ResourceGroupName $ResourceGroupName -Name $VM.Name 
    }

Script de ejemplo: agregar una dirección IP a un equilibrador de carga existente con PowerShell

Para utilizar más de un grupo de disponibilidad, agregue una dirección IP adicional al equilibrador de carga. Cada dirección IP requiere su regla de equilibrio de carga, puerto de sondeo y puerto de front-end propios.

El puerto de front-end es el que las aplicaciones usan para conectarse a la instancia de SQL Server. Las direcciones IP para los diferentes grupos de disponibilidad pueden usar el mismo puerto de front-end.

Nota

Para los grupos de disponibilidad de SQL Server, cada dirección IP requiere un puerto de sondeo específico. Por ejemplo, si una dirección IP en un equilibrador de carga utiliza el puerto de sondeo 59999, no puede usarlo ninguna otra dirección IP de ese equilibrador de carga.

El script siguiente agrega una nueva dirección IP a un equilibrador de carga existente. El equilibrador de carga interno usa el puerto del cliente de escucha como puerto de front-end de equilibrio de carga. Este puerto puede ser aquel en el que SQL Server escucha. Para las instancias predeterminadas de SQL Server, se trata del puerto 1433. La regla de equilibrio de carga para un grupo de disponibilidad requiere una dirección IP flotante (Direct Server Return), así que el puerto de back-end es el mismo que el puerto de front-end. Actualice las variables para su entorno.

# Connect-AzAccount
# Select-AzSubscription -SubscriptionId <xxxxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx>

$ResourceGroupName = "<ResourceGroup>"          # Resource group name
$VNetName = "<VirtualNetwork>"                  # Virtual network name
$SubnetName = "<Subnet>"                        # Subnet name
$ILBName = "<ILBName>"                          # ILB name                      

$ILBIP = "<n.n.n.n>"                            # IP address
[int]$ListenerPort = "<nnnn>"                   # AG listener port
[int]$ProbePort = "<nnnnn>"                     # Probe port 

$ILB = Get-AzLoadBalancer -Name $ILBName -ResourceGroupName $ResourceGroupName 

$count = $ILB.FrontendIpConfigurations.Count+1
$FrontEndConfigurationName ="FE_SQLAGILB_$count"  

$LBProbeName = "ILBPROBE_$count"
$LBConfigrulename = "ILBCR_$count"

$VNet = Get-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName 
$Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name $SubnetName

$ILB | Add-AzLoadBalancerFrontendIpConfig -Name $FrontEndConfigurationName -PrivateIpAddress $ILBIP -SubnetId $Subnet.Id 

$ILB | Add-AzLoadBalancerProbeConfig -Name $LBProbeName  -Protocol Tcp -Port $Probeport -ProbeCount 2 -IntervalInSeconds 15  | Set-AzLoadBalancer 

$ILB = Get-AzLoadBalancer -Name $ILBname -ResourceGroupName $ResourceGroupName

$FEConfig = get-AzLoadBalancerFrontendIpConfig -Name $FrontEndConfigurationName -LoadBalancer $ILB

$SQLHealthProbe  = Get-AzLoadBalancerProbeConfig -Name $LBProbeName -LoadBalancer $ILB

$BEConfig = Get-AzLoadBalancerBackendAddressPoolConfig -Name $ILB.BackendAddressPools[0].Name -LoadBalancer $ILB 

$ILB | Add-AzLoadBalancerRuleConfig -Name $LBConfigRuleName -FrontendIpConfiguration $FEConfig  -BackendAddressPool $BEConfig -Probe $SQLHealthProbe -Protocol tcp -FrontendPort  $ListenerPort -BackendPort $ListenerPort -LoadDistribution Default -EnableFloatingIP | Set-AzLoadBalancer   

Configuración del agente de escucha

El agente de escucha del grupo de disponibilidad es un nombre de red y una dirección IP en los que escucha el grupo de disponibilidad de SQL Server. Para crear el agente de escucha del grupo de disponibilidad, haga lo siguiente:

  1. Obtenga el nombre del recurso de red del clúster.

    a. Use RDP para conectarse a la máquina virtual de Azure que hospeda la réplica principal.

    b. Abra el Administrador de clústeres de conmutación por error.

    c. Seleccione el nodo Redes y anote el nombre de red del clúster. Use este nombre en la variable $ClusterNetworkName del script de PowerShell. En la siguiente imagen el nombre de red del clúster es Cluster Network 1:

    Nombre de red del clúster

  2. Agregue el punto de acceso cliente
    El punto de acceso cliente es el nombre de red que las aplicaciones utilizan para conectarse a las bases de datos en un grupo de disponibilidad. Cree el punto de acceso cliente en el Administrador de clústeres de conmutación por error.

    a. Amplía el nombre del clúster y haz clic en Funciones.

    b. En el panel Roles, haga clic con el botón derecho en el nombre del grupo de disponibilidad y después seleccione Agregar recurso > Punto de acceso cliente.

    Captura de pantalla que muestra la opción del menú Punto de acceso cliente.

    c. En el cuadro Nombre, cree un nombre para este nuevo agente de escucha. Las aplicaciones utilizarán el nombre del nuevo agente de escucha como nombre de red para conectarse a las bases de datos del grupo de disponibilidad de SQL Server.

    d. Para terminar de crear el agente de escucha, haga clic en Siguiente dos veces y, a continuación, en Finalizar. No pongas el agente de escucha o el recurso en línea en este momento.

  3. Desconecte el rol de clúster del grupo de disponibilidad de modo que esté sin conexión. En Administrador de clústeres de conmutación por error en Roles, haga clic con el botón derecho en el rol y seleccione Detener el rol.

  4. Configure el recurso IP para el grupo de disponibilidad.

    a. Haga clic en la pestaña Recursos y expanda el punto de acceso cliente que acaba de crear.
    El punto de acceso cliente está desconectado.

    Punto de acceso cliente

    b. Haga clic con el botón derecho en el recurso de IP y, después, en Propiedades. Tenga en cuenta el nombre de la dirección IP y úselo en la variable $IPResourceName en el script de PowerShell.

    c. En Dirección IP, haga clic en Dirección IP estática. Establezca la dirección IP como la misma dirección que usó cuando estableció la dirección del equilibrador de carga en Azure Portal.

    Captura de pantalla que muestra dónde establecer la dirección IP.

  5. Haga que el recurso del grupo de disponibilidad de SQL Server dependa del punto de acceso cliente.

    a. En el Administrador de clústeres de conmutación por error, haga clic en Roles y, después, en el grupo de disponibilidad.

    b. En la pestaña Recursos, en Otros recursos, haga clic con el botón derecho en el grupo de recursos de disponibilidad y después haga clic en Propiedades.

    c. En la pestaña Dependencias, agregue el nombre del recurso de punto de acceso cliente (el agente de escucha).

    Captura de pantalla que muestra dónde agregar el nombre en la pestaña Dependencias.

    d. Haga clic en OK.

  6. Haga que el recurso de punto de acceso cliente dependa de la dirección IP.

    a. En el Administrador de clústeres de conmutación por error, haga clic en Roles y, después, en el grupo de disponibilidad.

    b. En la pestaña Recursos, haga clic en el recurso de punto de acceso cliente bajo Nombre del servidor y después haga clic en Propiedades.

    Captura de pantalla que muestra la opción del menú Propiedades para el nombre del servidor.

    c. Haz clic en la pestaña Dependencias . Compruebe que la dirección IP es una dependencia. Si no es así, establezca una dependencia en la dirección IP. Si aparecen varios recursos, comprueba que las direcciones IP tienen dependencias OR, y no AND. Haga clic en OK.

    Recurso de IP

    Sugerencia

    Puede validar que las dependencias estén configuradas correctamente. En el Administrador de clústeres de conmutación por error, vaya a Roles, haga clic con el botón derecho en el grupo de disponibilidad, haga clic en Más acciones y, después, haga clic en Mostrar informe de dependencias. Cuando las dependencias estén configuradas correctamente, el grupo de disponibilidad depende en el nombre de red y el nombre de red depende de la dirección IP.

  7. Establezca los parámetros de clúster en PowerShell.

    a. Copie el siguiente script de PowerShell en una de las instancias de SQL Server. Actualice las variables para su entorno.

    • $ListenerILBIP es la dirección IP que creó en Azure Load Balancer para el agente de escucha del grupo de disponibilidad.

    • $ListenerProbePort es el puerto que configuró en Azure Load Balancer para el agente de escucha del grupo de disponibilidad.

    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name
    $ListenerILBIP = "<n.n.n.n>" # the IP Address of the Internal Load Balancer (ILB). This is the static IP address for the load balancer you configured in the Azure portal.
    [int]$ListenerProbePort = <nnnnn>
    
    Import-Module FailoverClusters
    
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ListenerILBIP";"ProbePort"=$ListenerProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    

    b. Ejecute el script de PowerShell en uno de los nodos del clúster para establecer los parámetros del clúster.

    Nota

    Si las instancias de SQL Server se encuentran en distintas regiones, debe ejecutar el script de PowerShell dos veces. La primera vez, utilice $ListenerILBIP y $ListenerProbePort en la primera región. La segunda vez, $ListenerILBIP y $ListenerProbePort en la segunda región. El nombre de red del clúster y el nombre del recurso IP del clúster también son diferentes para cada región.

  8. Conecte el rol de clúster del grupo de disponibilidad de modo que esté en línea. En Administrador de clústeres de conmutación por error en Roles, haga clic con el botón derecho en el rol y seleccione Iniciar rol.

Si fuera necesario, repita los pasos anteriores para establecer los parámetros del clúster para la dirección IP del clúster de WSFC.

  1. Obtenga el nombre de dirección IP de la dirección IP del clúster de WSFC. En Administrador de clústeres de conmutación por error, en Recursos principales de clúster, busque Nombre del servidor.

  2. Haga clic con el botón derecho en Dirección IP y seleccione Propiedades.

  3. Anote el Nombre de la dirección IP. Puede ser Cluster IP Address.

  4. Establezca los parámetros de clúster en PowerShell.

    a. Copie el siguiente script de PowerShell en una de las instancias de SQL Server. Actualice las variables para su entorno.

    • $ClusterCoreIP es la dirección IP que creó en Azure Load Balancer para el recurso del clúster principal de WSFC. Es diferente de la dirección IP del agente de escucha del grupo de disponibilidad.

    • $ClusterProbePort es el puerto que configuró en Azure Load Balancer para el sondeo de estado de WSFC. Es diferente del sondeo del agente de escucha del grupo de disponibilidad.

    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<ClusterIPResourceName>" # the IP Address resource name
    $ClusterCoreIP = "<n.n.n.n>" # the IP Address of the Cluster IP resource. This is the static IP address for the load balancer you configured in the Azure portal.
    [int]$ClusterProbePort = <nnnnn> # The probe port from the WSFCEndPointprobe in the Azure portal. This port must be different from the probe port for the availability group listener probe port.
    
    Import-Module FailoverClusters
    
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ClusterCoreIP";"ProbePort"=$ClusterProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    

    b. Ejecute el script de PowerShell en uno de los nodos del clúster para establecer los parámetros del clúster.

Advertencia

El puerto de sondeo de estado del agente de escucha del grupo de disponibilidad debe ser diferente del puerto de sondeo de estado de la dirección IP principal del clúster. En estos ejemplos, el puerto del cliente de escucha es 59999 y el puerto de sondeo del estado de la dirección IP principal del clúster es 58888. Ambos puertos requieren una regla de firewall que permita la entrada.

Establecimiento del puerto del agente de escucha en SQL Server Management Studio

  1. Abra SQL Server Management Studio y conéctese a la réplica principal.

  2. Vaya a Alta disponibilidad de AlwaysOn > Grupos de disponibilidad > Agentes de escucha del grupo de disponibilidad.

  3. Ahora tienes que ver el nombre del agente de escucha que creaste en el Administrador de clústeres de conmutación por error. Haga clic con el botón derecho en el nombre del cliente de escucha y seleccione Propiedades.

  4. En el cuadro Puerto, especifique el número de puerto de escucha del grupo de disponibilidad mediante el valor de $EndpointPort que ha utilizado antes (1433 era el valor predeterminado) y, a continuación, seleccione Aceptar.

Comprobación de la conexión con el agente de escucha

Para probar la conexión:

  1. Use el Protocolo de escritorio remoto (RDP) para conectarse a una instancia de SQL Server que esté en la misma red virtual, pero que no sea la propietaria de la réplica; por ejemplo, a otra instancia de SQL Server del clúster.

  2. Use la utilidad sqlcmd para probar la conexión. Por ejemplo, el siguiente script establece una conexión sqlcmd con la réplica principal por medio del agente de escucha con autenticación de Windows:

    sqlcmd -S <listenerName> -E
    

    Si el agente de escucha usa un puerto distinto del predeterminado (1433), especifíquelo en la cadena de conexión. Por ejemplo, el siguiente comando sqlcmd se conecta a un agente de escucha en el puerto 1435:

    sqlcmd -S <listenerName>,1435 -E
    

La conexión SQLCMD se establece automáticamente con la instancia de SQL Server en la que se hospede la réplica principal.

Nota

Asegúrese de que el puerto especificado esté abierto en el firewall de los dos servidores SQL Server. En estos dos servidores, es necesario definir una regla de entrada para el puerto TCP. Consulte Agregar o editar regla de firewall para más información.

Pautas y limitaciones

Cuando utilice un equilibrador de carga interno, tenga en cuenta las siguientes instrucciones que se aplican al agente de escucha del grupo de disponibilidad de Azure:

  • Como solo hay un equilibrador de carga interno, el acceso al agente de escucha se realizará desde la misma red virtual.

  • Si va a restringir el acceso con un grupo de seguridad de red de Azure, asegúrese de que las reglas de tipo permitir incluyen:

    • Las direcciones IP de la máquina virtual de SQL Server de back-end
    • Las direcciones IP flotantes del equilibrador de carga para el cliente de escucha de AG
    • La dirección IP principal del clúster, si procede.
  • Cree un punto de conexión de servicio cuando use un equilibrador de carga estándar con Azure Storage para el testigo en la nube. Para más información, consulte Concesión de acceso desde una red virtual.

Cmdlets de PowerShell

Use los siguientes cmdlets de PowerShell para crear un equilibrador de carga interno para Azure Virtual Machines.

Pasos siguientes

Para obtener más información, consulte: