Configurare uno o più listener di gruppi di disponibilità AlwaysOn - Resource Manager

Questo argomento illustra come:

  • Creare un servizio di bilanciamento del carico interno per gruppi di disponibilità di SQL Server usando i cmdlet PowerShell.
  • Aggiungere altri indirizzi IP a un servizio di bilanciamento del carico per più di un gruppo di disponibilità.

Un listener del gruppo di disponibilità è un nome di rete virtuale al quale si connettono i client per l'accesso ai database. Nelle macchine virtuali di Azure, un servizio di bilanciamento del carico contiene l'indirizzo IP del listener. Il servizio di bilanciamento del carico indirizza il traffico all'istanza di SQL Server in ascolto nella porta probe. In genere, un gruppo di disponibilità usa un servizio di bilanciamento del carico interno. Un servizio di bilanciamento del carico interno di Azure può ospitare uno o più indirizzi IP. Ogni indirizzo IP usa una porta probe specifica. Questo documento illustra come usare PowerShell per creare un servizio di bilanciamento del carico o aggiungere indirizzi IP a un servizio di bilanciamento del carico esistente per i gruppi di disponibilità di SQL Server.

La possibilità di assegnare più indirizzi IP a un servizio di bilanciamento del carico interno è una novità di Azure ed è disponibile solo nel modello di Resource Manager. Per completare questa attività, è necessario un gruppo di disponibilità di SQL Server distribuito su macchine virtuali di Azure nel modello di Resource Manager. Entrambe le macchine virtuali di SQL Server devono appartenere allo stesso set di disponibilità. È possibile usare il modello Microsoft per creare automaticamente il gruppo di disponibilità in Azure Resource Manager. Questo modello crea automaticamente il gruppo di disponibilità, che include il servizio di bilanciamento del carico interno. Se si preferisce, è possibile configurare manualmente un gruppo di disponibilità AlwaysOn.

Per questo argomento è necessario che i gruppi di disponibilità siano già configurati.

Gli argomenti correlati includono:

Avviare la sessione di PowerShell

Prima di tutto è necessario che sia installata ed eseguita la versione più recente di Azure PowerShell . Per informazioni dettagliate, vedere Come installare e configurare Azure PowerShell.

Nota

Negli esempi inclusi in questo argomento viene usato il modello di distribuzione Azure Resource Manager, quindi vengono impiegati gli esempi di cmdlet di Azure Resource Manager.

Eseguire il cmdlet Add-AzureRmAccount per visualizzare una schermata di accesso in cui immettere le credenziali. Usare le stesse credenziali usate per l'accesso al portale di Azure.

Add-AzureRmAccount

Se si hanno più sottoscrizioni, usare il cmdlet Set-AzureRmContext per selezionare la sottoscrizione da usare nella sessione di PowerShell. Per visualizzare la sottoscrizione in uso nella sessione corrente di PowerShell, eseguire Get-AzureRmContext. Per visualizzare tutte le sottoscrizioni, eseguire Get-AzureRmSubscription.

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

Configurare Windows Firewall

Configurare Windows Firewall per consentire l'accesso a SQL Server. Le regole del firewall consentono le connessioni TCP alle porte usate dall'istanza di SQL Server e al probe di listener. Per informazioni dettagliate, vedere Configurazione di Windows Firewall per l'accesso al Motore di database. Creare una regola in entrata per la porta SQL Server e per la porta probe.

Script di esempio: creare un servizio di bilanciamento del carico interno con PowerShell

Nota

Se il gruppo di disponibilità è stato creato con il modello Microsoft, il bilanciamento del carico interno è già stato creato.

Il seguente script di PowerShell crea un servizio di bilanciamento del carico interno, configura le regole di bilanciamento del carico e imposta un indirizzo IP per il bilanciamento del carico. Per eseguire lo script, aprire Windows PowerShell ISE e copiare lo script nel riquadro Script. Usare Login-AzureRMAccount per l'accesso a PowerShell. Se si dispone di più sottoscrizioni di Azure, usare Select-AzureRmSubscription per impostare la sottoscrizione.

# Login-AzureRmAccount
# Select-AzureRmSubscription -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-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName 

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

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

$BEConfig = New-AzureRMLoadBalancerBackendAddressPoolConfig -Name $BackEndConfigurationName 

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

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

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

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

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

Script di esempio: aggiungere un indirizzo IP a un servizio di bilanciamento del carico esistente con PowerShell

Per usare più di un gruppo di disponibilità, aggiungere un altro indirizzo IP al bilanciamento del carico. Ogni indirizzo IP richiede la sua regola di bilanciamento, la sua porta probe e la sua porta front-end.

La porta front-end è quella usata dalle applicazioni per connettersi all'istanza di SQL Server. Gli indirizzi IP per i diversi gruppi di disponibilità possono usare la stessa porta front-end.

Nota

Per i gruppi di disponibilità di SQL Server, ogni indirizzo IP richiede una porta probe specifica. Ad esempio, se un indirizzo IP su un servizio di bilanciamento del carico usa la porta probe 59999, nessun altro indirizzo IP in tale servizio di bilanciamento del carico può usare la porta probe 59999.

Lo script seguente aggiunge un nuovo indirizzo IP a un servizio di bilanciamento del carico esistente. Il servizio di bilanciamento del carico interno usa la porta del listener per la porta front-end di bilanciamento del carico. Questa porta può essere la porta su cui SQL Server è in ascolto. Per le istanze predefinite di SQL Server, la porta è la numero 1433. La regola di bilanciamento del carico per un gruppo di disponibilità richiede un indirizzo IP mobile (Direct Server Return), quindi la porta back-end corrisponde alla porta front-end. Aggiornare le variabili per l'ambiente.

# Login-AzureRmAccount
# Select-AzureRmSubscription -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-AzureRmLoadBalancer -Name $ILBName -ResourceGroupName $ResourceGroupName 

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

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

$VNet = Get-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName 
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name $SubnetName

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

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

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

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

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

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

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

Configurare il listener

Il listener del gruppo di disponibilità è un nome di rete e indirizzo IP sul quale è in ascolto il gruppo di disponibilità di SQL Server. Per creare il listener del gruppo di disponibilità, seguire questa procedura:

  1. Ottenere il nome della risorsa della rete del cluster.

    a. Usare RDP per connettersi alla macchina virtuale di Azure che ospita la replica primaria.

    b. Aprire Gestione cluster di failover.

    c. Selezionare il nodo Reti e annotare il nome di rete del cluster. Usare questo nome nella variabile $ClusterNetworkName nello script di PowerShell. Nell'immagine seguente il nome della rete di cluster è Cluster Network 1:

    Nome rete di cluster

  2. Aggiungere il punto di accesso client.
    Il punto di accesso client è il nome della rete che le applicazioni useranno per connettersi ai database nel gruppo di disponibilità. Creare il punto di accesso client in Gestione cluster di failover.

    a. Espandere il nome di cluster, quindi fare clic su Ruoli.

    b. Nel pannello Ruoli fare clic con il pulsante destro del mouse sul nome del gruppo di disponibilità e quindi scegliere Aggiungi risorsa > Punto di accesso client.

    Punto di accesso client

    c. Nella casella Nome creare un nome per il nuovo listener. Il nome del nuovo listener è il nome della rete che le applicazioni useranno per connettersi ai database nel gruppo di disponibilità di SQL Server.

    d. Per completare la creazione del listener, fare clic su Avanti due volte e quindi su Fine. Non portare il listener o la risorsa in linea a questo punto.

  3. Configurare la risorsa IP per il gruppo di disponibilità.

    a. Scegliere la scheda Risorse e quindi espandere il punto di accesso client creato.
    Il punto di accesso client è offline.

    Punto di accesso client

    b. Fare clic con il pulsante destro del mouse sulla risorsa IP e quindi scegliere Proprietà. Annotare il nome dell'indirizzo IP e usarlo nella variabile $IPResourceName nello script di PowerShell.

    c. In Indirizzo IP fare clic su Indirizzo IP statico. Impostare l'indirizzo IP sullo stesso indirizzo usato quando è stato impostato l'indirizzo del servizio di bilanciamento del carico nel portale di Azure.

    Risorsa IP

  4. Rendere la risorsa del gruppo di disponibilità di SQL Server dipendente dal punto di accesso client.

    a. In Gestione cluster di failover fare clic su Ruoli e quindi sul gruppo di disponibilità.

    b. Nella scheda Risorse fare clic con il pulsante destro del mouse sul gruppo di disponibilità in Altre risorse e quindi scegliere Proprietà.

    c. Nella scheda relativa alle dipendenze aggiungere il nome della risorsa del punto di accesso client (listener).

    Risorsa IP

    d. Fare clic su OK.

  5. Rendere la risorsa del punto di accesso client dipendente dall'indirizzo IP.

    a. In Gestione cluster di failover fare clic su Ruoli e quindi sul gruppo di disponibilità.

    b. Nella scheda Risorse fare clic con il pulsante destro del mouse sulla risorsa del punto di accesso client in Nome server e quindi scegliere Proprietà.

    Risorsa IP

    c. Selezionare la scheda Dipendenze . Verificare che l'indirizzo IP sia una dipendenza. In caso contrario, impostare una dipendenza sull'indirizzo IP. Se sono presenti più risorse elencate, verificare che gli indirizzi abbiano le dipendenze OR, e non quelle AND. Fare clic su OK.

    Risorsa IP

    d. Fare clic con il pulsante destro del mouse sul nome del listener e quindi scegliere Porta online.

    Suggerimento

    È possibile confermare che le dipendenze sono state configurate correttamente. In Gestione cluster di failover passare a Ruoli, fare clic con il pulsante destro del mouse sul gruppo di disponibilità, scegliere Altre azioni e infine fare clic su Visualizza rapporto dipendenze. Quando le dipendenze sono configurate correttamente, il gruppo di disponibilità dipende dal nome della rete e il nome della rete dipende dall'indirizzo IP.

  6. Impostare i parametri del cluster in PowerShell.

    a. Copiare lo script di PowerShell seguente in una delle istanze di SQL Server. Aggiornare le variabili per l'ambiente.

    $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
    $ILBIP = “<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]$ProbePort = <nnnnn>
    
    Import-Module FailoverClusters
    
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    

    b. Impostare i parametri del cluster eseguendo lo script di PowerShell in uno dei nodi del cluster.

    Nota

    Se le istanze di SQL Server sono in aree separate, è necessario eseguire lo script di PowerShell due volte. La prima volta usare i parametri $ILBIP e $ProbePort della prima area. La seconda volta usare i parametri $ILBIP e $ProbePort della seconda area. Il nome della rete del cluster e il nome della risorsa IP del cluster coincidono.

Impostare la porta del listener in SQL Server Management Studio

  1. Avviare SQL Server Management Studio e connettersi alla replica primaria.

  2. Passare a Disponibilità elevata AlwaysOn | Gruppi di disponibilità | Listener gruppo di disponibilità.

  3. Viene visualizzato il nome del listener creato in Gestione Cluster di Failover. Fare clic con il pulsante destro del mouse sul nome del listener e quindi su Proprietà.

  4. Nella casella Porta specificare il numero di porta per il listener del gruppo di disponibilità usando il valore di $EndpointPort usato in precedenza (l'impostazione predefinita era 1433), quindi fare clic su OK.

Testare la connessione al listener

Per testare la connessione:

  1. Usare RDP per connettersi a un'istanza di SQL Server che si trova nella stessa rete virtuale, ma non è proprietaria della replica. Può trattarsi dell'altra istanza di SQL Server nel cluster.

  2. Usare l'utilità sqlcmd per testare la connessione. Lo script seguente, ad esempio, stabilisce una connessione sqlcmd alla replica primaria tramite il listener con l'autenticazione di Windows:

    sqlmd -S <listenerName> -E
    

    Se il listener usa una porta diversa da quella predefinita (1433), specificare la porta nella stringa di connessione. Il seguente comando sqlcmd, ad esempio, si connette a un listener nella porta 1435:

    sqlcmd -S <listenerName>,1435 -E
    

La connessione SQLCMD si connette automaticamente a qualsiasi istanza di SQL Server ospiti la replica primaria.

Nota

Verificare che la porta specificata sia aperta nel firewall di entrambe le istanze di SQL Server. Per entrambi i server è necessaria una regola in ingresso per la porta TCP usata. Per altre informazioni, vedere Aggiungere o modificare una regola del firewall .

Linee guida e limitazioni

Tenere presente le linee guida seguenti per il listener del gruppo di disponibilità in Azure con il servizio di bilanciamento del carico interno:

  • Con un servizio di bilanciamento del carico interno è possibile accedere al listener solo dalla stessa rete virtuale.

Per altre informazioni

Per altre informazioni, vedere Configurare manualmente i gruppi di disponibilità AlwaysOn nelle VM di Azure.

Cmdlet PowerShell

Usare i seguenti cmdlet PowerShell per creare un servizio di bilanciamento del carico interno per le macchine virtuali di Azure.