Alta disponibilidade para NFS em VMs do Azure no SUSE Linux Enterprise Server

Nota

Recomendamos implantar um dos serviços NFS primários do Azure: NFS em arquivos do Azure ou volumes ANF NFS para armazenar dados compartilhados em um sistema SAP altamente disponível. Esteja ciente de que estamos desenfatizando as arquiteturas de referência SAP, utilizando clusters NFS.

Este artigo descreve como implantar as máquinas virtuais, configurar as máquinas virtuais, instalar a estrutura de cluster e instalar um servidor NFS altamente disponível que pode ser usado para armazenar os dados compartilhados de um sistema SAP altamente disponível. Este guia descreve como configurar um servidor NFS altamente disponível que é usado por dois sistemas SAP, NW1 e NW2. Os nomes dos recursos (por exemplo, máquinas virtuais, redes virtuais) no exemplo pressupõem que você tenha usado o modelo de servidor de arquivos SAP com prefixo de recurso prod.

Nota

Este artigo contém referências a termos que a Microsoft já não utiliza. Quando os termos forem removidos do software, iremos removê-los deste artigo.

Leia primeiro as seguintes notas e documentos SAP

Descrição geral

Para obter alta disponibilidade, o SAP NetWeaver requer um servidor NFS. O servidor NFS é configurado em um cluster separado e pode ser usado por vários sistemas SAP.

Visão geral da alta disponibilidade do SAP NetWeaver

O servidor NFS usa um nome de host virtual dedicado e endereços IP virtuais para cada sistema SAP que usa esse servidor NFS. No Azure, um balanceador de carga é necessário para usar um endereço IP virtual. A configuração apresentada mostra um balanceador de carga com:

  • Endereço IP frontend 10.0.0.4 para NW1
  • Endereço IP frontend 10.0.0.5 para NW2
  • Porta de sonda 61000 para NW1
  • Porta de sonda 61001 para NW2

Configurar um servidor NFS altamente disponível

Implantar o Linux manualmente por meio do portal do Azure

Este documento pressupõe que você já tenha implantado um grupo de recursos, a Rede Virtual do Azure e a sub-rede.

Implante duas máquinas virtuais para servidores NFS. Escolha uma imagem SLES adequada que seja suportada com o seu sistema SAP. Você pode implantar a VM em qualquer uma das opções de disponibilidade - conjunto de escala, zona de disponibilidade ou conjunto de disponibilidade.

Configurar o balanceador de carga do Azure

Siga o guia create load balancer para configurar um balanceador de carga padrão para uma alta disponibilidade do servidor NFS. Durante a configuração do balanceador de carga, considere os seguintes pontos.

  1. Configuração de IP Frontend: Crie dois IP frontend. Selecione a mesma rede virtual e sub-rede que o servidor NFS.
  2. Pool de back-end: crie pool de back-end e adicione VMs de servidor NFS.
  3. Regras de entrada: crie duas regras de balanceamento de carga, uma para NW1 e outra para NW2. Siga as mesmas etapas para ambas as regras de balanceamento de carga.
    • Endereço IP frontend: Selecione frontend IP
    • Pool de back-end: selecione pool de back-end
    • Marque "Portas de alta disponibilidade"
    • Protocolo: TCP
    • Sonda de integridade: crie uma sonda de integridade com os detalhes abaixo (aplica-se a NW1 e NW2)
      • Protocolo: TCP
      • Porta: [por exemplo: 61000 para NW1, 61001 para NW2]
      • Intervalo: 5
      • Limiar da sonda: 2
    • Tempo limite de inatividade (minutos): 30
    • Marque "Ativar IP flutuante"

Nota

O número da propriedade de configuração da sonda de integridadeOfProbes, também conhecido como "Limite não íntegro" no Portal, não é respeitado. Portanto, para controlar o número de testes consecutivos bem-sucedidos ou com falha, defina a propriedade "probeThreshold" como 2. Atualmente, não é possível definir essa propriedade usando o portal do Azure, portanto, use o comando CLI do Azure ou PowerShell .

Nota

Quando VMs sem endereços IP públicos são colocadas no pool de back-end do balanceador de carga interno (sem endereço IP público) Standard do Azure, não haverá conectividade de saída com a Internet, a menos que uma configuração adicional seja executada para permitir o roteamento para pontos finais públicos. Para obter detalhes sobre como obter conectividade de saída, consulte Conectividade de ponto de extremidade público para máquinas virtuais usando o Azure Standard Load Balancer em cenários de alta disponibilidade SAP.

Importante

  • Não habilite carimbos de data/hora TCP em VMs do Azure colocadas atrás do Balanceador de Carga do Azure. Habilitar carimbos de data/hora TCP fará com que as sondas de integridade falhem. Defina o net.ipv4.tcp_timestamps parâmetro como 0. Para obter detalhes, consulte Sondas de integridade do balanceador de carga.
  • Para evitar que o saptune altere o valor definido net.ipv4.tcp_timestamps manualmente de 0 volta para 1, atualize a versão do saptune para 3.1.1 ou superior. Para obter mais detalhes, consulte saptune 3.1.1 – Preciso atualizar?.

Criar cluster de marcapasso

Siga as etapas em Configurando o Pacemaker no SUSE Linux Enterprise Server no Azure para criar um cluster Pacemaker básico para esse servidor NFS.

Configurar servidor NFS

Os itens a seguir são prefixados com [A] - aplicável a todos os nós, [1] - aplicável apenas ao nó 1 ou [2] - aplicável apenas ao nó 2.

  1. [A] Configurar resolução de nomes de anfitrião

    Você pode usar um servidor DNS ou modificar o /etc/hosts em todos os nós. Este exemplo mostra como usar o arquivo /etc/hosts. Substitua o endereço IP e o nome do host nos seguintes comandos

    sudo vi /etc/hosts
    

    Insira as seguintes linhas em /etc/hosts. Altere o endereço IP e o nome do host para corresponder ao seu ambiente

    # IP address of the load balancer frontend configuration for NFS
    
    10.0.0.4 nw1-nfs
    10.0.0.5 nw2-nfs
    
  2. [A] Ativar servidor NFS

    Criar a entrada de exportação NFS raiz

    sudo sh -c 'echo /srv/nfs/ *\(rw,no_root_squash,fsid=0\)>/etc/exports'
    
    sudo mkdir /srv/nfs/
    
  3. [A] Instalar componentes drbd

    sudo zypper install drbd drbd-kmp-default drbd-utils
    
  4. [A] Criar uma partição para os dispositivos drbd

    Listar todos os discos de dados disponíveis

    sudo ls /dev/disk/azure/scsi1/
    
    # Example output
    # lun0  lun1
    

    Crie partições para cada disco de dados

    sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun0'
    sudo sh -c 'echo -e "n\n\n\n\n\nw\n" | fdisk /dev/disk/azure/scsi1/lun1'
    
  5. [A] Criar configurações LVM

    Listar todas as partições disponíveis

    ls /dev/disk/azure/scsi1/lun*-part*
    
    # Example output
    # /dev/disk/azure/scsi1/lun0-part1  /dev/disk/azure/scsi1/lun1-part1
    

    Crie volumes LVM para cada partição

    sudo pvcreate /dev/disk/azure/scsi1/lun0-part1
    sudo vgcreate vg-NW1-NFS /dev/disk/azure/scsi1/lun0-part1
    sudo lvcreate -l 100%FREE -n NW1 vg-NW1-NFS
    
    sudo pvcreate /dev/disk/azure/scsi1/lun1-part1
    sudo vgcreate vg-NW2-NFS /dev/disk/azure/scsi1/lun1-part1
    sudo lvcreate -l 100%FREE -n NW2 vg-NW2-NFS
    
  6. [A] Configurar drbd

    sudo vi /etc/drbd.conf
    

    Certifique-se de que o arquivo drbd.conf contém as duas linhas a seguir

    include "drbd.d/global_common.conf";
    include "drbd.d/*.res";
    

    Alterar a configuração global do drbd

    sudo vi /etc/drbd.d/global_common.conf
    

    Adicione as seguintes entradas à seção manipulador e net.

    global {
         usage-count no;
    }
    common {
         handlers {
              fence-peer "/usr/lib/drbd/crm-fence-peer.9.sh";
              after-resync-target "/usr/lib/drbd/crm-unfence-peer.9.sh";
              split-brain "/usr/lib/drbd/notify-split-brain.sh root";
              pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
         }
         startup {
              wfc-timeout 0;
         }
         options {
         }
         disk {
              md-flushes yes;
              disk-flushes yes;
              c-plan-ahead 1;
              c-min-rate 100M;
              c-fill-target 20M;
              c-max-rate 4G;
         }
         net {
              after-sb-0pri discard-younger-primary;
              after-sb-1pri discard-secondary;
              after-sb-2pri call-pri-lost-after-sb;
              protocol     C;
              tcp-cork yes;
              max-buffers 20000;
              max-epoch-size 20000;
              sndbuf-size 0;
              rcvbuf-size 0;
         }
    }
    
  7. [A] Criar os dispositivos drbd NFS

    sudo vi /etc/drbd.d/NW1-nfs.res
    

    Insira a configuração para o novo dispositivo drbd e saia

    resource NW1-nfs {
         protocol     C;
         disk {
              on-io-error       detach;
         }
         net {
             fencing  resource-and-stonith;  
         }
         on prod-nfs-0 {
              address   10.0.0.6:7790;
              device    /dev/drbd0;
              disk      /dev/vg-NW1-NFS/NW1;
              meta-disk internal;
         }
         on prod-nfs-1 {
              address   10.0.0.7:7790;
              device    /dev/drbd0;
              disk      /dev/vg-NW1-NFS/NW1;
              meta-disk internal;
         }
    }
    
    sudo vi /etc/drbd.d/NW2-nfs.res
    

    Insira a configuração para o novo dispositivo drbd e saia

    resource NW2-nfs {
         protocol     C;
         disk {
              on-io-error       detach;
         }
         net {
             fencing  resource-and-stonith;  
         }
         on prod-nfs-0 {
              address   10.0.0.6:7791;
              device    /dev/drbd1;
              disk      /dev/vg-NW2-NFS/NW2;
              meta-disk internal;
         }
         on prod-nfs-1 {
              address   10.0.0.7:7791;
              device    /dev/drbd1;
              disk      /dev/vg-NW2-NFS/NW2;
              meta-disk internal;
         }
    }
    

    Crie o dispositivo drbd e inicie-o

    sudo drbdadm create-md NW1-nfs
    sudo drbdadm create-md NW2-nfs
    sudo drbdadm up NW1-nfs
    sudo drbdadm up NW2-nfs
    
  8. [1] Ignorar a sincronização inicial

    sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs
    sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
    
  9. [1] Definir o nó primário

    sudo drbdadm primary --force NW1-nfs
    sudo drbdadm primary --force NW2-nfs
    
  10. [1] Aguarde até que os novos dispositivos drbd estejam sincronizados

    sudo drbdsetup wait-sync-resource NW1-nfs
    sudo drbdsetup wait-sync-resource NW2-nfs
    
  11. [1] Criar sistemas de ficheiros nos dispositivos drbd

    sudo mkfs.xfs /dev/drbd0
    sudo mkdir /srv/nfs/NW1
    sudo chattr +i /srv/nfs/NW1
    sudo mount -t xfs /dev/drbd0 /srv/nfs/NW1
    sudo mkdir /srv/nfs/NW1/sidsys
    sudo mkdir /srv/nfs/NW1/sapmntsid
    sudo mkdir /srv/nfs/NW1/trans
    sudo mkdir /srv/nfs/NW1/ASCS
    sudo mkdir /srv/nfs/NW1/ASCSERS
    sudo mkdir /srv/nfs/NW1/SCS
    sudo mkdir /srv/nfs/NW1/SCSERS
    sudo umount /srv/nfs/NW1
    
    sudo mkfs.xfs /dev/drbd1
    sudo mkdir /srv/nfs/NW2
    sudo chattr +i /srv/nfs/NW2
    sudo mount -t xfs /dev/drbd1 /srv/nfs/NW2
    sudo mkdir /srv/nfs/NW2/sidsys
    sudo mkdir /srv/nfs/NW2/sapmntsid
    sudo mkdir /srv/nfs/NW2/trans
    sudo mkdir /srv/nfs/NW2/ASCS
    sudo mkdir /srv/nfs/NW2/ASCSERS
    sudo mkdir /srv/nfs/NW2/SCS
    sudo mkdir /srv/nfs/NW2/SCSERS
    sudo umount /srv/nfs/NW2
    
  12. [A] Configuração drbd split-brain detection

    Ao usar drbd para sincronizar dados de um host para outro, um chamado cérebro dividido pode ocorrer. Um cérebro dividido é um cenário em que ambos os nós de cluster promoveram o dispositivo drbd para ser o principal e saíram de sincronia. Pode ser uma situação rara, mas você ainda quer lidar e resolver um cérebro dividido o mais rápido possível. Por isso, é importante ser notificado quando uma divisão cerebral aconteceu.

    Leia a documentação oficial do drbd sobre como configurar uma notificação de cérebro dividido.

    Também é possível recuperar automaticamente de um cenário de cérebro dividido. Para obter mais informações, leia Políticas de recuperação automática de cérebro dividido

Configurar o Cluster Framework

  1. [1] Adicione os dispositivos drbd NFS para o sistema SAP NW1 à configuração do cluster

    Importante

    Testes recentes revelaram situações em que o netcat para de responder a solicitações devido ao backlog e sua limitação de lidar com apenas uma conexão. O recurso netcat para de ouvir as solicitações do balanceador de carga do Azure e o IP flutuante fica indisponível.
    Para clusters de marcapasso existentes, recomendamos no passado a substituição do netcat pelo socat. Atualmente, recomendamos o uso do azure-lb resource agent, que faz parte dos agentes de recursos do pacote, com os seguintes requisitos de versão do pacote:

    • Para SLES 12 SP4/SP5, a versão deve ser pelo menos resource-agents-4.3.018.a7fb5035-3.30.1.
    • Para o SLES 15/15 SP1, a versão deve ser pelo menos resource-agents-4.3.0184.6ee15eb2-4.13.1.

    Observe que a alteração exigirá um breve tempo de inatividade.
    Para clusters Pacemaker existentes, se a configuração já tiver sido alterada para usar socat conforme descrito em Azure Load-Balancer Detection Hardening, não há necessidade de alternar imediatamente para o azure-lb resource agent.

    sudo crm configure rsc_defaults resource-stickiness="200"
    
    # Enable maintenance mode
    sudo crm configure property maintenance-mode=true
    
    sudo crm configure primitive drbd_NW1_nfs \
      ocf:linbit:drbd \
      params drbd_resource="NW1-nfs" \
      op monitor interval="15" role="Master" \
      op monitor interval="30" role="Slave"
    
    sudo crm configure ms ms-drbd_NW1_nfs drbd_NW1_nfs \
      meta master-max="1" master-node-max="1" clone-max="2" \
      clone-node-max="1" notify="true" interleave="true"
    
    sudo crm configure primitive fs_NW1_sapmnt \
      ocf:heartbeat:Filesystem \
      params device=/dev/drbd0 \
      directory=/srv/nfs/NW1  \
      fstype=xfs \
      op monitor interval="10s"
    
    sudo crm configure primitive nfsserver systemd:nfs-server \
      op monitor interval="30s"
    sudo crm configure clone cl-nfsserver nfsserver
    
    sudo crm configure primitive exportfs_NW1 \
      ocf:heartbeat:exportfs \
      params directory="/srv/nfs/NW1" \
      options="rw,no_root_squash,crossmnt" clientspec="*" fsid=1 wait_for_leasetime_on_stop=true op monitor interval="30s"
    
    sudo crm configure primitive vip_NW1_nfs IPaddr2 \
      params ip=10.0.0.4 op monitor interval=10 timeout=20
    
    sudo crm configure primitive nc_NW1_nfs azure-lb port=61000 \
      op monitor timeout=20s interval=10
    
    sudo crm configure group g-NW1_nfs \
      fs_NW1_sapmnt exportfs_NW1 nc_NW1_nfs vip_NW1_nfs
    
    sudo crm configure order o-NW1_drbd_before_nfs inf: \
      ms-drbd_NW1_nfs:promote g-NW1_nfs:start
    
    sudo crm configure colocation col-NW1_nfs_on_drbd inf: \
      g-NW1_nfs ms-drbd_NW1_nfs:Master
    
  2. [1] Adicione os dispositivos drbd NFS para o sistema SAP NW2 à configuração do cluster

    # Enable maintenance mode
    sudo crm configure property maintenance-mode=true
    
    sudo crm configure primitive drbd_NW2_nfs \
      ocf:linbit:drbd \
      params drbd_resource="NW2-nfs" \
      op monitor interval="15" role="Master" \
      op monitor interval="30" role="Slave"
    
    sudo crm configure ms ms-drbd_NW2_nfs drbd_NW2_nfs \
      meta master-max="1" master-node-max="1" clone-max="2" \
      clone-node-max="1" notify="true" interleave="true"
    
    sudo crm configure primitive fs_NW2_sapmnt \
      ocf:heartbeat:Filesystem \
      params device=/dev/drbd1 \
      directory=/srv/nfs/NW2  \
      fstype=xfs \
      op monitor interval="10s"
    
    sudo crm configure primitive exportfs_NW2 \
      ocf:heartbeat:exportfs \
      params directory="/srv/nfs/NW2" \
      options="rw,no_root_squash,crossmnt" clientspec="*" fsid=2 wait_for_leasetime_on_stop=true op monitor interval="30s"
    
    sudo crm configure primitive vip_NW2_nfs IPaddr2 \
      params ip=10.0.0.5 op monitor interval=10 timeout=20
    
    sudo crm configure primitive nc_NW2_nfs azure-lb port=61001 \
      op monitor timeout=20s interval=10
    
    sudo crm configure group g-NW2_nfs \
      fs_NW2_sapmnt exportfs_NW2 nc_NW2_nfs vip_NW2_nfs
    
    sudo crm configure order o-NW2_drbd_before_nfs inf: \
      ms-drbd_NW2_nfs:promote g-NW2_nfs:start
    
    sudo crm configure colocation col-NW2_nfs_on_drbd inf: \
      g-NW2_nfs ms-drbd_NW2_nfs:Master
    

    A crossmnt opção nos recursos de exportfs cluster está presente em nossa documentação para compatibilidade com versões anteriores do SLES.

  3. [1] Desativar o modo de manutenção

    sudo crm configure property maintenance-mode=false
    

Próximos passos