Wysoka dostępność systemu plików NFS na maszynach wirtualnych platformy Azure na serwerze SUSE Linux Enterprise Server

Uwaga

Zalecamy wdrożenie jednej z usług NFS platformy Azure: NFS w usłudze Azure Files lub woluminach ANF NFS do przechowywania udostępnionych danych w systemie SAP o wysokiej dostępności. Należy pamiętać, że wyróżniamy architektury referencyjne sap, korzystając z klastrów NFS.

W tym artykule opisano sposób wdrażania maszyn wirtualnych, konfigurowania maszyn wirtualnych, instalowania struktury klastra i instalowania serwera NFS o wysokiej dostępności, który może służyć do przechowywania udostępnionych danych systemu SAP o wysokiej dostępności. W tym przewodniku opisano sposób konfigurowania serwera NFS o wysokiej dostępności, który jest używany przez dwa systemy SAP, NW1 i NW2. Nazwy zasobów (na przykład maszyn wirtualnych, sieci wirtualnych) w przykładzie zakładają, że użyto szablonu serwera plików SAP z prefiksem zasobów.

Uwaga

Ten artykuł zawiera odwołania do terminów, których firma Microsoft już nie używa. Po usunięciu warunków z oprogramowania usuniemy je z tego artykułu.

Najpierw przeczytaj następujące notatki i dokumenty SAP

Omówienie

Aby zapewnić wysoką dostępność, oprogramowanie SAP NetWeaver wymaga serwera NFS. Serwer NFS jest skonfigurowany w osobnym klastrze i może być używany przez wiele systemów SAP.

SAP NetWeaver High Availability overview

Serwer NFS używa dedykowanej wirtualnej nazwy hosta i wirtualnych adresów IP dla każdego systemu SAP, który używa tego serwera NFS. Na platformie Azure moduł równoważenia obciążenia jest wymagany do korzystania z wirtualnego adresu IP. Przedstawiona konfiguracja przedstawia moduł równoważenia obciążenia z:

  • Adres IP frontonu 10.0.0.4 dla NW1
  • Adres IP frontonu 10.0.0.5 dla NW2
  • Port sondy 61000 dla NW1
  • Port sondy 61001 dla NW2

Konfigurowanie serwera NFS o wysokiej dostępności

Ręczne wdrażanie systemu Linux za pośrednictwem witryny Azure Portal

W tym dokumencie przyjęto założenie, że grupa zasobów, usługa Azure Virtual Network i podsieć zostały już wdrożone.

Wdróż dwie maszyny wirtualne dla serwerów NFS. Wybierz odpowiedni obraz SLES obsługiwany przez system SAP. Maszynę wirtualną można wdrożyć w dowolnej z opcji dostępności — zestawu skalowania, strefy dostępności lub zestawu dostępności.

Konfigurowanie modułu równoważenia obciążenia platformy Azure

Postępuj zgodnie z przewodnikiem tworzenia modułu równoważenia obciążenia, aby skonfigurować moduł równoważenia obciążenia w warstwie Standardowa na potrzeby wysokiej dostępności serwera NFS. Podczas konfigurowania modułu równoważenia obciążenia rozważ następujące kwestie.

  1. Konfiguracja adresu IP frontonu: utwórz dwa adresy IP frontonu. Wybierz tę samą sieć wirtualną i podsieć co serwer NFS.
  2. Pula zaplecza: utwórz pulę zaplecza i dodaj maszyny wirtualne serwera NFS.
  3. Reguły ruchu przychodzącego: utwórz dwie reguły równoważenia obciążenia, jedną dla NW1 i drugą dla NW2. Wykonaj te same kroki dla obu reguł równoważenia obciążenia.
    • Adres IP frontonu: wybierz adres IP frontonu
    • Pula zaplecza: wybierz pulę zaplecza
    • Sprawdź "Porty wysokiej dostępności"
    • Protokół: TCP
    • Sonda kondycji: utwórz sondę kondycji z poniższymi szczegółami (dotyczy zarówno NW1, jak i NW2)
      • Protokół: TCP
      • Port: [na przykład: 61000 dla NW1, 61001 dla NW2]
      • Interwał: 5
      • Próg sondy: 2
    • Limit czasu bezczynności (minuty): 30
    • Sprawdź pozycję "Włącz pływający adres IP"

Uwaga

Właściwość konfiguracji sondy kondycji NumberOfProbes, inaczej znana jako "Próg złej kondycji" w portalu, nie jest uwzględniana. Aby więc kontrolować liczbę pomyślnych lub zakończonych niepowodzeniem kolejnych sond, ustaw właściwość "probeThreshold" na 2. Obecnie nie można ustawić tej właściwości przy użyciu witryny Azure Portal, dlatego użyj polecenia interfejsu wiersza polecenia platformy Azure lub programu PowerShell .

Ważne

Pływający adres IP nie jest obsługiwany w pomocniczej konfiguracji adresu IP karty sieciowej w scenariuszach równoważenia obciążenia. Aby uzyskać szczegółowe informacje, zobacz Ograniczenia usługi Azure Load Balancer. Jeśli potrzebujesz dodatkowego adresu IP maszyny wirtualnej, wdróż drugą kartę sieciową.

Uwaga

Jeśli maszyny wirtualne bez publicznych adresów IP są umieszczane w puli zaplecza wewnętrznego (bez publicznego adresu IP) standardowego modułu równoważenia obciążenia platformy Azure, nie będzie żadnych wychodzących połączeń internetowych, chyba że zostanie wykonana dodatkowa konfiguracja umożliwiająca routing do publicznych punktów końcowych. Aby uzyskać szczegółowe informacje na temat sposobu uzyskiwania łączności wychodzącej, zobacz Publiczna łączność punktu końcowego dla maszyn wirtualnych przy użyciu usługi Azure usługa Load Balancer w warstwie Standardowa w scenariuszach wysokiej dostępności oprogramowania SAP.

Ważne

  • Nie włączaj sygnatur czasowych TCP na maszynach wirtualnych platformy Azure umieszczonych za usługą Azure Load Balancer. Włączenie sygnatur czasowych protokołu TCP spowoduje niepowodzenie sond kondycji. net.ipv4.tcp_timestamps Ustaw parametr na 0. Aby uzyskać szczegółowe informacje, zobacz Load Balancer health probes (Sondy kondycji modułu równoważenia obciążenia).
  • Aby zapobiec zmianie ręcznie ustawionej net.ipv4.tcp_timestamps wartości z 0 powrotem na 1, należy zaktualizować program saptune do wersji 3.1.1 lub nowszej. Aby uzyskać więcej informacji, zobacz saptune 3.1.1 — Czy muszę zaktualizować?.

Tworzenie klastra Pacemaker

Wykonaj kroki opisane w temacie Konfigurowanie programu Pacemaker na serwerze SUSE Linux Enterprise Server na platformie Azure , aby utworzyć podstawowy klaster Pacemaker dla tego serwera NFS.

Konfigurowanie serwera NFS

Następujące elementy mają prefiks [A] — dotyczy wszystkich węzłów [1] — dotyczy tylko węzła 1 lub [2] — dotyczy tylko węzła 2.

  1. [A] Konfigurowanie rozpoznawania nazw hosta

    Można użyć serwera DNS lub zmodyfikować /etc/hosts na wszystkich węzłach. W tym przykładzie pokazano, jak używać pliku /etc/hosts. Zastąp adres IP i nazwę hosta w następujących poleceniach

    sudo vi /etc/hosts
    

    Wstaw następujące wiersze do /etc/hosts. Zmień adres IP i nazwę hosta tak, aby był zgodny ze środowiskiem

    # IP address of the load balancer frontend configuration for NFS
    
    10.0.0.4 nw1-nfs
    10.0.0.5 nw2-nfs
    
  2. [A] Włączanie serwera NFS

    Tworzenie głównego wpisu eksportu NFS

    sudo sh -c 'echo /srv/nfs/ *\(rw,no_root_squash,fsid=0\)>/etc/exports'
    
    sudo mkdir /srv/nfs/
    
  3. [A] Instalowanie składników drbd

    sudo zypper install drbd drbd-kmp-default drbd-utils
    
  4. [A] Tworzenie partycji dla urządzeń drbd

    Wyświetlanie listy wszystkich dostępnych dysków danych

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

    Tworzenie partycji dla każdego dysku danych

    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] Tworzenie konfiguracji LVM

    Wyświetlanie listy wszystkich dostępnych partycji

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

    Tworzenie woluminów LVM dla każdej partycji

    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] Konfigurowanie narzędzia drbd

    sudo vi /etc/drbd.conf
    

    Upewnij się, że plik drbd.conf zawiera następujące dwa wiersze

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

    Zmienianie globalnej konfiguracji drbd

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

    Dodaj następujące wpisy do procedury obsługi i sekcji 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] Tworzenie urządzeń drbd systemu plików NFS

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

    Wstaw konfigurację nowego urządzenia drbd i zamknij

    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
    

    Wstaw konfigurację nowego urządzenia drbd i zamknij

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

    Tworzenie urządzenia drbd i uruchamianie go

    sudo drbdadm create-md NW1-nfs
    sudo drbdadm create-md NW2-nfs
    sudo drbdadm up NW1-nfs
    sudo drbdadm up NW2-nfs
    
  8. [1] Pomiń synchronizację początkową

    sudo drbdadm new-current-uuid --clear-bitmap NW1-nfs
    sudo drbdadm new-current-uuid --clear-bitmap NW2-nfs
    
  9. [1] Ustawianie węzła podstawowego

    sudo drbdadm primary --force NW1-nfs
    sudo drbdadm primary --force NW2-nfs
    
  10. [1] Poczekaj na zsynchronizowanie nowych urządzeń drbd

    sudo drbdsetup wait-sync-resource NW1-nfs
    sudo drbdsetup wait-sync-resource NW2-nfs
    
  11. [1] Tworzenie systemów plików na urządzeniach 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] Konfigurowanie wykrywania podziału mózgu przez drbd

    W przypadku korzystania z drbd do synchronizowania danych z jednego hosta do innego może wystąpić tzw podział mózgu. Podzielony mózg jest scenariuszem, w którym oba węzły klastra promowały urządzenie drbd jako podstawowe i wyszło z synchronizacji. Może to być rzadka sytuacja, ale nadal chcesz poradzić sobie i rozwiązać podzielony mózg tak szybko, jak to możliwe. Dlatego ważne jest, aby otrzymywać powiadomienia o wystąpieniu podzielonego mózgu.

    Przeczytaj oficjalną dokumentację drbd dotyczącą konfigurowania podzielonego powiadomienia mózgu.

    Możliwe jest również automatyczne odzyskanie sprawności po scenariuszu podzielonego mózgu. Aby uzyskać więcej informacji, zapoznaj się z tematem Automatyczne zasady odzyskiwania mózgu podzielonego mózgu

Konfigurowanie struktury klastra

  1. [1] Dodawanie urządzeń drbd NFS dla systemu SAP NW1 do konfiguracji klastra

    Ważne

    Ostatnie testy wykazały sytuacje, w których netcat przestaje odpowiadać na żądania z powodu listy prac i ograniczenia obsługi tylko jednego połączenia. Zasób netcat przestaje nasłuchiwać żądań modułu równoważenia obciążenia platformy Azure, a pływający adres IP staje się niedostępny.
    W przypadku istniejących klastrów Pacemaker zalecamy w przeszłości zastąpienie serwera netcat socat. Obecnie zalecamy użycie agenta zasobów azure-lb, który jest częścią agentów zasobów pakietu z następującymi wymaganiami dotyczącymi wersji pakietu:

    • W przypadku systemu SLES 12 SP4/SP5 wersja musi być co najmniej resource-agents-4.3.018.a7fb5035-3.30.1.
    • W przypadku systemu SLES 15/15 SP1 wersja musi być co najmniej resource-agents-4.3.0184.6ee15eb2-4.13.1.

    Należy pamiętać, że zmiana będzie wymagać krótkiego przestoju.
    W przypadku istniejących klastrów Pacemaker, jeśli konfiguracja została już zmieniona tak, aby korzystała z serwera socat zgodnie z opisem w temacie Azure Load-Balancer Detection Hardening (Wzmacnianie zabezpieczeń wykrywania modułu równoważenia obciążenia platformy Azure), nie ma potrzeby natychmiastowego przełączania się do agenta zasobów azure-lb.

    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] Dodawanie urządzeń drbd NFS dla systemu SAP NW2 do konfiguracji klastra

    # 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
    

    Opcja crossmnt w zasobach klastra exportfs znajduje się w naszej dokumentacji dotyczącej zgodności z poprzednimi wersjami systemu SLES.

  3. [1] Wyłączanie trybu konserwacji

    sudo crm configure property maintenance-mode=false
    

Następne kroki