Configurar um ouvinte externo para grupos de disponibilidade em VMs do servidor SQL do Azure

Este tópico mostra como configurar um ouvinte para um grupo de disponibilidade AlwaysOn que está acessível externamente na Internet. Isso se tornou possível associando o endereço VIP (IP virtual público) do serviço de nuvem ao ouvinte.

Importante

O Azure tem dois modelos de implantação diferentes para criar e trabalhar com recursos: Resource Manager e Clássico. Este artigo aborda o uso do modelo de implantação Clássica. A Microsoft recomenda que a maioria das implantações novas use o modelo do Gerenciador de Recursos.

O seu grupo de disponibilidade pode conter somente réplicas locais, somente no Azure ou locais e no Azure para configurações híbridas. As réplicas do Azure podem residir na mesma região ou em várias regiões usando várias redes virtuais (VNets). As etapas a seguir pressupõem que você já tenha configurado um grupo de disponibilidade , mas não configurou um ouvinte.

Diretrizes e limitações para ouvintes externos

Observe as seguintes limitações sobre o ouvinte do grupo de disponibilidade no Azure ao implantar usando o endereço VIP público do serviço de nuvem:

  • Há suporte para o ouvinte do grupo de disponibilidade no Windows Server 2008 R2, Windows Server 2012 e Windows Server 2012 R2.
  • O aplicativo cliente deve residir em um serviço de nuvem diferente daquele que contém as VMs do grupo de disponibilidade. O Azure não dá suporte a retorno de servidor direto com cliente e servidor no mesmo serviço de nuvem.
  • Por padrão, as etapas neste artigo mostram como configurar um ouvinte para usar o endereço de IP Virtual (VIP) do serviço de nuvem. No entanto, é possível reservar e criar vários endereços VIP para seu serviço de nuvem. Isso permite que você use as etapas neste artigo para criar vários ouvintes associados a cada VIP diferente. Para obter informações sobre como criar vários endereços VIP, consulte VIPs múltiplos por serviço de nuvem.
  • Se você estiver criando um ouvinte para um ambiente híbrido, a rede local deve ter conectividade com a Internet pública além da VPN site a site com a rede virtual do Azure. Quando estiver na sub-rede do Azure, o ouvinte do grupo de disponibilidade será alcançável somente pelo endereço IP público do respectivo serviço de nuvem.
  • Não há suporte para criar um ouvinte externo no mesmo serviço de nuvem em que você também tem um ouvinte externo usando o Balanceador de Carga Interna (ILB).

Determine a acessibilidade do ouvinte

É importante perceber que há duas maneiras de configurar um ouvinte do grupo de disponibilidade no Azure. Esses métodos são diferentes do tipo de balanceador de carga do Azure que você utiliza ao criar o ouvinte. A tabela a seguir lista as diferenças:

Tipo de balanceador de carga Implementação Use quando:
Externo Usa o endereço de IP virtual público do serviço de nuvem que hospeda as máquinas virtuais (VMs). Você precisa acessar o ouvinte de fora da rede virtual, inclusive da Internet.
Interna Usa um balanceador de carga interno com um endereço privado para o ouvinte. Você pode acessar o ouvinte somente de dentro da mesma rede virtual. Esse acesso inclui VPN site a site em cenários híbridos.

Importante

Para um ouvinte que usa o VIP público (balanceador de carga externo) do serviço de nuvem, desde que o cliente, o ouvinte e os bancos de dados estejam na mesma região do Azure, você não incorrerá em encargos de saída. Caso contrário, os dados retornados através do ouvinte são considerados dados de saída e serão cobradas as taxas de transferência de dados normais.

Um ILB pode ser configurado somente em redes virtuais com um escopo regional. Redes virtuais existentes configuradas para um grupo de afinidades não podem usar um ILB. Para obter mais informações, consulte Visão geral do balanceador de carga interno.

Este artigo se concentra na criação de um ouvinte que use o balanceamento de carga externo. Se você quiser um ouvinte privado em sua rede virtual, consulte a versão deste artigo que fornece as etapas para configurar um ouvinte com ILB

Criar pontos de extremidade da VM com balanceamento de carga com retorno de servidor direto

O Balanceamento de carga externo usa o endereço IP Virtual público do serviço de nuvem que hospeda suas VMs. Portanto, você não precisa criar ou configurar o balanceador de carga nesse caso.

Você deve criar um ponto de extremidade de carga equilibrada para cada VM que hospeda uma réplica do Azure. Se você tiver réplicas em várias regiões, cada réplica para essa região deve estar no mesmo serviço de nuvem no mesmo VNet. Criação de réplicas do Grupo de Disponibilidade que abrangem várias regiões do Azure requer configurar diversas VNets. Para obter mais informações sobre como configurar através de conectividade VNet cruzada, consulte Configurar conectividade VNet para VNet.

  1. No portal do Azure, navegue até cada VM hospedando uma réplica e visualize os detalhes.

  2. Clique na guia Pontos de extremidade para cada uma das máquinas virtuais.

  3. Verifique se o Nome e a Porta Pública do ponto de extremidade do ouvinte que você quer usar já não está em uso. No exemplo abaixo, o nome é "MyEndpoint" e a porta é "1433".

  4. No cliente local, baixe e instale o módulo mais recente do PowerShell.

  5. Inicie o Azure PowerShell. Uma nova sessão do PowerShell é aberta com os módulos administrativos do Azure carregados.

  6. Executar Get-AzurePublishSettingsFile. Esse cmdlet direciona você a um navegador para baixar um arquivo de configurações de publicação para um diretório local. É possível que seja solicitado para inserir as suas credenciais para a assinatura do Aure.

  7. Execute o comando Import-AzurePublishSettingsFile com o caminho do arquivo de configurações de publicação que você baixou:

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    Após o arquivo de configurações de publicação tiver sido importado, você pode gerenciar sua assinatura do Azure na sessão do PowerShell.

  8. Copie o script do PowerShell abaixo em um editor de texto e defina os valores de variáveis para se adequar ao seu ambiente (os padrões foram fornecidos para alguns parâmetros). Note que o seu grupo de disponibilidade abrange regiões do Azure, você deve executar o script uma vez em cada datacenter para o serviço de nuvem e os nós que residem naquele datacenter.

    # 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. Depois de ter definido as variáveis, copie o script do editor de texto para a sua sessão do Azure PowerShell para executá-lo. Se o prompt ainda mostrar >>, digite ENTER novamente para iniciar a execução do script.

Verifique se KB2854082 está instalado, se necessário

A seguir, se algum servidor no cluster estiver executando o Windows Server 2008 R2 ou o Windows Server 2012, você deverá verificar se o hotfix KB2854082 está instalado em cada um dos servidores locais ou nas VMs do Azure que fazem parte do cluster. Qualquer servidor ou VM que esteja no cluster, mas não no grupo de disponibilidade, também deverá ter esse hotfix instalado.

Na sessão da área de trabalho remota para cada um de nós do cluster, baixe KB2854082 para um diretório local. Em seguida, instale o hotfix em cada um dos nós do cluster, em sequência. Se o serviço do cluster está sendo executado no nó do cluster, o servidor é reiniciado no final da instalação do hotfix.

Aviso

Parar o serviço de cluster ou reiniciar o servidor afeta a integridade de quorum do seu cluster e o grupo de disponibilidade, e pode fazer com que o cluster fique offline. Para manter a alta disponibilidade do seu cluster durante a instalação, verifique se:

  • O cluster está na integridade de quorum ideal.
  • Antes de instalar o hotfix em qualquer nó, todos os nós de cluster estão online.
  • Antes de instalar o hotfix em qualquer outro nó do cluster deixe que a instalação do hotfix seja executada até o fim em um nó, incluindo a reinicialização completa do servidor.

Abra as portas de firewall em nós do grupo de disponibilidade

Nesta etapa, você pode criar uma regra de firewall para abrir a porta de investigação para o ponto de extremidade com balanceamento de carga (59999 conforme especificado anteriormente), e outra regra para abrir a porta do ouvinte do grupo de disponibilidade. Como você criou o ponto de extremidade com balanceamento de carga nas VMs que contêm réplicas do grupo de disponibilidade, você precisa abrir a porta de investigação e a porta do ouvinte nasVMs.

  1. Em VMs que hospedam réplicas, inicie o Firewall do Windows com segurança avançada.

  2. Clique com o botão direito do mouse em Regras de Entrada e clique em Nova Regra.

  3. Na página Tipo de regra, selecione Porta e clique em Avançar.

  4. Na página Protocolo e portas, selecione TCP e digite 59999 na caixa Portas locais específicas e, em seguida, clique em Avançar.

  5. Na página Ação, mantenha selecionado Permitir a conexão e, em seguida, clique em Avançar.

  6. Na página Perfil, aceite as configurações padrão e, em seguida, clique em Avançar.

  7. Na página Nome, na caixa de texto Nome, especifique um nome de regra, como Porta de investigação do ouvinte AlwaysOn e clique em Concluir.

  8. Repita as etapas acima para a porta do ouvinte do grupo de disponibilidade (conforme especificado anteriormente no parâmetro $EndpointPort do script) e, em seguida, especifique um nome de regra apropriado, como Porta do ouvinte AlwaysOn.

Crie o ouvinte do grupo de disponibilidade

Crie o ouvinte do grupo de disponibilidade em duas etapas. Primeiro, crie o recurso de cluster do ponto de acesso do cliente e configure dependências. Depois disso, configure os recursos de cluster com o PowerShell.

Criar o ponto de acesso de cliente e configurar as dependências do cluster

Nesta etapa, você cria manualmente o ouvinte do grupo de disponibilidade no Gerenciador de Cluster de Failover e no Server Management Studio.

  1. Abra o Gerenciador de Cluster de Failover a partir do nó que hospeda a réplica primária.

  2. Selecione o nó Redes e observe o nome da rede do cluster. Esse nome é usado na variável $ClusterNetworkName no script do PowerShell.

  3. Expanda o nome do cluster e clique em Funções.

  4. No painel Funções, clique com o botão direito do mouse no nome do grupo de disponibilidade e, em seguida, selecione Adicionar recurso>Ponto de acesso para o cliente.

    Adicionar ponto de acesso para cliente para o grupo de disponibilidade

  5. Na caixa Nome, crie um nome para este novo ouvinte, clique em Avançar duas vezes e, em seguida, clique em Concluir.
    Não coloque o ouvinte ou o recurso online neste momento.

  6. Clique na guia Recursos e, em seguida, expanda o ponto de acesso do cliente que você acabou de criar. O recurso de endereço IP para cada uma das redes de cluster no seu cluster é exibido. Se essa é uma solução somente no Azure, somente um recurso de endereço IP é exibido.

  7. Siga um destes procedimentos:

    • Para configurar uma solução híbrida:

      a. Clique no botão direito do mouse no recurso de endereço IP que corresponde à sua sub-rede local e selecione Propriedades. Observe o nome do endereço IP e o nome da rede.

      b. Selecione Endereço IP Estático, atribua um endereço IP não utilizado e clique em OK.

    • Para configurar uma solução somente no Azure:

      a. Clique com o botão direito do mouse no recurso de endereço IP que corresponde à sub-rede do Azure e selecione Propriedades.

      Observação

      Se o ouvinte posteriormente não ficar online, devido a um endereço IP problemático selecionado pelo DHCP, você pode configurar um endereço IP estático válido nessa janela de propriedades.

      b. Na mesma janela de propriedades do Endereço IP, altere o Nome do Endereço IP.
      Esse nome é usado na variável $IPResourceName do script do PowerShell. Se sua solução abrange diversas VNets do Azure, repita essa etapa para cada recurso IP.

Configurar os recursos de cluster no PowerShell

  1. Para o balanceamento de carga externo, você deve obter o endereço IP virtual público do serviço de nuvem que contém suas réplicas. Faça logon no portal do Azure. Navegue até o serviço de nuvem que contém o grupo de disponibilidade da VM. Abra a exibição Painel.

  2. Observe o endereço mostrado em Endereço IP Virtual Público (VIP). Se a sua solução abrange VNets, repita essa etapa para cada serviço de nuvem que contém uma VM que hospeda uma réplica.

  3. Em uma das VMs, copie o script do PowerShell abaixo em um editor de texto e defina as variáveis para os valores que você anotou anteriormente.

    # 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. Assim que você tiver definido as variáveis, abra uma janela elevada do Windows PowerShell, depois copie o script do editor de texto e cole-o na sua sessão do Azure PowerShell para executá-lo. Se o prompt ainda mostrar >>, digite ENTER novamente para iniciar a execução do script.

  5. Repita esse procedimento em cada VM. Esse script configura o recurso de endereço IP com o endereço IP do serviço de nuvem e define outros parâmetros como a porta de investigação. Quando o recurso de endereço IP é colocado online, ele pode responder à sondagem na porta de investigação do ponto de extremidade com balanceamento de carga criado anteriormente neste tutorial.

Coloque o ouvinte online

  1. No Gerenciador de Cluster de Failover, expanda funções e realce seu grupo de disponibilidade.

  2. Na guia Recursos , clique com o botão direito do mouse no nome do ouvinte e clique em Propriedades.

  3. Clique na guia Dependências . Se vários recursos estiverem listados, verifique se os endereços IP têm dependências OR, não AND.

  4. Clique em OK.

  5. Clique com o botão direito do mouse no nome do ouvinte e, em seguida, clique em Colocar online.

  6. Quando o ouvinte estiver online, na guia Recursos, clique com o botão direito do mouse no grupo de disponibilidade e clique em Propriedades.

    Configurar o recurso do grupo de disponibilidade

  7. Crie uma dependência no recurso de nome do ouvinte (não o nome de recursos de endereço IP) e, em seguida, clique em OK.

    Adicionar dependência ao nome do ouvinte

  8. Inicie o SQL Server Management Studio e conecte-se à réplica principal.

  9. Acesseos ouvintes do grupo de disponibilidadeAvailabilityGroupName>dos Grupos<> de Disponibilidade> AlwaysOn.>
    O nome do ouvinte que você criou no Gerenciador de Cluster de Failover deve ser exibido.

  10. Clique com o botão direito do mouse no nome do ouvinte e, em seguida, clique em Propriedades.

  11. Na caixa Porta, especifique o número da porta para o ouvinte do grupo de disponibilidade usando o $EndpointPort usado anteriormente (neste tutorial, 1433 era o padrão) e clique em OK.

Itens de acompanhamento

Após criar o ouvinte do grupo de disponibilidade, é possível que seja necessário ajustar os parâmetros do cluster RegisterAllProvidersIP e HostRecordTTL para o recurso do ouvinte. Esses parâmetros podem reduzir o tempo de reconexão após um failover, o que pode impedir as interrupções de conexão. Para obter mais informações sobre esses parâmetros, bem como um código de exemplo, consulte Criar ou configurar um ouvinte de grupo de disponibilidade.

Testar o ouvinte do grupo de disponibilidade (na mesma VNet)

Nesta etapa, você deve testar o ouvinte do grupo de disponibilidade usando um aplicativo cliente em execução na mesma rede.

Para a conectividade do cliente, observe os seguintes requisitos:

  • As conexões de cliente para o ouvinte devem vir de máquinas que residem em um serviço de nuvem diferente daquele que hospeda as réplicas de disponibilidade do AlwaysOn.
  • Se as réplicas do AlwaysOn estiverem em sub-redes diferentes, os clientes deverão especificar MultisubnetFailover=True na cadeia de conexão. Essa condição resulta em tentativas de conexão em paralelo para réplicas nas várias sub-redes. Observe que esse cenário inclui uma implantação de grupo de disponibilidade do AlwaysOn entre regiões.

Um exemplo é conectar-se ao ouvinte de uma das VMs na mesma rede virtual do Azure (mas não uma que hospeda uma réplica). Uma maneira fácil para concluir este teste é tentar conectar o SQL Server Management Studio ao ouvinte do grupo de disponibilidade. Outro método simples é executar SQLCMD.exe, da seguinte maneira:

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

Observação

Se o valor de EndpointPort é 1433, não é necessário especificá-lo na chamada. A chamada anterior também pressupõe que o computador do cliente está conectado ao mesmo domínio e que o chamador tem permissões no banco de dados usando a autenticação do Windows.

Ao testar o ouvinte, certifique-se de realizar failover ao grupo de disponibilidade para garantir que os clientes possam se conectar ao ouvinte através de failovers.

Testar o ouvinte de grupo de disponibilidade (pela Internet)

Para acessar o ouvinte de fora da rede virtual, você deve usar o balanceamento de carga externo/público (descrito neste tópico) em vez do ILB, que só pode ser acessado na mesma VNet. Na cadeia de conexão, você deve especificar o nome do serviço de nuvem. Por exemplo, se você tiver um serviço de nuvem com o nome meuserviçodenuvem, a instrução sqlcmd seria a seguinte:

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

Ao contrário do exemplo anterior, a autenticação do SQL deve ser usada, porque o chamador não pode usar a autenticação do Windows pela Internet. Para obter mais informações, consulte AlwaysOn Availability Group in Azure VM: Client Connectivity Scenarios(Grupo de disponibilidade AlwaysOn na VM do Azure: cenários de conectividade do cliente). Ao usar a autenticação do SQL, certifique-se de que você crie o mesmo logon em ambas as réplicas. Para saber mais sobre como solucionar problemas de logons com Grupos de Disponibilidade, consulte Como mapear logons ou usar um usuário de banco de dados SQL contido para se conectar a outras réplicas e mapear para bancos de dados de disponibilidade.

Se as réplicas do AlwaysOn estiverem em sub-redes diferentes, os clientes deverão especificar MultisubnetFailover=True na cadeia de conexão. Isso resulta em tentativas de conexão paralela para réplicas em sub-redes diferentes. Observe que esse cenário inclui uma implantação de grupo de disponibilidade do AlwaysOn entre regiões.

Próximas etapas

Além de conectar automaticamente os clientes com a réplica primária, um ouvinte pode ser usado para redirecionar cargas de trabalho apenas de leitura às secundárias. Esse uso pode melhorar o desempenho e a escalabilidade da sua solução geral. Para obter mais informações, consulte Usar o Roteamento de ReadIntebt com o ouvinte do grupo de disponibilidade AlwaysOn do Azure.

Observação

Para obter as dicas de solução de problemas sobre ouvintes do Azure, confira Troubleshooting Availability Group Listener in Azure (Solução de problemas de ouvintes do grupo de disponibilidade no Azure) no blog da Equipe de Suporte do AlwaysOn.

Para obter mais informações sobre como usar o SQL Server no Azure, consulte SQL Server em máquinas virtuais do Azure.