Configurare un listener esterno per i gruppi di disponibilità in macchine virtuali server Azure SQL

Questo argomento illustra come configurare un listener per un gruppo di disponibilità AlwaysOn accessibile esternamente su Internet. Ciò è possibile tramite l'associazione dell'indirizzo IP virtuale pubblico (indirizzo VIP) del servizio cloud con il listener.

Importante

Azure offre due modelli di distribuzione diversi per creare e usare le risorse: Resource Manager e distribuzione classica. Questo articolo illustra l'uso del modello di distribuzione classica. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti.

Il gruppo di disponibilità può contenere repliche solo locali, solo di Azure oppure sia locali che di Azure per le configurazioni ibride. Le repliche di Azure possono trovarsi nella stessa area o in più aree grazie a più reti virtuali (VNet). I passaggi seguenti presuppongono che sia già stato configurato un gruppo di disponibilità ma che non sia stato configurato un listener.

Linee guida e limitazioni per listener esterni

Tenere presenti le linee guida seguenti relative al listener del gruppo di disponibilità in Azure quando si esegue la distribuzione usando l'indirizzo IP virtuale (VIP) pubblico del servizio cloud:

  • Il listener del gruppo di disponibilità è supportato su Windows Server 2008 R2, Windows Server 2012 e Windows Server 2012 R2.
  • L'applicazione client deve trovarsi in un servizio cloud diverso rispetto a quello che contiene le VM del gruppo di disponibilità. Azure non supporta Direct Server Return con client e server residenti nello stesso servizio cloud.
  • Per impostazione predefinita, la procedura descritta in questo articolo descrive come configurare un listener per usare l'indirizzo IP virtuale (VIP) del servizio cloud. Tuttavia, è possibile riservare e creare più indirizzi VIP per il servizio cloud. In questo modo è possibile usare la procedura di questo articolo per creare più listener, ciascuno di essi associato a un indirizzo IP virtuale diverso. Per informazioni su come creare più indirizzi VIP, vedere più indirizzi IP virtuali per il servizio cloud.
  • Se si sta creando un listener per un ambiente ibrido, la rete locale deve disporre di connettività a Internet pubblico oltre che al VPN da sito a sito con la rete virtuale di Azure. Quando nella subnet di Azure, il listener del gruppo di disponibilità è raggiungibile solo tramite indirizzo IP pubblico del rispettivo servizio cloud.
  • Non è supportata la creazione di un listener esterno nello stesso servizio cloud in cui è presente anche un listener interno utilizzando il servizio di bilanciamento del carico interno (ILB).

Determinare l'accessibilità del listener

È importante tenere presente che esistono due modi per configurare un listener del gruppo di disponibilità in Azure. Questi metodi differiscono nel tipo di servizio di bilanciamento del carico di Azure usato quando si crea il listener. Nella tabella seguente sono descritte le differenze:

Tipo di servizio di bilanciamento del carico Implementazione Utilizzare quando:
Esterno Usa l'indirizzo IP virtuale pubblico del servizio cloud che ospita le macchine virtuali. È necessario accedere al listener dall'esterno della rete virtuale, ad esempio da Internet.
Interno Usa un servizio di bilanciamento del carico interno con un indirizzo privato per il listener. È possibile accedere al listener solo dall'interno della stessa rete virtuale. Questa modalità di accesso include la VPN da sito a sito in scenari ibridi.

Importante

Per un listener che usa l'indirizzo VIP pubblico del servizio cloud (servizio di bilanciamento del carico esterno), non si incorrerà in spese di uscita fin quando il client, il listener e i database si troveranno nella stessa area di Azure. In caso contrario, i dati restituiti tramite il listener vengono considerati in uscita e vengono addebitati i normali costi di trasferimento dati.

Un servizio di bilanciamento del carico interno può essere configurato solo nelle reti virtuali con ambito a livello di area. Le reti virtuali esistenti che sono state configurate per un gruppo di affinità non possono usare un servizio di bilanciamento del carico interno. Per altre informazioni, vedere Panoramica del bilanciamento del carico interno.

Questo articolo illustra la creazione di un listener che usa il bilanciamento del carico esterno. Se si vuole un listener privato per la rete virtuale, vedere la versione di questo articolo che illustra la procedura per la configurazione di un listener con ILB

Creare endpoint VM con bilanciamento del carico con Direct Server Return

Il servizio di bilanciamento del carico esterno usa l'indirizzo IP virtuale pubblico del servizio cloud che ospita le VM. Non è quindi necessario creare o configurare il servizio di bilanciamento del carico in questo caso.

È necessario creare un endpoint con carico bilanciato per ogni macchina virtuale che ospita una replica di Azure. Se si dispongono di repliche in più aree, ogni replica per tale area deve essere nello stesso servizio cloud nella stessa rete virtuale. Le repliche di creazione del gruppo di disponibilità che si estendono su più aree di Azure richiedono la configurazione di più reti virtuali. Per ulteriori informazioni sulla configurazione della connettività tra reti virtuali, vedere configurare connettività tra reti virtuali.

  1. Nel portale di Azure, passare a ogni macchina virtuale che ospita una replica e visualizzare i dettagli.

  2. Fare clic sulla scheda Endpoint per ognuna delle VM.

  3. Verificare che il Nome e la Porta pubblica dell'endpoint del listener che si desidera usare non siano già in uso. Nell'esempio seguente, il nome è "MyEndpoint" e la porta è "1433".

  4. Nel client locale scaricare e installare il modulo powerShell più recente.

  5. Avviare Azure PowerShell. Viene aperta una nuova sessione di PowerShell con i moduli amministrativi di Azure caricati.

  6. Eseguire Get-AzurePublishSettingsFile. Questo cmdlet conduce a un browser per scaricare un file di impostazioni di pubblicazione in una directory locale. Se richiesto, immettere le credenziali di accesso per la sottoscrizione di Azure.

  7. Eseguire il comando Import-AzurePublishSettingsFile con il percorso del file di impostazioni di pubblicazione che si è scaricato:

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    Una volta importato il file di impostazioni di pubblicazione, è possibile gestire la sottoscrizione di Azure nella sessione di PowerShell.

  8. Copiare lo script di PowerShell seguente in un editor di testi e impostare i valori variabili in base all'ambiente. Sono stati forniti valori predefiniti per alcuni parametri. Si noti che se il gruppo di disponibilità si estende tra diverse aree di Azure, è necessario eseguire lo script una volta in ogni data center per il servizio cloud e i nodi che risiedono nel data center.

    # Define variables
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas
    
    # Configure a load balanced endpoint for each node in $AGNodes, with direct server return enabled
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -Protocol "TCP" -PublicPort 1433 -LocalPort 1433 -LBSetName "ListenerEndpointLB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM
    }
    
  9. Dopo aver impostato le variabili, copiare lo script dall'editor di testo nella sessione di Azure PowerShell per eseguirlo. Se viene ancora visualizzato il prompt >>, digitare di nuovo ENTER per assicurarsi che l'esecuzione dello script sia stata avviata.

Se necessario, verificare che KB2854082 sia installato.

Se i server nel cluster stanno eseguendo Windows Server 2008 R2 o Windows Server 2012, è necessario quindi verificare che l'hotfix KB2854082 sia installato su ognuno dei server locali o sulle VM di Azure che fanno parte del cluster. Qualsiasi server o macchina virtuale che si trova nel cluster, ma non nel gruppo di disponibilità, deve avere installato tale hotfix.

Nella sessione desktop remota per ciascuno dei nodi del cluster, scaricare KB2854082 in una directory locale. Quindi, installare l'hotfix in ogni nodo del cluster in modo sequenziale. Se il servizio cluster è in esecuzione nel nodo del cluster, il server viene riavviato al termine dell'installazione dell'hotfix.

Avviso

L'arresto del servizio cluster o il riavvio del server influiscono sull'integrità del quorum del cluster e del gruppo di disponibilità e possono portare il cluster offline. Per mantenere la disponibilità elevata del cluster durante l'installazione, verificare quanto segue:

  • Il cluster è in stato di quorum ottimale.
  • Prima dell'installazione dell'hotfix in qualsiasi nodo, tutti i nodi del cluster sono online.
  • Prima di installare l'hotfix in altri nodi del cluster, è necessario consentire il completamento dell'esecuzione dell'installazione dell'hotfix in un nodo, incluso il riavvio completo del server.

Aprire le porte firewall nei nodi del gruppo di disponibilità in

In questo passaggio si creerà una regola del firewall per aprire la porta probe per l'endpoint con carico bilanciato (59999, come specificato in precedenza) e un'altra regola per aprire la porta del listener del gruppo disponibilità. Poiché è stato creato l'endpoint con carico bilanciato nelle VM contenenti repliche del gruppo di disponibilità, è necessario aprire la porta probe e la porta del listener sulle rispettive macchine virtuali.

  1. Nelle macchine virtuali che ospitano le repliche, avviare Windows Firewall con sicurezza avanzata.

  2. Fare clic con il pulsante destro del mouse su Regole in entrata e quindi scegliere Nuova regola.

  3. Nella pagina Tipo di regola selezionare Porta e quindi fare clic su Avanti.

  4. Nella pagina Protocollo e porte selezionare TCP, digitare 59999 nella casella Porte locali specifiche e quindi fare clic su Avanti.

  5. Nella pagina Azione mantenere selezionata l'opzione Consenti la connessione e fare clic su Avanti.

  6. Nella pagina Profilo accettare le impostazioni predefinite e fare clic su Avanti.

  7. Nella pagina Nome specificare nella casella di testo Nome un nome per la regola, ad esempio Porta probe del listener AlwaysOn e quindi fare clic su Fine.

  8. Ripetere i passaggi precedenti per la porta del listener del gruppo di disponibilità (come specificato in precedenza nel parametro $EndpointPort dello script) e specificare un nome di regola appropriato, ad esempio Porta del Listener AlwaysOn.

Creare il listener del gruppo di disponibilità

Creare il listener del gruppo di disponibilità in due passaggi. Creare prima di tutto la risorsa del cluster del punto di accesso client e configurare le dipendenze. In secondo luogo configurare le risorse del cluster con PowerShell.

Creare il punto di accesso client e configurare le dipendenze del cluster

In questo passaggio si creerà manualmente il listener del gruppo di disponibilità in Gestione cluster di failover e SQL Server Management Studio.

  1. Aprire Gestione cluster di failover dal nodo che ospita la replica primaria.

  2. Selezionare il nodo Reti e quindi annotare il nome di rete del cluster. Questo nome viene usato nella variabile $ClusterNetworkName nello script di PowerShell.

  3. Espandere il nome del cluster, quindi fare clic su Ruoli.

  4. 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.

    Aggiungere il punto di accesso client per il gruppo di disponibilità

  5. Nella casella Nome creare un nome per il nuovo listener, fare clic su Avanti due volte, quindi fare clic su Fine.
    Non portare il listener o la risorsa in linea a questo punto.

  6. Scegliere la scheda Risorse, e quindi espandere il punto di accesso client appena creato. Viene visualizzata la risorsa indirizzo IP per ogni rete di cluster nel cluster. Se si tratta di una soluzione solo per Azure, viene visualizzata solo una risorsa indirizzo IP.

  7. Effettuare una delle operazioni seguenti:

    • Per configurare una soluzione ibrida:

      a. Fare clic con il pulsante destro del mouse sulla risorsa indirizzo IP che corrisponde alla subnet locale e quindi scegliere Proprietà. Annotare il nome dell'indirizzo IP e il nome di rete.

      b. Selezionare Indirizzo IP statico, assegnare un indirizzo IP non usato e quindi fare clic su OK.

    • Per configurare una soluzione solo per Azure:

      a. Fare clic con il pulsante destro del mouse sulla risorsa indirizzo IP corrispondente alla subnet di Azure e quindi selezionare Proprietà.

      Nota

      Se il listener non riesce in un secondo momento a portarsi in linea a causa di un indirizzo IP in conflitto selezionato da DHCP, è possibile configurare un indirizzo IP statico valido in questa finestra Proprietà.

      b. Nella stessa finestra delle proprietà di Indirizzo IP modificare il valore per Nome indirizzo IP.
      Questo nome viene usato nella variabile $IPResourceName dello script di PowerShell. Se la soluzione si estende in più reti virtuali di Azure, ripetere questo passaggio per ogni risorsa IP.

Configurare le risorse del cluster in PowerShell

  1. Per il servizio di bilanciamento del carico esterno, è necessario ottenere l'indirizzo IP virtuale pubblico del servizio cloud contenente le repliche. Accedere al portale di Azure. Passare al servizio cloud che contiene la macchina virtuale del gruppo di disponibilità. Aprire la vista Dashboard.

  2. Annotare l'indirizzo visualizzato sotto Public Virtual IP (VIP) Address. Se la soluzione interessa più reti virtuali, ripetere questo passaggio per ogni servizio cloud che contiene una macchina virtuale che ospita una replica.

  3. Su una delle macchine virtuali copiare lo script di PowerShell seguente in un editor di testo e impostare le variabili sui valori annotati prima.

    # Define variables
    $ClusterNetworkName = "<ClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name
    $CloudServiceIP = "<X.X.X.X>" # Public Virtual IP (VIP) address of your cloud service
    
    Import-Module FailoverClusters
    
    # If you are using Windows Server 2012 or higher, use the Get-Cluster Resource command. If you are using Windows Server 2008 R2, use the cluster res command. Both commands are commented out. Choose the one applicable to your environment and remove the # at the beginning of the line to convert the comment to an executable line of code.
    
    # Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$CloudServiceIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0}
    # cluster res $IPResourceName /priv enabledhcp=0 overrideaddressmatch=1 address=$CloudServiceIP probeport=59999  subnetmask=255.255.255.255
    
  4. Dopo aver impostato le variabili, aprire una finestra con privilegi elevati di Windows PowerShell, quindi copiare lo script dall'editor di testo e incollarlo nella sessione di Azure PowerShell per eseguirlo. Se viene ancora visualizzato il prompt >>, digitare di nuovo ENTER per assicurarsi che l'esecuzione dello script sia stata avviata.

  5. Ripetere questo passaggio su ogni macchina virtuale. Questo script consente di configurare la risorsa Indirizzo IP con l'indirizzo IP del servizio cloud e di impostare altri parametri come la porta probe. Quando la risorsa Indirizzo IP viene portata online, può quindi rispondere al polling sulla porta probe dall'endpoint con carico bilanciato, creato in precedenza in questa esercitazione.

Portare online il listener

  1. In Gestione cluster di failover espandere Ruoli e quindi evidenziare il gruppo di disponibilità.

  2. Nella scheda Risorse fare clic con il pulsante destro del mouse sul nome del listener e scegliere Proprietà.

  3. Fare clic sulla scheda Dipendenze . Se sono elencate più risorse, verificare che gli indirizzi IP abbiano OR, non AND, dipendenze.

  4. Fare clic su OK.

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

  6. Quando il listener è online, nella scheda Risorse fare clic con il pulsante destro del mouse sul gruppo di disponibilità e quindi scegliere Proprietà.

    Configurare la risorsa del gruppo di disponibilità

  7. Creare una dipendenza nella risorsa nome del listener, non il nome della risorsa indirizzo IP, e quindi fare clic su OK.

    Aggiungere una dipendenza al nome del listener

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

  9. Passare a Gruppi di disponibilità elevata >AlwaysOnAvailabilityGroupName><>>Listener del gruppo di disponibilità.
    Verrà visualizzato il nome del listener creato in Gestione cluster di failover.

  10. Fare clic con il pulsante destro del mouse sul nome del listener e quindi su Proprietà.

  11. Nella casella Porta specificare il numero di porta per il listener del gruppo di disponibilità usando il valore di $EndpointPort usato in precedenza e quindi fare clic su OK. In questa esercitazione 1433 era l'impostazione predefinita.

Operazioni di completamento della procedura

Dopo aver creato il listener del gruppo di disponibilità, può essere necessario regolare i parametri cluster RegisterAllProvidersIP e HostRecordTTL per la risorsa listener. Questi parametri possono ridurre il tempo di riconnessione dopo un failover che può impedire i timeout di connessione. Per altre informazioni su questi parametri e sull'esempio di codice, vedere Creare o configurare un listener del gruppo di disponibilità.

Testare il listener del gruppo di disponibilità (entro la stessa rete virtuale)

In questo passaggio si testa il listener del gruppo di disponibilità usando un'applicazione client in esecuzione nella stessa rete.

Questi sono i requisiti per la connettività client:

  • Le connessioni client al listener devono provenire da computer che si trovano in un servizio cloud diverso da quello che ospita le repliche di disponibilità AlwaysOn.
  • Se le repliche AlwaysOn si trovano in subnet diverse, i client devono specificare MultisubnetFailover=True nella stringa di connessione. Questa condizione comporta l'esecuzione di tentativi di connessione paralleli alle repliche nelle diverse subnet. Questo scenario include la distribuzione di un gruppo di disponibilità AlwaysOn tra più aree.

È ad esempio possibile connettersi al listener da una delle macchine virtuali nella stessa rete virtuale di Azure (ma non quello che ospita una replica). Un modo semplice per completare questo test consiste nel provare a connettere SQL Server Management Studio al listener del gruppo di disponibilità. Un altro metodo semplice consiste nell'eseguire SQLCMD.exe, come segue:

sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15

Nota

Se il valore EndpointPort è 1433, non è necessario specificarlo nella chiamata. La chiamata precedente presuppone inoltre che il computer client sia aggiunto allo stesso dominio e che al chiamante siano state concesse autorizzazioni per il database tramite l'autenticazione di Windows.

Durante il test del listener, eseguire il failover del gruppo di disponibilità per assicurarsi che i client possano connettersi al listener attraverso i failover.

Testare il listener del gruppo di disponibilità (su Internet)

Per accedere al listener dall'esterno della rete virtuale, è necessario usare il bilanciamento del carico esterno/pubblico (descritto in questo argomento) anziché ILB, accessibile solo all'interno della stessa rete virtuale. Nella stringa di connessione specificare il nome del servizio cloud. Ad esempio, se è disponibile un servizio cloud con nome mycloudservice, l'istruzione sqlcmd sarà analoga alla seguente:

sqlcmd -S "mycloudservice.cloudapp.net,<EndpointPort>" -d "<DatabaseName>" -U "<LoginId>" -P "<Password>"  -Q "select @@servername, db_name()" -l 15

A differenza dell'esempio precedente, è necessario usare l'autenticazione SQL, perché il chiamante non può usare l'autenticazione di Windows su Internet. Per altre informazioni, vedere il blog relativo a un gruppo di disponibilità AlwaysOn nelle VM di Azure: scenari di connettività client. Quando si usa l'autenticazione SQL, assicurarsi di creare lo stesso account di accesso in entrambe le repliche. Per altre informazioni sulla risoluzione dei problemi degli account di accesso con gruppi di disponibilità, vedere il post di blog relativo a come mappare gli account di accesso o usare un utente di database SQL contenuto per connettersi ad altre repliche ed eseguire il mapping ai database di disponibilità.

Se le repliche AlwaysOn si trovano in subnet diverse, i client devono specificare MultisubnetFailover=True nella stringa di connessione. Di conseguenza, vengono eseguiti tentativi di connessione paralleli alle repliche nelle diverse subnet. Si noti che questo scenario include la distribuzione di un gruppo di disponibilità AlwaysOn tra più aree.

Passaggi successivi

Oltre a connettere automaticamente i client per la replica primaria, è possibile usare un listener per reindirizzare i carichi di lavoro di sola lettura ai database secondari. Questo approccio può migliorare le prestazioni e la scalabilità della soluzione globale. Per altre informazioni, vedere Use ReadIntent Routing with Azure Always On availability group listener (Usare ReadIntent Routing con il listener del gruppo di disponibilità AlwaysOn di Azure).

Nota

Per suggerimenti relativi alla risoluzione dei problemi dei listener di Azure, vedere Troubleshooting Availability Group Listener in Azure (Risoluzione dei problemi relativi al listener del gruppo di disponibilità in Azure) nel blog del team di supporto AlwaysOn.

Per altre informazioni sull'uso di SQL Server in Azure, vedere Panoramica di SQL Server in macchine virtuali di Azure.