Hochverfügbarkeit für NFS auf Azure-VMs unter SUSE Linux Enterprise Server

Hinweis

Sie sollten einen der Erstanbieter-NFS-Dienste von Azure bereitstellen: NFS für Azure Files oder NFS ANF-Volumes zum Speichern freigegebener Daten in einem hoch verfügbaren SAP-System. Beachten Sie, dass wir SAP-Referenzarchitekturen in den Hintergrund stellen und NFS-Cluster verwenden.

In diesem Artikel werden das Bereitstellen und Konfigurieren der virtuellen Computer, das Installieren des Clusterframeworks und das Installieren eines hochverfügbaren NFS-Servers, auf dem die freigegebenen Daten eines hochverfügbaren SAP-Systems gespeichert werden können, beschrieben. In dieser Anleitung wird beschrieben, wie ein hochverfügbarer NFS-Server eingerichtet wird, der von zwei SAP-Systemen verwendet wird: NW1 und NW2. Bezüglich der Namen der Ressourcen (z. B. virtuelle Computer, virtuelle Netzwerke) im Beispiel wird davon ausgegangen, dass Sie die SAP-Dateiservervorlage mit dem Ressourcenpräfix prod verwendet haben.

Hinweis

Dieser Artikel enthält Verweise auf Begriffe, die Microsoft nicht mehr verwendet. Sobald die Begriffe aus der Software entfernt wurden, werden sie auch aus diesem Artikel gelöscht.

Lesen Sie zuerst die folgenden SAP Notes und Dokumente:

Übersicht

Zum Erreichen von Hochverfügbarkeit erfordert SAP NetWeaver einen NFS-Server. Der NFS-Server ist in einem separaten Cluster konfiguriert und kann von mehreren SAP-Systemen verwendet werden.

SAP NetWeaver High Availability overview

Der NFS-Server verwendet einen dedizierten virtuellen Hostnamen und virtuelle IP-Adressen für jedes SAP-System, das diesen NFS-Server verwendet. Für die Verwendung einer virtuellen IP-Adresse ist in Azure ein Lastenausgleich erforderlich. Die dargestellte Konfiguration zeigt einen Lastenausgleich mit:

  • Front-End-IP-Adresse 10.0.0.4 für NW1
  • Front-End-IP-Adresse 10.0.0.5 für NW2
  • Testport 61000 für NW1
  • Testport 61001 für NW2

Einrichten eines hochverfügbaren NFS-Servers

Manuelles Bereitstellen von Linux über das Azure-Portal

In diesem Dokument wird davon ausgegangen, dass Sie bereits eine Ressourcengruppe, ein virtuelles Azure-Netzwerk und ein Subnetz bereitgestellt haben.

Stellen Sie zwei virtuelle Computer für NFS-Server bereit. Wählen Sie ein geeignetes SLES-Image aus, das mit Ihrem SAP-System unterstützt wird. Sie können den virtuellen Computer in einer der Verfügbarkeitsoptionen bereitstellen: Skalierungsgruppe, Verfügbarkeitszone oder Verfügbarkeitsgruppe.

Konfigurieren von Azure Load Balancer

Befolgen Sie die Anleitung zum Erstellen des Lastenausgleichs , um einen standardmäßigen Lastenausgleich für eine hohe Verfügbarkeit eines NFS-Servers zu konfigurieren. Berücksichtigen Sie bei der Konfiguration des Lastenausgleichs die folgenden Punkte.

  1. Front-End-IP-Konfiguration: Erstellen Sie zwei Frontend-IP-Adressen. Wählen Sie dasselbe virtuelle Netzwerk und dasselbe Subnetz wie Ihr NFS-Server aus.
  2. Back-End-Pool: Erstellen Eines Back-End-Pools und Hinzufügen von NFS-Server-VMs.
  3. Eingehende Regeln: Erstellen Sie zwei Lastenausgleichsregel, eine für NW1 und eine für NW2. Führen Sie die gleichen Schritte für beide Lastenausgleichsregeln aus.
    • Front-End-IP-Adresse: Frontend-IP auswählen
    • Back-End-Pool: Back-End-Pool auswählen
    • Überprüfen von "Ports für hohe Verfügbarkeit"
    • Protokoll: TCP
    • Integritätsprüfer: Erstellen einer Integritätssonde mit den folgenden Details (gilt sowohl für NW1 als auch für NW2)
      • Protokoll: TCP
      • Port: [beispiel: 610000 for NW1, 61001 for NW2]
      • Intervall: 5
      • Probeschwellenwert: 2
    • Leerlauftimeout (Minuten): 30
    • Aktivieren von unverankerten IP-Adressen

Hinweis

Die Konfigurationseigenschaft „numberOfProbes“ für Integritätstests (im Portal als „Fehlerschwellenwert“ bezeichnet) wird nicht berücksichtigt. Um die Anzahl der erfolgreichen oder fehlgeschlagenen aufeinanderfolgenden Probes zu steuern, legen Sie die Eigenschaft "probeThreshold" auf 2 fest. Es ist derzeit nicht möglich, diese Eigenschaft mit Azure-Portal festzulegen. Verwenden Sie daher entweder den Azure CLI- oder PowerShell-Befehl.

Wichtig

Floating IP-Adressen werden in IP-Konfigurationen mit zwei NICs in Szenarien mit Lastenausgleich nicht unterstützt. Weitere Informationen finden Sie unter Azure Load Balancer – Einschränkungen. Wenn Sie zusätzliche IP-Adressen für die VM benötigen, stellen Sie eine zweite NIC bereit.

Hinweis

Wenn virtuelle Computer ohne öffentliche IP-Adressen im Back-End-Pool einer internen Azure Load Balancer Standard-Instanz (ohne öffentliche IP-Adresse) platziert werden, liegt keine ausgehende Internetverbindung vor, sofern nicht in einer zusätzlichen Konfiguration das Routing an öffentliche Endpunkte zugelassen wird. Ausführliche Informationen zum Erreichen ausgehender Konnektivität finden Sie unter Public endpoint connectivity for Virtual Machines using Azure Standard Load Balancer in SAP high-availability scenarios (Konnektivität mit öffentlichen Endpunkten für virtuelle Computer mithilfe von Azure Load Balancer Standard in SAP-Szenarien mit Hochverfügbarkeit).

Wichtig

  • Aktivieren Sie keine TCP-Zeitstempel auf Azure-VMs, die sich hinter Azure Load Balancer befinden. Das Aktivieren von TCP-Zeitstempeln bewirkt, dass bei Integritätstests Fehler auftreten. Setzen Sie den net.ipv4.tcp_timestamps-Parameter auf 0. Ausführliche Informationen finden Sie unter Load Balancer-Integritätstests.
  • Um zu verhindern, dass saptune den manuell festgelegten net.ipv4.tcp_timestamps Wert von 0 hinten in 1ändert, sollten Sie saptune-Version auf 3.1.1 oder höher aktualisieren. Weitere Informationen finden Sie unter saptune 3.1.1 – Muss ich aktualisieren?.

Erstellen des Pacemaker-Clusters

Führen Sie die Schritte unter Einrichten von Pacemaker unter SUSE Linux Enterprise Server in Azure zum Erstellen eines grundlegenden Pacemaker-Clusters für den NFS-Server aus.

Konfigurieren des NFS-Servers

Die folgenden Elemente sind mit einem der folgenden Präfixe versehen: [A] – gilt für alle Knoten, [1] – gilt nur für Knoten 1, oder [2] – gilt nur für Knoten 2.

  1. [A] Richten Sie die Hostnamensauflösung ein.

    Sie können entweder einen DNS-Server verwenden oder „/etc/hosts“ auf allen Knoten ändern. In diesem Beispiel wird die Verwendung der /etc/hosts-Datei veranschaulicht. Ersetzen Sie die IP-Adresse und den Hostnamen in den folgenden Befehlen.

    sudo vi /etc/hosts
    

    Fügen Sie „/etc/hosts“ die folgenden Zeilen hinzu. Ändern Sie die IP-Adresse und den Hostnamen Ihrer Umgebung entsprechend.

    # IP address of the load balancer frontend configuration for NFS
    
    10.0.0.4 nw1-nfs
    10.0.0.5 nw2-nfs
    
  2. [A] Aktivieren Sie den NFS-Server.

    Erstellen des Eintrags für den Stammeintrag für den NFS-Export

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

    sudo zypper install drbd drbd-kmp-default drbd-utils
    
  4. [A] Erstellen Sie eine Partition für die DRBD-Geräte.

    Listen Sie alle verfügbaren Datenträger auf.

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

    Erstellen Sie Partitionen für alle Datenträger.

    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] Erstellen Sie LVM-Konfigurationen.

    Listen Sie alle verfügbaren Partitionen auf.

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

    Erstellen Sie LVM-Volumes für alle Partitionen.

    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] Konfigurieren Sie DRBD.

    sudo vi /etc/drbd.conf
    

    Stellen Sie sicher, dass die Datei „drbd.conf“ die folgenden beiden Zeilen enthält.

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

    Ändern Sie die globale DRBD-Konfiguration.

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

    Fügen Sie die folgenden Einträge den Abschnitten „handler“ und „net“ hinzu.

    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] Erstellen Sie die NFS-DRBD-Geräte.

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

    Fügen Sie die Konfiguration für das neue DRBD-Gerät ein, und beenden Sie es.

    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
    

    Fügen Sie die Konfiguration für das neue DRBD-Gerät ein, und beenden Sie es.

    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;
         }
    }
    

    Erstellen Sie das DRBD-Gerät, und starten Sie es.

    sudo drbdadm create-md NW1-nfs
    sudo drbdadm create-md NW2-nfs
    sudo drbdadm up NW1-nfs
    sudo drbdadm up NW2-nfs
    
  8. [1] Überspringen Sie die Erstsynchronisierung.

    sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs
    sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
    
  9. [1] Legen Sie den primären Knoten fest.

    sudo drbdadm primary --force NW1-nfs
    sudo drbdadm primary --force NW2-nfs
    
  10. [1] Warten Sie, bis die neuen DRBD-Geräte synchronisiert sind.

    sudo drbdsetup wait-sync-resource NW1-nfs
    sudo drbdsetup wait-sync-resource NW2-nfs
    
  11. [1] Erstellen Sie Dateisysteme auf den DRBD-Geräten.

    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] Richten Sie die DRBD-Split Brain-Erkennung ein.

    Bei Verwendung von DRBD zum Synchronisieren von Daten zwischen verschiedenen Hosts kann ein sogenanntes Split Brain-Syndrom auftreten. Ein Split Brain-Syndrom ist ein Szenario, bei dem beide Clusterknoten das DRBD-Gerät als primäres Gerät höher gestuft haben und nicht mehr synchronisiert sind. Dies ist wohl ein selten auftretender Fall, dennoch sollte ein Split Brain-Problem schnellstmöglich behandelt und behoben werden. Es ist daher wichtig, dass bei einem aufgetretenen Split Brain-Problem eine Benachrichtigung erfolgt.

    Informationen zum Einrichten einer Benachrichtigung zu einem Split Brain-Problem finden Sie in der offiziellen DRBD-Dokumentation.

    Es ist zudem möglich, eine automatische Wiederherstellung nach einem Split Brain-Szenario durchzuführen. Weitere Informationen finden Sie unter Automatic split brain recovery policies (Richtlinien zur automatischen Split Brain-Wiederherstellung).

Konfigurieren des Clusterframeworks

  1. [1] Fügen Sie der Clusterkonfiguration die NFS-DRBD-Geräte für das SAP-System NW1 hinzu.

    Wichtig

    Kürzlich durchgeführte Tests haben Situationen aufgezeigt, in denen netcat aufgrund von Backlog und der Einschränkung, nur eine Verbindung zu verarbeiten, nicht mehr auf Anforderungen reagiert. Die netcat-Ressource lauscht dann nicht mehr auf Azure Load Balancer-Anforderungen, und die Floating IP-Adresse ist nicht mehr verfügbar.
    Für vorhandene Pacemaker-Cluster wurde zuvor empfohlen, netcat durch socat zu ersetzen. Zurzeit wird empfohlen, den Ressourcen-Agent azure-lb zu verwenden, der Teil des Pakets resource-agents ist. Dabei gelten die folgenden Versionsanforderungen für das Paket:

    • Für SLES 12 SP4/SP5 muss die Version mindestens resource-agents-4.3.018.a7fb5035-3.30.1 sein.
    • Für SLES 15/15 SP1 muss die Version mindestens resource-agents-4.3.0184.6ee15eb2-4.13.1 sein.

    Beachten Sie, dass für die Änderung eine kurze Ausfallzeit erforderlich ist.
    Wenn die Konfiguration bei vorhandenen Pacemaker-Clustern bereits für die Verwendung von socat geändert wurde, wie unter Azure Load Balancer-Erkennungshärtung beschrieben, müssen Sie nicht sofort zum Ressourcen-Agent azure-lb wechseln.

    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] Fügen Sie der Clusterkonfiguration die NFS-DRBD-Geräte für das SAP-System NW2 hinzu.

    # 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
    

    Die crossmnt-Option in den exportfs-Clusterressourcen ist in unserer Dokumentation für die Abwärtskompatibilität mit älteren SLES-Versionen enthalten.

  3. [1] Deaktivieren Sie den Wartungsmodus.

    sudo crm configure property maintenance-mode=false
    

Nächste Schritte