Partilhar via


Tutorial: Configurar um ouvinte de grupo de disponibilidade em máquinas virtuais Linux

Aplica-se a:SQL Server na VM do Azure

Este tutorial abordará as etapas sobre como criar um ouvinte de grupo de disponibilidade (AG) para seus SQL Servers em máquinas virtuais (VMs) Linux no Azure, para Red Hat Enterprise Linux (RHEL), SUSE Linux Enterprise Server (SLES) e Ubuntu.

Saberá como:

  • Criar um balanceador de carga no portal do Azure
  • Configurar o pool de back-end para o balanceador de carga
  • Criar uma sonda para o balanceador de carga
  • Definir as regras de balanceamento de carga
  • Criar o recurso de balanceador de carga no cluster
  • Criar o ouvinte AG
  • Teste a conexão com o ouvinte
  • Testando um failover

Nota

Comunicação sem preconceitos

Este artigo contém referências ao termo slave, um termo que a Microsoft considera ofensivo quando usado neste contexto. O termo aparece neste artigo porque aparece atualmente no software. Quando o termo for removido do software, iremos removê-lo do artigo.

Pré-requisito

Conclua o Tutorial: Configurar grupos de disponibilidade para o SQL Server em máquinas virtuais RHEL no Azure.

Criar o balanceador de carga no portal do Azure

As instruções a seguir guiam você pelas etapas 1 a 4 da seção Criar e configurar o balanceador de carga no portal do Azure do artigo Configurar um balanceador de carga & ouvinte do grupo de disponibilidade (SQL Server em VMs do Azure).

Criar o balanceador de carga

  1. No portal do Azure, abra o grupo de recursos que contém as máquinas virtuais do SQL Server.

  2. No grupo de recursos, selecione Adicionar.

  3. Procure por balanceador de carga e, nos resultados da pesquisa, selecione Balanceador de Carga, que é publicado pela Microsoft.

  4. No painel Balanceador de Carga, selecione Criar.

  5. Na caixa de diálogo Criar balanceador de carga, configure o balanceador de carga da seguinte maneira:

    Definição valor
    Nome Um nome de texto que representa o balanceador de carga. Por exemplo, sqlLB.
    Tipo Interno
    Rede virtual A rede virtual padrão que foi criada deve ser nomeada VM1VNET.
    Sub-rede Selecione a sub-rede em que as instâncias do SQL Server estão. O padrão deve ser VM1Subnet.
    Atribuição de endereço IP Estático
    Endereço IP privado Use o virtualip endereço IP que foi criado no cluster.
    Subscrição Utilize a subscrição que foi utilizada para o seu grupo de recursos.
    Grupo de recursos Selecione o grupo de recursos em que as instâncias do SQL Server estão.
    Localização Selecione o local do Azure em que as instâncias do SQL Server estão.

Configurar o pool de back-end

O Azure chama o pool de back-end do pool de endereços back-end. Nesse caso, o pool de back-end são os endereços das três instâncias do SQL Server em seu AG.

  1. No grupo de recursos, selecione o balanceador de carga que você criou.

  2. Em Configurações, selecione Pools de back-end.

  3. Em Pools de back-end, selecione Adicionar para criar um pool de endereços back-end.

  4. Em Adicionar pool de back-end, em Nome, digite um nome para o pool de back-end.

  5. Em Associado a, selecione Máquina virtual.

  6. Selecione cada máquina virtual no ambiente e associe o endereço IP apropriado a cada seleção.

    Screenshot showing how to add a backend pool.

  7. Selecione Adicionar.

Criar uma sonda

A investigação define como o Azure verifica qual das instâncias do SQL Server atualmente possui o ouvinte AG. O Azure investiga o serviço com base no endereço IP em uma porta que você define ao criar a sonda.

  1. No painel Configurações do balanceador de carga, selecione Sondas de integridade.

  2. No painel Testes de integridade, selecione Adicionar.

  3. Configure a sonda no painel Adicionar sonda . Use os seguintes valores para configurar a sonda:

    Definição valor
    Nome Um nome de texto que representa a sonda. Por exemplo, SQLAlwaysOnEndPointProbe.
    Protocolo TCP
    Porta Você pode usar qualquer porta disponível. Por exemplo, 59999.
    Intervalo 5
    Limiar com funcionamento incorreto 2
  4. Selecione OK.

  5. Entre em todas as suas máquinas virtuais e abra a porta de teste usando os seguintes comandos:

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

O Azure cria a sonda e a usa para testar qual instância do SQL Server tem o ouvinte para o AG.

Definir as regras de balanceamento de carga

As regras de balanceamento de carga configuram como o balanceador de carga roteia o tráfego para as instâncias do SQL Server. Para esse balanceador de carga, você habilita o retorno direto do servidor porque apenas uma das três instâncias do SQL Server possui o recurso de ouvinte AG de cada vez.

  1. No painel Configurações do balanceador de carga, selecione Regras de balanceamento de carga.

  2. No painel Regras de balanceamento de carga, selecione Adicionar.

  3. No painel Adicionar regras de balanceamento de carga, configure a regra de balanceamento de carga. Utilize as seguintes definições:

    Definição valor
    Nome Um nome de texto que representa as regras de balanceamento de carga. Por exemplo, SQLAlwaysOnEndPointListener.
    Protocolo TCP
    Porta 1433
    Porta de back-end 1433. Esse valor é ignorado porque essa regra usa IP flutuante (retorno direto do servidor).
    Sonda Use o nome do teste que você criou para esse balanceador de carga.
    Persistência da sessão Nenhuma
    Tempo limite de inatividade (minutos) 4
    IP flutuante (retorno direto do servidor) Ativado

    Screenshot showing how to add a load balancing rule.

  4. Selecione OK.

  5. O Azure configura a regra de balanceamento de carga. Agora, o balanceador de carga está configurado para rotear o tráfego para a instância do SQL Server que hospeda o ouvinte do AG.

Neste ponto, o grupo de recursos tem um balanceador de carga que se conecta a todas as máquinas do SQL Server. O balanceador de carga também contém um endereço IP para o ouvinte Always On AG do SQL Server, para que qualquer máquina possa responder a solicitações para AGs.

Criar o recurso de ouvinte do grupo de disponibilidade

Antes de criar um recurso de balanceador de carga no Pacemaker, primeiro crie o recurso de ouvinte:

sudo crm configure primitive virtualip \
ocf:heartbeat:IPaddr2 \
params ip=x.y.z.a

No exemplo anterior, x.y.z.a refere-se ao endereço IP front-end do balanceador de carga.

Criar o recurso de balanceador de carga no cluster

Siga as instruções para a distribuição que você está configurando.

  1. Entre na máquina virtual principal. Precisamos criar o recurso para habilitar a porta de teste do balanceador de carga do Azure (59999 é usado em nosso exemplo). Execute o seguinte comando:

    sudo pcs resource create azure_load_balancer azure-lb port=59999
    
  2. Crie um grupo que contenha o virtualip recurso e azure_load_balancer :

    sudo pcs resource group add virtualip_group azure_load_balancer virtualip
    

Adicionar restrições

  1. Uma restrição de colocation deve ser configurada para garantir que o endereço IP do balanceador de carga do Azure e o recurso AG estejam sendo executados no mesmo nó. Execute o seguinte comando:

    sudo pcs constraint colocation add azure_load_balancer ag_cluster-master INFINITY with-rsc-role=Master
    
  2. Crie uma restrição de ordenação para garantir que o recurso AG esteja ativo e em execução antes do endereço IP do balanceador de carga do Azure. Embora a restrição de colocation implique uma restrição de ordenação, isso a impõe.

    sudo pcs constraint order promote ag_cluster-master then start azure_load_balancer
    
  3. Para verificar as restrições, execute o seguinte comando:

    sudo pcs constraint list --full
    

    Deverá ver o seguinte resultado:

    Location Constraints:
    Ordering Constraints:
      promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
      promote ag_cluster-master then start azure_load_balancer (kind:Mandatory) (id:order-ag_cluster-master-azure_load_balancer-mandatory)
    Colocation Constraints:
      virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
      azure_load_balancer with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-azure_load_balancer-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

Criar o ouvinte do grupo de disponibilidade

  1. No nó primário, execute o seguinte comando em sqlcmd ou SSMS. Substitua o endereço IP usado abaixo pelo virtualip endereço IP.

    • SQL Server 2022 e versões posteriores:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '0.0.0.0'
          )),
          PORT = 1433
      );
      GO
      
    • SQL Server 2017 e SQL Server 2019:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '255.255.255.255'
          )),
          PORT = 1433
      );
      GO
      
  2. Entre em cada nó da VM. Use o comando a seguir para abrir o arquivo hosts e configurar a resolução de nomes de host para o ag1-listener em cada máquina.

    sudo vi /etc/hosts
    

    No editor vi, digite i para inserir texto e, em uma linha em branco, adicione o IP do ag1-listener. Em seguida, adicione ag1-listener depois de um espaço ao lado do IP.

    <IP of ag1-listener> ag1-listener
    

    Para sair do editor vi , primeiro pressione a tecla Esc e, em seguida, digite o comando :wq para gravar o arquivo e sair. Faça isso em cada nó.

Testar o ouvinte e um failover

Esta seção aborda o logon em um ouvinte do SQL Server AG e o teste de um failover.

Testar o logon no SQL Server usando o ouvinte do grupo de disponibilidade

  1. Use sqlcmd para entrar no nó primário do SQL Server usando o nome do ouvinte AG:

    • Use um login que foi criado anteriormente e substitua <YourPassword> pela senha correta. O exemplo a seguir usa o logon que foi criado com o sa SQL Server.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  2. Verifique o nome do servidor ao qual você está conectado. Execute o seguinte comando no sqlcmd:

    SELECT @@SERVERNAME;
    

    Sua saída deve mostrar o nó primário atual. Isso deve ocorrer VM1 se você nunca testou um failover.

    Saia da sessão do SQL Server digitando o exit comando.

Testar um failover

  1. Execute o comando a seguir para fazer failover manualmente da réplica primária ou <VM2> de outra réplica. Substitua <VM2> pelo valor do nome do servidor.

    sudo pcs resource move ag_cluster-master <VM2> --master
    
  2. Se você verificar suas restrições, verá que outra restrição foi adicionada devido ao failover manual:

    sudo pcs constraint list --full
    

    Você vê que uma restrição com ID cli-prefer-ag_cluster-master foi adicionada.

  3. Remova a restrição com ID cli-prefer-ag_cluster-master usando o seguinte comando:

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    
  4. Verifique os recursos do cluster usando o comando sudo pcs resource, e você verá que a instância primária é agora <VM2>.

    Nota

    Este artigo poderá conter referências ao termo slave (secundário), um termo que a Microsoft já não utiliza. Quando o termo for removido do software, iremos removê-lo deste artigo.

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
        Masters: [ <VM2> ]
        Slaves: [ <VM1> <VM3> ]
    Resource Group: virtualip_group
        azure_load_balancer        (ocf::heartbeat:azure-lb):      Started <VM2>
        virtualip  (ocf::heartbeat:IPaddr2):       Started <VM2>
    
  5. Use o sqlcmd para entrar na réplica principal usando o nome do ouvinte:

    • Use um login que foi criado anteriormente e substitua <YourPassword> pela senha correta. O exemplo a seguir usa o logon que foi criado com o sa SQL Server.
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  6. Verifique o servidor ao qual você está conectado. Execute o seguinte comando no sqlcmd:

    SELECT @@SERVERNAME;
    

    Você verá que agora está conectado à VM para a qual fez failover.

Próximo passo

Para utilizar um ouvinte de grupo de disponibilidade para suas instâncias do SQL Server, você precisa criar e configurar um balanceador de carga.