Konfigurationsanleitung für Hochverfügbarkeitscluster für SAP MaxDB unter RHEL

In dieser Anleitung erfahren Sie, wie Sie ein SAP MaxDB-System in einem Red Hat Enterprise Linux (RHEL)-Hochverfügbarkeitscluster in Google Cloudmit einer aktiven/passiven Clusterkonfiguration bereitstellen.

Informationen zum Bereitstellen eines SAP MaxDB-Systems mit einem einzelnen Knoten unter Linux finden Sie im SAP MaxDB-Bereitstellungsleitfaden.

Diese Anleitung richtet sich an fortgeschrittene SAP MaxDB-Nutzer, die mit Linux-Hochverfügbarkeitskonfigurationen für SAP-Systeme vertraut sind.

System, das in dieser Anleitung bereitgestellt wird

Die Anleitung umfasst folgende Schritte:

  • Internen Passthrough-Network-Load-Balancer konfigurieren, um Traffic bei einem Ausfall umzuleiten
  • Pacemaker-Cluster unter RHEL konfigurieren, um die SAP-Systeme und andere Ressourcen während eines Failovers zu verwalten

Der bereitgestellte Cluster enthält die folgenden Funktionen und Features:

  • Zwei Compute Engine-VMs in verschiedenen Zonen, auf denen eine Instanz von SAP MaxDB ausgeführt werden kann
  • Ein regionaler nichtflüchtiger Speicher für die Installation von SAP MaxDB.
  • Hochverfügbarkeitsclusterressourcen-Manager von Pacemaker
  • STONITH-Fencing-Mechanismus

Eine Hochverfügbarkeitsinstallation von SAP NetWeaver wird in dieser Anleitung nicht behandelt.

Vorbereitung

Vor dem Erstellen eines SAP MaxDB-Hochverfügbarkeitsclusters sind die folgenden Voraussetzungen zu erfüllen:

  • Sie haben den Planungsleitfaden für SAP MaxDB gelesen.
  • Sie haben ein Red Hat-Abo.
  • Sie oder Ihre Organisation haben ein Google Cloud -Konto und Sie haben ein Projekt für die SAP MaxDB-Bereitstellung erstellt.
  • Wenn Ihre SAP-Arbeitslast die Anforderungen an den Datenstandort, die Zugriffssteuerung oder die Supportmitarbeiter oder gesetzliche Anforderungen erfüllen muss, müssen Sie den erforderlichen Assured Workloads-Ordner erstellen. Weitere Informationen finden Sie unter Compliance und Steuerung der Datenhoheit für SAP in Google Cloud.

  • Wenn OS Login in den Projektmetadaten aktiviert ist, müssen Sie OS Login vorübergehend deaktivieren, bis die Bereitstellung abgeschlossen ist. Für die Bereitstellung konfiguriert dieses Verfahren SSH-Schlüssel in Instanzmetadaten. Bei aktiviertem OS Login sind metadatenbasierte SSH-Schlüsselkonfigurationen deaktiviert und diese Bereitstellung schlägt fehl. Nach Abschluss der Bereitstellung können Sie die OS Login-Funktion wieder aktivieren.

    Weitere Informationen finden Sie unter:

Netzwerk erstellen

Erstellen Sie aus Sicherheitsgründen ein neues Netzwerk. Durch das Festlegen von Firewallregeln oder die Nutzung eines anderen Verfahrens der Zugriffskontrolle steuern Sie, wer Zugriff hat.

Wenn Ihr Projekt ein Standard-VPC-Netzwerk (Virtual Private Cloud) hat, verwenden Sie es nicht. Erstellen Sie stattdessen Ihr eigenes VPC-Netzwerk, sodass nur die von Ihnen explizit formulierten Firewallregeln gelten.

Während der Bereitstellung müssen VM-Instanzen normalerweise auf das Internet zugreifen können, um den Agenten für SAP von Google Cloudherunterzuladen. Wenn Sie eines der von SAP zertifizierten Linux-Images verwenden, die in Google Cloudverfügbar sind, benötigen die VM-Instanzen außerdem einen Internetzugang, um die Lizenz zu registrieren und auf Repositories von Betriebssystemanbietern zuzugreifen. Eine Konfiguration mit einem NAT-Gateway und VM-Netzwerk-Tags unterstützt diesen Zugriff selbst dann, wenn die Ziel-VMs keine externen IP-Adressen haben.

So richten Sie das Netzwerk ein:

Console

  1. Rufen Sie in der Google Cloud -Konsole die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Klicken Sie auf VPC-Netzwerk erstellen.
  3. Geben Sie einen Namen für das Netzwerk ein.

    Der Name muss der Namenskonvention entsprechen. VPC-Netzwerke verwenden die Namenskonvention von Compute Engine.

  4. Wählen Sie unter Modus für Subnetzerstellung die Option Benutzerdefiniert aus.
  5. Legen Sie im Abschnitt Neues Subnetz folgende Konfigurationsparameter für das Subnetz fest:
    1. Geben Sie einen Namen für das Subnetz ein.
    2. Wählen Sie unter Region die Compute Engine-Region aus, in der Sie das Subnetz erstellen möchten.
    3. Wählen Sie für IP-Stack-Typ die Option IPv4 (einzelner Stack) aus und geben Sie dann einen IP-Adressbereich im CIDR-Format ein, z. B. 10.1.0.0/24.

      Dies ist der primäre IPv4-Bereich für das Subnetz. Wenn Sie mehrere Subnetze erstellen möchten, weisen Sie den Subnetzen im Netzwerk nicht überlappende CIDR-IP-Adressbereiche zu. Beachten Sie, dass jedes Subnetz und seine internen IP-Adressbereiche einer einzelnen Region zugeordnet sind.

    4. Klicken Sie auf Fertig.
  6. Klicken Sie auf Subnetz hinzufügen und wiederholen Sie die vorherigen Schritte, um weitere Subnetze zu erstellen. Sie können dem Netzwerk weitere Subnetze hinzufügen, nachdem Sie das Netzwerk erstellt haben.
  7. Klicken Sie auf Erstellen.

gcloud

  1. Rufen Sie Cloud Shell auf.

    Zu Cloud Shell

  2. Führen Sie den folgenden Befehl aus, um ein neues Netzwerk im benutzerdefinierten Subnetzwerkmodus zu erstellen:
    gcloud compute networks create NETWORK_NAME --subnet-mode custom

    Ersetzen Sie NETWORK_NAME durch den Namen des neuen Clusters. Der Name muss der Namenskonvention entsprechen. VPC-Netzwerke verwenden die Namenskonvention von Compute Engine.

    Geben Sie --subnet-mode custom an und deaktivieren Sie so den standardmäßigen automatischen Modus. Ansonsten würde durch diesen Modus automatisch in jeder Compute Engine-Region ein Subnetz erstellt werden. Weitere Informationen dazu finden Sie unter Modus für Subnetzerstellung.

  3. Erstellen Sie ein Subnetzwerk und geben Sie die Region und den IP-Adressbereich an:
    gcloud compute networks subnets create SUBNETWORK_NAME \
        --network NETWORK_NAME --region REGION --range RANGE

    Dabei gilt:

    • SUBNETWORK_NAME: der Name des neuen Subnetzwerks.
    • NETWORK_NAME: der Name des Netzwerks, das Sie im vorherigen Schritt erstellt haben.
    • REGION: die Region, in der sich das Subnetzwerk befinden soll
    • RANGE: der im CIDR-Format angegebene IP-Adressbereich, z. B. 10.1.0.0/24

      Wenn Sie mehrere Subnetzwerke hinzufügen möchten, weisen Sie den Subnetzwerken im Netzwerk nicht überlappende CIDR-IP-Adressbereiche zu. Beachten Sie, dass jedes Subnetzwerk und seine internen IP-Adressbereiche einer einzelnen Region zugeordnet sind.

  4. Wiederholen Sie den vorherigen Schritt, falls Sie weitere Subnetze erstellen möchten.

NAT-Gateway einrichten

Wenn Sie eine oder mehrere VMs ohne öffentliche IP-Adressen erstellen müssen, müssen Sie die Network Address Translation (NAT) verwenden, damit die VMs auf das Internet zugreifen können. Verwenden Sie Cloud NAT, einen verteilten, softwarebasierten verwalteten Dienst von Google Cloud , der es VMs ermöglicht, ausgehende Pakete an das Internet zu senden und entsprechende eingehende Antwortpakete zu empfangen. Alternativ können Sie eine separate VM als NAT-Gateway einrichten.

Informationen zum Erstellen einer Cloud NAT-Instanz für Ihr Projekt finden Sie unter Cloud NAT verwenden.

Nachdem Sie Cloud NAT für Ihr Projekt konfiguriert haben, können Ihre VM-Instanzen ohne öffentliche IP-Adressen sicher auf das Internet zugreifen.

Firewallregeln hinzufügen

Standardmäßig verhindert eine implizite Firewallregel eingehende Verbindungen von außerhalb Ihres VPC-Netzwerks. Wenn Sie eingehende Verbindungen zulassen möchten, richten Sie für Ihre VM eine entsprechende Firewallregel ein. Wenn eine eingehende Verbindung zu einer VM hergestellt wurde, ist Traffic über diese Verbindung in beide Richtungen zulässig.

Sie können auch eine Firewallregel erstellen, um externen Zugriff auf bestimmte Ports zuzulassen oder Zugriff zwischen VMs im selben Netzwerk einzuschränken. Wenn der VPC-Netzwerktyp default verwendet wird, gelten auch einige zusätzliche Standardregeln. So etwa die Regel default-allow-internal, die den Zugriff zwischen VMs im selben Netzwerk an allen Ports erlaubt.

Abhängig von der für Ihre Umgebung geltenden IT-Richtlinie müssen Sie möglicherweise die Konnektivität zu Ihrem Datenbankhost isolieren oder anderweitig einschränken. Dazu erstellen Sie Firewallregeln.

Je nach Szenario können Sie Firewallregeln erstellen, die den Zugriff für Folgendes erlauben:

  • SAP-Standardports, die unter TCP/IP-Ports aller SAP-Produkte aufgeführt sind.
  • Verbindungen von Ihrem Computer oder dem Unternehmensnetzwerk aus zu Ihrer Compute Engine-VM-Instanz. Wenn Sie sich nicht sicher sind, welche IP-Adresse Sie verwenden sollen, wenden Sie sich an den Netzwerkadministrator Ihres Unternehmens.

So erstellen Sie eine Firewallregel:

Console

  1. Rufen Sie in der Google Cloud Console die Seite Compute Engine-Firewall auf.

    Zur Firewall

  2. Klicken Sie oben auf der Seite auf Firewallregel erstellen.

    • Wählen Sie im Feld Netzwerk das Netzwerk aus, in dem sich die VM befindet.
    • Geben Sie im Feld Ziele die Ressourcen in Google Cloudan, für die diese Regel gelten soll. Geben Sie beispielsweise Alle Instanzen im Netzwerk an. Sie können unter Angegebene Ziel-Tags auch Tags eingeben, um die Regel auf bestimmte Instanzen in Google Cloudzu beschränken.
    • Wählen Sie im Feld Quellfilter eine der folgenden Optionen aus:
      • IP-Bereiche, um eingehenden Traffic von bestimmten IP-Adressen zuzulassen. Geben Sie den IP-Adressbereich im Feld Quell-IP-Bereiche an.
      • Subnetze, um eingehenden Traffic von einem bestimmten Subnetz zuzulassen. Geben Sie den Namen des Subnetzwerks im folgenden Feld Subnetze an. Mit dieser Option können Sie den Zugriff zwischen den VMs in einer dreistufigen oder einer horizontal skalierbaren Konfiguration zulassen.
    • Wählen Sie im Bereich Protokolle und Ports die Option Angegebene Protokolle und Ports aus und geben Sie tcp:PORT_NUMBER ein.
  3. Klicken Sie auf Erstellen, um die Firewallregel anzulegen.

gcloud

Erstellen Sie mit dem folgenden Befehl eine Firewallregel:

$ gcloud compute firewall-rules create firewall-name
--direction=INGRESS --priority=1000 \
--network=network-name --action=ALLOW --rules=protocol:port \
--source-ranges ip-range --target-tags=network-tags

VMs bereitstellen und MaxDB installieren

Bevor Sie mit der Konfiguration des Hochverfügbarkeitsclusters beginnen, müssen Sie die VM-Instanzen und die SAP MaxDB-Systeme definieren und bereitstellen, die als primäre und sekundäre Knoten in Ihrem Hochverfügbarkeitscluster dienen.

VM für die MaxDB-Bereitstellung erstellen

Im Rahmen der HA-Bereitstellung müssen zwei Google Cloud Compute Engine-VMs erstellt werden. Weitere Informationen finden Sie im Leitfaden Compute Engine-Instanz erstellen und starten.

Hinweis: Regionale nichtflüchtige Speicher werden nur für die Maschinentypen E2, N1, N2 und N2D unterstützt. Weitere Informationen finden Sie im Leitfaden zu regionalen nichtflüchtigen Speichern.

Weitere Informationen zur Auswahl des richtigen Maschinentyps finden Sie im SAP-Hinweis 2456432 – SAP-Anwendungen in Google Cloud: Unterstützte Produkte und Google Cloud Maschinentypen.

Erstellen Sie die beiden VMs in separaten Zonen, um eine zonale Ausfallsicherheit zu erreichen. Dabei gelten die folgenden Mindestanforderungen:

  1. VM-Details:

    • Instance Name
    • Zone – Ihre bevorzugte Zone
    • Machine Type – basierend auf der Größe
    • Subnet: Name des Subnetzes, das für diese Region erstellt wurde
  2. Dienstkonto mit mindestens Zugriff auf die folgenden APIs:

    • https://www.googleapis.com/auth/compute
    • https://www.googleapis.com/auth/servicecontrol
    • https://www.googleapis.com/auth/service.management.readonly
    • https://www.googleapis.com/auth/logging.write
    • https://www.googleapis.com/auth/monitoring.write
    • https://www.googleapis.com/auth/trace.append
    • https://www.googleapis.com/auth/devstorage.read_write
  3. Zusätzliches Laufwerk auf jeder VM mit mindestens 20 GB für /usr/sap

Ein einzelnes regionales Laufwerk für SAP MaxDB erstellen

Für diese Bereitstellung wird ein regionales Laufwerk verwendet, um die MaxDB-Dateien im Verzeichnis /sapdb zu speichern.

Erstellen Sie das Laufwerk. Achten Sie darauf, dass die Replikationszonen für das regionale Laufwerk mit den Zonen übereinstimmen, in denen Sie die beiden VMs erstellt haben.

Hängen Sie den regionalen Datenträger an eine der VMs an, auf der Sie die MaxDB-Installation und die Konfigurationsaufgaben ausführen.

RHEL-Betriebssystem für die SAP-Installation vorbereiten

Für das SAP-Produkt müssen bestimmte Betriebssystemeinstellungen und -pakete installiert sein. Folgen Sie der Anleitung im SAP-Hinweis 2772999 – Red Hat Enterprise Linux 8.x: Installation und Konfiguration .

Diese Aufgabe muss auf beiden Knoten ausgeführt werden.

Dateisysteme erstellen

  1. Stellen Sie über SSH eine Verbindung zu beiden Instanzen her und erstellen Sie die Bereitstellungspunkte /usr/sap/SID und /sapdb.

    # sudo mkdir -p /usr/sap/SID
    # sudo mkdir -p /sapdb
  2. Erstellen Sie die Dateisysteme auf den beiden zusätzlichen Laufwerken, die mit den VMs verbunden sind, mit mkfs.

    Derzeit wird das regionale Laufwerk nur an eine der VMs angehängt. Das /sapdb-Dateisystem wird daher nur einmal erstellt.

  3. Bearbeiten Sie die Datei /etc/fstab, damit /usr/sap/SID beim Neustart immer auf beiden Knoten bereitgestellt wird.

  4. Stellen Sie das Dateisystem /sapdb manuell auf dem Knoten bereit, auf dem Sie die MaxDB-Installation ausführen.

    Weitere Informationen zum Erstellen und Bereitstellen von Dateisystemen finden Sie im Leitfaden Nicht-Bootlaufwerk auf einer Linux-VM formatieren und bereitstellen.

LVM-Konfiguration ändern

Sie müssen die LVM-Konfiguration (Logical Volume Management) so ändern, dass die freigegebene Volume-Gruppe (VG) immer nur an einen Knoten angehängt und von diesem zugänglich ist.

Führen Sie dazu die folgenden Schritte auf beiden Knoten aus:

  1. Bearbeiten Sie als Root die Datei /etc/lvm/lvm.conf und ändern Sie den Wert system_id_source von none in uname.

  2. Prüfen Sie die Ergebnisse:

    # grep -i system_id_source /etc/lvm/lvm.conf

    Die Ausgabe sollte in etwa so aussehen:

    # Configuration option global/system_id_source.
            system_id_source = "uname"
    
  3. Um zu verhindern, dass die VMs clusterverwaltete VGs aktivieren, wenn ein Knoten neu gestartet wird, müssen Sie außerdem den folgenden Parameter in der Konfigurationsdatei /etc/lvm/lvm.conf mit kommagetrennten vollständigen VG-Namen pflegen, die nicht vom Cluster verwaltet werden.

    Beispiel: usrsap ist der Name einer VG, die nicht vom Cluster verwaltet wird:

    auto_activation_volume_list = [ usrsap ]

    Wenn es beispielsweise keine VGs gibt, die nicht vom Cluster verwaltet werden, muss dieser Parameter mit leeren Werten hinzugefügt werden:

    auto_activation_volume_list = [  ]

Datenbank und SAP-Host-Agent installieren

Nachdem das Betriebssystem konfiguriert wurde, können Sie nun die SAP MaxDB-Datenbank und den SAP-Host-Agent installieren. MaxDB wird normalerweise zusammen mit dem SAP-Produkt, in dem es enthalten ist, installiert.

Die Installation wird nur einmal durchgeführt, nämlich auf der Instanz, an die Sie den regionalen nichtflüchtigen Speicher angehängt haben.

So installieren Sie SAP MaxDB auf Ihrer VM:

  1. Stellen Sie eine SSH-Verbindung zu Ihrer Linux-basierten VM her.
  2. Laden Sie den SAP Software Provisioning Manager (SWPM), das Installationsmedium des SAP-Produkts und das MaxDB-Installationsmedium entsprechend den SAP-Installationsanleitungen herunter.
  3. Installieren Sie das SAP-Produkt und die SAP MaxDB-Datenbank entsprechend der Installationsanleitungen für Ihr SAP-Produkt. Weitere Informationen finden Sie in der Dokumentation zu SAP MaxDB.

Weitere Informationen von SAP zur Installation finden Sie im SAP-Hinweis 1020175 – FAQ: SAP MaxDB-Installation, Upgrade oder Anwendung eines Patches.

Führen Sie nach Abschluss der Installation die folgenden Prüfungen aus:

  1. Prüfen Sie als sidadm-Nutzer den Status von MaxDB.

    # dbmcli -d  SID -u control,password db_state

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    >dbmcli -d  MDB -u control, my_p4$$w0rd db_state
    OK
    State
    ONLINE
    
  2. Prüfen Sie auch den Status von x_server:

    # x_server

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    >x_server
    2024-10-23 19:01:43 11968 19744 INF  12916          Found running XServer on port 7200
    2024-10-23 19:01:43 11968 19744 INF  13011            version 'U64/LIX86 7.9.10   Build 004-123-265-969'
    2024-10-23 19:01:43 11968 19744 INF  13010            installation MDB  - path: /sapdb/MDB/db
    2024-10-23 19:01:45 11971 13344 INF  12916          Found running sdbgloballistener on port 7210
    2024-10-23 19:01:45 11971 13344 INF  13011            version 'U64/LIX86 7.9.10   Build 004-123-265-969'
    
  3. Prüfen, ob der SAP-Host-Agent ausgeführt wird:

    # ps -ef | grep -i hostctrl

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    >ps -ef | grep -i hostctrl
    root      1543     1  0 Oct18 ?        00:00:15 /usr/sap/hostctrl/exe/saphostexec pf=/usr/sap/hostctrl/exe/host_profile
    sapadm    1550     1  0 Oct18 ?        00:03:00 /usr/sap/hostctrl/exe/sapstartsrv pf=/usr/sap/hostctrl/exe/host_profile -D
    root      1618     1  0 Oct18 ?        00:03:48 /usr/sap/hostctrl/exe/saposcol -l -w60 pf=/usr/sap/hostctrl/exe/host_profile
    mdbadm   12751 11261  0 19:03 pts/0    00:00:00 grep --color=auto -i hostctrl
    
  4. Beenden Sie nach der Überprüfung die MaxDB-Instanz und den x_server.

    # dbmcli -d SID -u control, and password db_offline
    # x_server stop
    

Aufgaben nach der Installation ausführen

Bevor Sie Ihre SAP MaxDB-Instanz verwenden, sollten Sie nach der Bereitstellung diese Schritte ausführen:

  1. Aktualisieren Sie die SAP MaxDB-Software mit den neuesten Patches, falls verfügbar.
  2. Installieren Sie alle zusätzlichen Komponenten.
  3. Konfigurieren Sie die neue SAP MaxDB-Datenbank und sichern Sie sie.

Weitere Informationen finden Sie unter Datenbankverwaltung für SAP MaxDB.

Nachdem die SAP MaxDB-Systeme erfolgreich bereitgestellt wurden, definieren und konfigurieren Sie den Hochverfügbarkeitscluster.

Failover-Unterstützung für Cloud Load Balancing konfigurieren

Der interne Passthrough-Network-Load-Balancer-Dienst mit Failover-Unterstützung leitet den Traffic basierend auf einem Systemdiagnosedienst an den aktiven Host in einem SAP MaxDB-Cluster weiter.

IP-Adresse für die virtuelle IP-Adresse reservieren

Die virtuelle IP-Adresse (VIP), die manchmal auch als Floating-IP-Adresse bezeichnet wird, folgt dem aktiven SAP MaxDB-System. Der Load Balancer leitet den an die VIP gesendeten Traffic an die VM weiter, die das aktive SAP MaxDB-System hostet.

  1. Öffnen Sie Cloud Shell:

    Zu Cloud Shell

  2. IP-Adresse für die virtuelle IP-Adresse reservieren. Dies ist die IP-Adresse, mit der Anwendungen auf SAP MaxDB zugreifen. Wenn Sie das Flag --addresses weglassen, wird im angegebenen Subnetz automatisch eine IP-Adresse ausgewählt:

    $ gcloud compute addresses create VIP_NAME \
      --region CLUSTER_REGION --subnet CLUSTER_SUBNET \
      --addresses VIP_ADDRESS

    Weitere Informationen zum Reservieren einer statischen IP-Adresse finden Sie unter Statische interne IP-Adresse reservieren.

  3. Bestätigen Sie die Reservierung der IP-Adresse:

    $ gcloud compute addresses describe VIP_NAME \
      --region CLUSTER_REGION

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    address: 10.0.0.19
    addressType: INTERNAL
    creationTimestamp: '2024-10-23T14:19:03.109-07:00'
    description: ''
    id: '8961491304398200872'
    kind: compute#address
    name: vip-for-maxdb-ha
    networkTier: PREMIUM
    purpose: GCE_ENDPOINT
    region: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/addresses/vip-for-maxdb-ha
    status: RESERVED
    subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-subnet-us-central1

Instanzgruppen für Host-VMs erstellen

  1. Erstellen Sie in Cloud Shell zwei nicht verwaltete Instanzgruppen und weisen Sie die primäre Host-VM der einen und die sekundäre Host-VM der anderen zu:

    $ gcloud compute instance-groups unmanaged create PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances PRIMARY_IG_NAME \
      --zone=PRIMARY_ZONE \
      --instances=PRIMARY_HOST_NAME
    $ gcloud compute instance-groups unmanaged create SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE
    $ gcloud compute instance-groups unmanaged add-instances SECONDARY_IG_NAME \
      --zone=SECONDARY_ZONE \
      --instances=SECONDARY_HOST_NAME
    
  2. Bestätigen Sie die Erstellung der Instanzgruppen:

    $ gcloud compute instance-groups unmanaged list

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    NAME          ZONE           NETWORK          NETWORK_PROJECT        MANAGED  INSTANCES
    maxdb-ha-ig-1  us-central1-a  example-network  example-project-123456 No       1
    maxdb-ha-ig-2  us-central1-c  example-network  example-project-123456 No       1

Compute Engine-Systemdiagnose erstellen

  1. Erstellen Sie die Systemdiagnose in Cloud Shell: Wählen Sie für die Systemdiagnose einen Port aus dem privaten Bereich 49152-65535 aus, um Konflikte mit anderen Diensten zu vermeiden. Die Werte für Prüfintervall und Zeitlimit sind etwas länger als die Standardwerte, um die Failover-Toleranz während Compute Engine-Live-Migrationsereignissen zu erhöhen. Sie können die Werte bei Bedarf anpassen:

    $ gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port=HEALTHCHECK_PORT_NUM \
      --proxy-header=NONE --check-interval=10 --timeout=10 --unhealthy-threshold=2 \
      --healthy-threshold=2
  2. Bestätigen Sie die Erstellung der Systemdiagnose:

    $ gcloud compute health-checks describe HEALTH_CHECK_NAME

    Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:

    checkIntervalSec: 10
    creationTimestamp: '2023-10-23T21:03:06.924-07:00'
    healthyThreshold: 2
    id: '4963070308818371477'
    kind: compute#healthCheck
    name: maxdb-health-check
    selfLink: https://www.googleapis.com/compute/v1/projects/example-project-123456/global/healthChecks/maxdb-health-check
    tcpHealthCheck:
     port: 60000
     portSpecification: USE_FIXED_PORT
     proxyHeader: NONE
    timeoutSec: 10
    type: TCP
    unhealthyThreshold: 2

Firewallregel für die Systemdiagnosen erstellen

Definieren Sie eine Firewallregel für einen Port im privaten Bereich, die den Zugriff auf Ihre Host-VMs aus den IP-Bereichen ermöglicht, die von Compute Engine-Systemdiagnosen verwendet werden: 35.191.0.0/16 und 130.211.0.0/22. Weitere Informationen finden Sie unter Firewallregeln für Systemdiagnosen erstellen.

  1. Fügen Sie Ihren Host-VMs ein Netzwerk-Tag hinzu, falls noch keines vorhanden ist. Dieses Netzwerk-Tag wird von der Firewallregel für Systemdiagnosen verwendet.

    $ gcloud compute instances add-tags PRIMARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone PRIMARY_ZONE
    $ gcloud compute instances add-tags SECONDARY_HOST_NAME \
      --tags NETWORK_TAGS \
      --zone SECONDARY_ZONE
    
  2. Wenn Sie noch keine haben, erstellen Sie eine Firewallregel, um die Systemdiagnosen zuzulassen:

    $ gcloud compute firewall-rules create RULE_NAME \
      --network NETWORK_NAME \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags NETWORK_TAGS \
      --rules tcp:HLTH_CHK_PORT_NUM

    Beispiel:

    gcloud compute firewall-rules create  fw-allow-health-checks \
    --network example-network \
    --action ALLOW \
    --direction INGRESS \
    --source-ranges 35.191.0.0/16,130.211.0.0/22 \
    --target-tags cluster-ntwk-tag \
    --rules tcp:60000

Load-Balancer und Failover-Gruppe konfigurieren

  1. Erstellen Sie den Back-End-Dienst des Load-Balancers:

    $ gcloud compute backend-services create BACKEND_SERVICE_NAME \
      --load-balancing-scheme internal \
      --health-checks HEALTH_CHECK_NAME \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 1.0 \
      --region CLUSTER_REGION \
      --global-health-checks
  2. Fügen Sie die primäre Instanzgruppe dem Back-End-Dienst hinzu:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group PRIMARY_IG_NAME \
      --instance-group-zone PRIMARY_ZONE \
      --region CLUSTER_REGION
  3. Fügen Sie die sekundäre Failover-Instanzgruppe dem Back-End-Dienst hinzu:

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group SECONDARY_IG_NAME \
      --instance-group-zone SECONDARY_ZONE \
      --failover \
      --region CLUSTER_REGION
  4. Erstellen Sie eine Weiterleitungsregel. Geben Sie darin die IP-Adresse an, die Sie für die VIP reserviert haben: Wenn Sie von außerhalb der unten angegebenen Region auf das SAP MaxDB-System zugreifen müssen, fügen Sie das Flag --allow-global-access in die Definition ein:

    $ gcloud compute forwarding-rules create RULE_NAME \
      --load-balancing-scheme internal \
      --address VIP_ADDRESS \
      --subnet CLUSTER_SUBNET \
      --region CLUSTER_REGION \
      --backend-service BACKEND_SERVICE_NAME \
      --ports ALL

    Weitere Informationen zum regionenübergreifenden Zugriff auf Ihr SAP MaxDB-Hochverfügbarkeitssystem finden Sie unter Internes TCP/UDP-Load Balancing.

Konfiguration des Load-Balancers testen

Auch wenn Ihre Back-End-Instanzgruppen erst später als fehlerfrei registriert werden, können Sie die Konfiguration des Load-Balancers testen. Richten Sie dazu einen Listener ein, der auf die Systemdiagnosen reagiert. Wenn der Load-Balancer nach der Einrichtung eines Listeners korrekt konfiguriert ist, ändert sich der Status der Back-End-Instanzgruppen in "fehlerfrei".

In den folgenden Abschnitten werden verschiedene Methoden vorgestellt, mit denen Sie die Konfiguration testen können.

Load-Balancer mit dem socat-Dienstprogramm testen

Mit dem Dienstprogramm socat können Sie den Port der Systemdiagnose vorübergehend überwachen.

  1. Installieren Sie auf beiden Host-VMs das Dienstprogramm socat:

    $ sudo yum install -y socat

  2. Starten Sie einen socat-Prozess, um 60 Sekunden lang den Port der Systemdiagnose zu überwachen:

    $ sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,fork

  3. Warten Sie in Cloud Shell einige Sekunden, bis die Systemdiagnose den Listener erkennt, und prüfen Sie dann den Status Ihrer Back-End-Instanzgruppen:

    $ gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region CLUSTER_REGION

    Die Ausgabe sollte in etwa so aussehen:

    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/maxdb-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/maxdb-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/maxdb-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/maxdb-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth

Load-Balancer über Port 22 testen

Wenn Port 22 für SSH-Verbindungen auf Ihren Host-VMs geöffnet ist, können Sie die Systemdiagnose so bearbeiten, dass vorübergehend Port 22 verwendet wird, da hier ein Listener konfiguriert ist, der auf die Systemdiagnose reagieren kann.

So verwenden Sie vorübergehend Port 22:

  1. Klicken Sie in der Konsole auf Ihre Systemdiagnose:

    Zur Seite "Systemdiagnosen"

  2. Klicken Sie auf Bearbeiten.

  3. Ändern Sie im Feld Port die Portnummer in 22.

  4. Klicken Sie auf Speichern und warten Sie ein bis zwei Minuten.

  5. Prüfen Sie in Cloud Shell den Status Ihrer Back-End-Instanzgruppen:

    $ gcloud compute backend-services get-health BACKEND_SERVICE_NAME \
      --region CLUSTER_REGION

    Die Ausgabe sollte in etwa so aussehen:

    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/maxdb-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/maxdb-ha-vm-1
       ipAddress: 10.0.0.35
       port: 80
     kind: compute#backendServiceGroupHealth
    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instanceGroups/maxdb-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/maxdb-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth
  6. Wenn Sie fertig sind, ändern Sie die Portnummer der Systemdiagnose wieder in die ursprüngliche Portnummer.

Pacemaker einrichten

Mit dem nachstehend beschriebenen Verfahren wird die Red Hat-Implementierung eines Pacemaker-Clusters auf Compute Engine-VMs für SAP MaxDB konfiguriert.

Das Verfahren beruht auf der Red Hat-Dokumentation zum Konfigurieren von Hochverfügbarkeitsclustern, einschließlich:

Cluster-Agents auf beiden Knoten installieren

Führen Sie die folgenden Schritte auf beiden Knoten aus.

  1. Installieren Sie als Root die Pacemaker-Komponenten:

    # yum -y install pcs pacemaker fence-agents-gce resource-agents-gcp resource-agents-sap-hana
    # yum update -y

    Wenn Sie ein von Google bereitgestelltes RHEL-for-SAP-Image verwenden, sind diese Pakete bereits installiert, möglicherweise sind jedoch einige Updates erforderlich.

  2. Legen Sie das Passwort für den Nutzer hacluster fest, der gemeinsam mit den Paketen installiert wird:

    # passwd hacluster
  3. Geben Sie in den Eingabeaufforderungen ein Passwort für hacluster an.

  4. In den von Google Cloudbereitgestellten RHEL-Images ist der Firewalldienst des Betriebssystems standardmäßig aktiv. Konfigurieren Sie den Firewalldienst so, dass Traffic mit hoher Verfügbarkeit zugelassen wird:

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  5. Starten Sie den pcs-Dienst und konfigurieren Sie ihn so, dass er beim Booten startet:

    # systemctl start pcsd.service
    # systemctl enable pcsd.service
  6. Prüfen Sie den Status des pcs-Dienstes:

    # systemctl status pcsd.service

    Die Ausgabe sollte in etwa so aussehen:

    ● pcsd.service - PCS GUI and remote configuration interface
      Loaded: loaded (/usr/lib/systemd/system/pcsd.service; enabled; vendor preset: disabled)
      Active: active (running) since Sat 2023-10-23 21:17:05 UTC; 25s ago
        Docs: man:pcsd(8)
              man:pcs(8)
    Main PID: 31627 (pcsd)
      CGroup: /system.slice/pcsd.service
              └─31627 /usr/bin/ruby /usr/lib/pcsd/pcsd
    Oct 23 21:17:03 maxdb-ha-vm-1 systemd[1]: Starting PCS GUI and remote configuration interface...
    Oct 23 21:17:05 maxdb-ha-vm-1 systemd[1]: Started PCS GUI and remote configuration interface.
  7. Prüfen Sie, ob alle erforderlichen HA-Dienste auf beiden Knoten aktiviert und ausgeführt werden.

    # systemctl enable pcsd.service pacemaker.service corosync.service
  8. Fügen Sie in der Datei /etc/hosts den vollständigen Hostnamen und die internen IP-Adressen beider Hosts im Cluster hinzu. Beispiel:

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    10.0.0.40 maxdb-ha-vm-1.us-central1-a.c.example-project-123456.internal maxdb-ha-vm-1  # Added by Google
    10.0.0.41 maxdb-ha-vm-2.us-central1-c.c.example-project-123456.internal maxdb-ha-vm-2
    169.254.169.254 metadata.google.internal  # Added by Google

    Weitere Informationen von Red Hat zum Einrichten der Datei /etc/hosts auf RHEL-Clusterknoten finden Sie unter https://access.redhat.com/solutions/81123.

Cluster erstellen

  1. Autorisieren Sie als Root den Nutzer hacluster auf einem der Knoten. Klicken Sie auf den Tab für Ihre RHEL-Version, um den Befehl anzuzeigen:

    RHEL 8 und höher:

    # pcs host auth primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster auth primary-host-name secondary-host-name
  2. Geben Sie bei Aufforderung den Nutzernamen hacluster und das Passwort ein, das Sie für den Nutzer hacluster festgelegt haben.

  3. Erstellen Sie den Cluster:

    RHEL 8 und höher:

    # pcs cluster setup cluster-name primary-host-name secondary-host-name

    RHEL 7

    # pcs cluster setup --name cluster-name primary-host-name secondary-host-name

Standardeinstellungen für "corosync.conf" bearbeiten

Bearbeiten Sie die Datei /etc/corosync/corosync.conf auf dem primären Host, um einen geeigneteren Ausgangspunkt für das Testen der Fehlertoleranz Ihres Hochverfügbarkeitsclusters in Google Cloudfestzulegen.

  1. Öffnen Sie auf beiden Hosts Ihren bevorzugten Texteditor, um die Datei /etc/corosync/corosync.conf zur Bearbeitung zu öffnen:

    # /etc/corosync/corosync.conf
  2. Wenn /etc/corosync/corosync.conf eine neue Datei ist oder leer ist, können Sie im Verzeichnis /etc/corosync/ nach einer Beispieldatei suchen, die als Basis für die Corrosync-Datei verwendet werden soll.

  3. Fügen Sie im Abschnitt totem der Datei corosync.conf folgende Attribute mit den vorgeschlagenen Werten für Ihre RHEL-Version hinzu:

    RHEL 8 und höher:

    • transport: knet
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    Beispiel:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: knet
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...

    RHEL 7

    • transport: udpu
    • token: 20000
    • token_retransmits_before_loss_const: 10
    • join: 60
    • max_messages: 20

    Beispiel:

    totem {
    version: 2
    cluster_name: hacluster
    secauth: off
    transport: udpu
    token: 20000
    token_retransmits_before_loss_const: 10
    join: 60
    max_messages: 20
    }
    ...
  4. Synchronisieren Sie auf dem Host, der die bearbeitete Datei corosync.conf enthält, die corosync-Konfiguration für den gesamten Cluster:

    RHEL 8 und höher:

    # pcs cluster sync corosync

    RHEL 7

    # pcs cluster sync
  5. Legen Sie fest, dass der Cluster automatisch gestartet wird:

    # pcs cluster enable --all
    # pcs cluster start --all
  6. Prüfen Sie mit dem Dienstprogramm "corosync-cmapctl", ob die neuen Corosync-Einstellungen im Cluster aktiv sind:

    # corosync-cmapctl

Fencing einrichten

RHEL-Images, die von Google Cloud bereitgestellt werden, enthalten den für Google Cloudspezifischen fence_gceFencing-Agent. Sie verwenden fence_gce, um für jede Host-VM Fencing-Geräte zu erstellen.

Um die korrekte Abfolge der Ereignisse nach einer Fencing-Aktion sicherzustellen, konfigurieren Sie das Betriebssystem so, dass der Neustart von Corosync nach dem Fencing einer VM verzögert wird. Sie können auch das Pacemaker-Zeitlimit für Neustarts anpassen, um die Verzögerung zu berücksichtigen.

Wenn Sie alle Optionen sehen möchten, die für den Fencing-Agent fence_gce verfügbar sind, fragen Sie fence_gce -h ab.

Ressourcen für Fencing-Geräte erstellen

  1. Als Root auf dem primären Host:

    1. Erstellen Sie ein Fencing-Gerät für jede Host-VM:

      # pcs stonith create primary-fence-name fence_gce \
        port=primary-host-name \
        zone=primary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
      # pcs stonith create secondary-fence-name fence_gce \
        port=secondary-host-name \
        zone=secondary-host-zone \
        project=project-id \
        pcmk_reboot_timeout=300 pcmk_monitor_retries=4 \
        op monitor interval="300s" timeout="120s" \
        op start interval="0" timeout="60s"
    2. Beschränken Sie jedes Fencing-Gerät jeweils auf die andere Host-VM:

      # pcs constraint location primary-fence-name avoids primary-host-name
      # pcs constraint location secondary-fence-name avoids secondary-host-name
  2. Testen Sie auf dem primären Host als Root das sekundäre Fencing-Gerät:

    1. Fahren Sie die sekundäre Host-VM herunter:

      # fence_gce -o off -n secondary-host-name --zone=secondary-host-zone

      Wenn der Befehl erfolgreich ausgeführt wurde, wird die Verbindung zur sekundären Host-VM getrennt und in der Google Cloud Console auf der Seite VM-Instanzen als gestoppt angezeigt. Möglicherweise müssen Sie die Seite aktualisieren.

    2. Starten Sie die sekundäre Host-VM neu:

      # fence_gce -o on -n secondary-host-name --zone=secondary-host-zone
  3. Testen Sie als Root auf dem sekundären Host das primäre Fencing-Gerät Wiederholen Sie dazu die vorherigen Schritte und verwenden Sie dabei in den Befehlen die Werte für den primären Host.

  4. Prüfen Sie als Root auf jedem Host den Status des Clusters:

    # pcs status

    Die Fencing-Ressourcen werden im Ressourcenbereich des Clusterstatus angezeigt, ähnlich wie im folgenden Beispiel:

    [root@maxdb-ha-vm-2 ~]# pcs status
    Cluster name: maxdb-ha-cluster
    Stack: corosync
    Current DC: maxdb-ha-vm-1 (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Mon Jun 15 17:19:07 2020
    Last change: Mon Jun 15 17:18:33 2020 by root via cibadmin on maxdb-ha-vm-1
    
    2 nodes configured
    2 resources configured
    
    Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
    Full list of resources:
    
     STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
     STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

Verzögerung für den Neustart von Corosync festlegen

  1. Erstellen Sie auf beiden Hosts als Root eine systemd-Drop-in-Datei, die den Start von Corosync verzögert, um die richtige Reihenfolge der Ereignisse nach dem Neustart einer umzäunten VM zu gewährleisten:

    systemctl edit corosync.service
  2. Fügen Sie der Datei die folgenden Zeilen hinzu:

    [Service]
    ExecStartPre=/bin/sleep 60
  3. Speichern Sie die Datei und beenden Sie den Editor.

  4. Laden Sie die Konfiguration des systemd-Managers neu.

    systemctl daemon-reload
  5. Prüfen Sie, ob die Drop-in-Datei erstellt wurde:

    service corosync status

    Sie sollten eine Zeile für die Drop-in-Datei sehen, wie im folgenden Beispiel gezeigt:

    ● corosync.service - Corosync Cluster Engine
       Loaded: loaded (/usr/lib/systemd/system/corosync.service; disabled; vendor preset: disabled)
      Drop-In: /etc/systemd/system/corosync.service.d
               └─override.conf
       Active: active (running) since Tue 2021-07-20 23:45:52 UTC; 2 days ago

Listener installieren und Systemdiagnose-Ressource erstellen

Zum Konfigurieren einer Systemdiagnose-Ressource müssen Sie zuerst die Listener installieren.

Listener installieren

Der Load Balancer verwendet einen Listener am Systemdiagnose-Port jedes Hosts, um zu ermitteln, wo die MaxDB-Instanz ausgeführt wird.

  1. Installieren Sie als Root auf beiden Hosts einen TCP-Listener. In dieser Anleitung wird HAProxy als Listener installiert und verwendet.

    # yum install haproxy
  2. Öffnen Sie die Konfigurationsdatei haproxy.cfg zur Bearbeitung:

    # vi /etc/haproxy/haproxy.cfg
    1. Ändern Sie im Abschnitt Defaults der Datei haproxy.cfg den Parameter mode in tcplog.

    2. Erstellen Sie nach dem Abschnitt Defaults einen neuen Abschnitt, indem Sie Folgendes hinzufügen:

      #---------------------------------------------------------------------
      # Health check listener port for SAP MaxDB HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
        bind *:healthcheck-port-num

      Der Bind-Port ist derselbe, den Sie beim Erstellen der Systemdiagnose verwendet haben.

      Wenn Sie fertig sind, sollten die Aktualisierungen in etwa so aussehen:

      #---------------------------------------------------------------------
      # common defaults that all the 'listen' and 'backend' sections will
      # use if not designated in their block
      #---------------------------------------------------------------------
      defaults
        mode                    tcp
        log                     global
        option                  tcplog
        option                  dontlognull
        option http-server-close
        # option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
      
      #---------------------------------------------------------------------
      # Set up health check listener for SAP MaxDB HA cluster
      #---------------------------------------------------------------------
      listen healthcheck
       bind *:60000
  3. Starten Sie als Root den Dienst auf jedem Host, um zu prüfen, ob er richtig konfiguriert ist:

    # systemctl start haproxy.service
  4. Klicken Sie in der Google Cloud Console auf der Seite „Load Balancer“ auf den Load Balancer-Eintrag:

    Seite "Load-Balancing"

    Wenn auf der Seite Details zum Load-Balancer im Bereich Back-End der HAProxy-Dienst an beiden Hosts aktiv ist, wird in der Spalte Fehlerfrei jedes Instanzgruppeneintrags 1/1 angezeigt.

  5. Beenden Sie auf beiden Hosts den HAProxy-Dienst:

    # systemctl stop haproxy.service

    Nachdem Sie den HAProxy-Dienst auf beiden Hosts beendet haben, wird in der Spalte Fehlerfrei jeder Instanzgruppe 0/1 angezeigt.

    Später, wenn die Systemdiagnose konfiguriert ist, startet der Cluster den Listener auf dem aktiven Knoten neu.

Systemdiagnose-Ressource erstellen

  1. Erstellen Sie als Root auf jedem Host eine Systemdiagnose-Ressource für den HAProxy-Dienst:

    # pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s —-group SAPMaxDB_Group
  2. Prüfen Sie, ob der Systemdiagnosedienst auf demselben Host wie Ihre SAP MaxDB-Instanz aktiv ist:

    # pcs status

    Wenn sich die Systemdiagnoseressource nicht auf demselben Host wie MaxDB befindet, verschieben Sie sie mit dem folgenden Befehl:

    # pcs resource move healthcheck_resource_name target_host_name
    # pcs resource clear healthcheck_resource_name

    Der Befehl pcs resource clear belässt die Ressource an ihrem neuen Speicherort, entfernt aber die unerwünschte Standortbeschränkung, die mit dem Befehl pcs resource move erstellt wurde.

    Der Status im Bereich "Ressourcen" sollte in etwa so aussehen:

    Full list of resources:
    
    STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
    STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Resource Group: SAPMaxDB_Group
      rsc_healthcheck_MDB    (service:haproxy):      Started maxdb-ha-vm-1

Standardeinstellungen für den Cluster festlegen

Richten Sie Migrationsschwellenwerte und Wiederkehrrate ein, um festzulegen, wie viele Failover-Versuche ausgeführt werden sollen, bevor der Vorgang fehlschlägt, und um das System so zu konfigurieren, dass es zuerst auf dem aktuellen Host neu gestartet wird. Für die Anwendung auf den Cluster muss dies nur auf einem Knoten festgelegt werden.

  1. Legen Sie als Root auf einem der Hosts die Standardeinstellungen für Ressourcen fest:

    # pcs resource defaults resource-stickiness=1000
    # pcs resource defaults migration-threshold=5000

    Das Attribut resource-stickiness steuert, wie wahrscheinlich ein Dienst dort ausgeführt wird, wo er sich befindet. Bei höheren Werten ist der Dienst fixierter. Mit dem Wert 1000 ist der Dienst stark fixiert.

    Das Attribut migration-threshold gibt die Anzahl der Fehler an, die auftreten müssen, bevor der Dienst per Failover auf einen anderen Host verlagert wird Ein Wert von 5.000 ist hoch genug, um bei nur kurzzeitig auftretenden Fehlern ein Failover zu vermeiden.

    Sie können die Standardeinstellungen für Ressourcen prüfen, indem Sie pcs resource defaults eingeben.

  2. Standardeinstellungen für Zeitlimits bei Ressourcenvorgängen festlegen:

    # pcs resource op defaults timeout=600s

    Sie können die Standardeinstellungen für Ressourcenvorgänge prüfen, indem Sie pcs resource op defaults eingeben.

  3. Legen Sie die folgenden Clusterattribute fest:

    # pcs property set stonith-enabled="true"
    # pcs property set stonith-timeout="300s"
    

    Sie können die Einstellungen der Attribute mit pcs property list prüfen.

MaxDB-Ressourcen im Cluster erstellen

Bevor Sie diese Schritte ausführen, müssen MaxDB und x_server beendet und das /sapdb-Dateisystem getrennt werden.

gcp-pd-move-Ressource erstellen

Die gcp-pd-move-Ressource ist ein Ressourcenagent, mit dem der nichtflüchtige Datenträger bei einem Cluster-Failover von einem Knoten zu einem anderen verschoben wird.

  1. Erstellen Sie die Ressource mit dem folgenden Befehl als Root auf einem beliebigen Knoten:

    # pcs resource create pd_move_resource_name gcp-pd-move \
      disk_name=regional_pd_name mode="READ_WRITE" disk_scope=regional \
      op monitor interval=10s timeout=15s \
      op start interval=0s timeout=300s \
      op stop interval=0s timeout=15s \
      --group SAPMaxDB_Group

LVM-Ressource erstellen

Ein LVM-aktivierter Ressourcenagent wird verwendet, um LVM zu aktivieren, nachdem der Datenträger auf den anderen Knoten verschoben wurde.

  1. Erstellen Sie die LVM-Ressource mit dem folgenden Befehl als Root auf einem beliebigen Knoten:

    # pcs resource create lvm_resource_name LVM-activate \
      vgname=vgname_for_maxdb \
      vg_access_mode=system_id activation_mode=exclusive \
      --group SAPMaxDB_Group

    Beispiel:

    # pcs resource create sapdb_lvm LVM-activate \
      vgname=sapdb vg_access_mode=system_id \
      activation_mode=exclusive \
      --group SAPMaxDB_Group

Dateisystemressource erstellen

Die Dateisystemressource wird im Cluster verwendet, um /sapdb während des Failover-Vorgangs zu trennen und auf einem anderen Knoten bereitzustellen.

  1. Erstellen Sie die Dateisystemressource mit dem folgenden Befehl als Root auf einem beliebigen Knoten:

    # pcs resource create fs_resource_name Filesystem \
      device=filesystem directory=/sapdb fstype=fs_type \
      --group SAPMaxDB_Group

    Beispiel:

    # pcs resource create sapdb_FS Filesystem \
      device=/dev/mapper/sapdb-sapdblv directory=/sapdb fstype=ext4 \
      --group SAPMaxDB_Group

Vorbereitungen für die MaxDB-Ressourcengruppe

Führen Sie die folgenden Schritte aus, um die MaxDB-Ressourcengruppe zu aktivieren.

  1. Synchronisieren Sie Nutzer und Gruppen vom Knoten, auf dem Sie die MaxDB-Installation durchgeführt haben, mit dem anderen Knoten.

    1. Die SAP MaxDB-Nutzer müssen zwischen den Knoten synchronisiert werden. Kopieren Sie dazu die Einträge in /etc/passwd, z. B.:

       sdb:x:1002:1003:MaxDB User:/home/sdb:/bin/false
       madbadm:x:1003:1005:SAP System Administrator:/home/mdbadm:/bin/csh

    2. Ebenso müssen die SAP-Gruppen synchronisiert werden, indem die Einträge in /etc/group von einem Knoten zum anderen kopiert werden, z. B.:

       dba:x:1003:mdbadm
       sapsys:x:1005:

  2. Synchronisieren Sie MaxDB-spezifische Dateien, die in den Betriebssystemverzeichnissen gespeichert werden. Führen Sie als Root-Nutzer die folgenden Befehle aus:

    # rsync -av /etc/services target_host:/etc/services
    # rsync -av /home/* target_host:/home
    # rsync -av --exclude=sapservices /usr/sap/* target_host:/usr/sap
    # rsync -av --ignore-existing /usr/sap/sapservicestarget_host:/usr/sap/sapservices
    # rsync -av /etc/init.d/sapinittarget_host:/etc/init.d/
    # MaxDB specific files
    # rsync -av /etc/opttarget_host:/etc
    # rsync -av /var/lib/sdbtarget_host:/var/lib
  3. Benennen Sie die folgenden Umgebungsdateien für die SAP OS-Nutzer auf dem zweiten Knoten um, damit in ihren Basisverzeichnissen der jeweilige Hostname verwendet wird, z. B.:

    mv .sapenv_maxdb-ha-vm-1.sh .sapenv_maxdb-ha-vm-2.sh
    mv .sapenv_maxdb-ha-vm-1.csh .sapenv_maxdb-ha-vm-2.csh
    mv .sapsrc_maxdb-ha-vm-1.sh  .sapsrc_maxdb-ha-vm-2.sh
    mv .sapsrc_maxdb-ha-vm-1.csh  .sapsrc_maxdb-ha-vm-2.csh
    mv .dbenv_maxdb-ha-vm-1.sh .sapenv_maxdb-ha-vm-2.sh
    mv .dbenv_maxdb-ha-vm-1.csh .dbenv_maxdb-ha-vm-2.csh

Der SAPDatabase-Ressourcenagent verwendet keine datenbankspezifischen Befehle zum Stoppen oder Starten der Datenbank, sondern saphostctrl-Befehle. Für den SAP-Host-Agent müssen xuser-Einträge erstellt werden, damit MAXDB mit saphostctrl überwacht und gesteuert werden kann. Weitere Informationen finden Sie im SAP-Hinweis 2435938 – SAP Host Agent SAP MaxDB: DBCredentials for DB connect.

  1. Führen Sie als Root den folgenden Befehl auf dem aktiven Knoten aus:SetDatabaseProperty

    /usr/sap/hostctrl/exe/saphostctrl -host primary-host-name -user sapadm password \
      -dbname SID -dbtype ada -function SetDatabaseProperty DBCredentials=SET \
      -dboption User=SUPERDBA -dboption Password=password

    Testen Sie die Einträge mit dem folgenden Befehl. Selbst wenn die Datenbank angehalten ist, sollte der Befehl den Status wiederherstellen können:

    /usr/sap/hostctrl/exe/saphostctrl -host secondary-host-name -dbname SID \
      -dbtype ada -function GetDatabaseStatus

Der Befehl „saphostctrl agent“ verwendet das Programm xuser aus der MaxDB-Installation. Um den zweiten Knoten jetzt vorzubereiten, verschieben Sie SAPMaxDB_group also zu „maxdb-node-b“.

  1. Führen Sie auf einem beliebigen Knoten als Root-Nutzer den folgenden Befehl aus:

    pcs resource move SAPMaxDB_group

Die vier erstellten Ressourcen „Systemdiagnose“, gcp-pd-move, LVM und Dateisystem wurden jetzt migriert und auf dem zweiten Knoten erfolgreich gestartet.

  1. Mit dem folgenden Befehl können Sie sich die ausgeführten Aktionen auf einem beliebigen Knoten ansehen:

    watch pcs status

Sobald alle vier Ressourcen auf dem zweiten Knoten gestartet wurden, führen Sie den Befehl saphostctrl aus.

  1. Führen Sie als Root den folgenden Befehl aus, um die Datenbankeigenschaft für den jetzt aktiven Knoten festzulegen:

    /usr/sap/hostctrl/exe/saphostctrl -host secondary-host-name -user sapadm password \
      -dbname SID -dbtype ada -function SetDatabaseProperty DBCredentials=SET \
      -dboption User=SUPERDBA -dboption Password=password
  2. Starten Sie auf Knoten b MaxDB und x_server manuell, um zu prüfen, ob sie richtig gestartet werden können:

    # dbmcli -d SID -u control, and password db_online
    # x_server start
    

Fahren Sie mit dem nächsten Schritt fort, um eine Ressource für die SAP-Datenbank zu erstellen. Wenn an dieser Stelle Fehler auftreten, erstellen Sie die Datenbankressource nicht.

Ressource für SAP MaxDB erstellen

RHEL Pacemaker verwendet den SAP-Datenbankressourcen-Agenten, um die SAP-Datenbank zu überwachen und zu steuern.

  1. Erstellen Sie die Datenbankressource auf dem Knoten, auf dem SAPMaxDB_group aktiv ist, mit dem folgenden Befehl:

    # pcs resource create SAPDatabase_resource_name SAPDatabase \
      DBTYPE="ADA" SID="SID" STRICT_MONITORING="TRUE" \
      MONITOR_SERVICES="Database|x_server" AUTOMATIC_RECOVER="TRUE"
      --group SAPMaxDB_Group

    Die endgültigen Clusterressourcen können mit pcs status angezeigt werden. Das erwartete Ergebnis sieht so aus:

    # pcs status
      Cluster name: maxdb-cluster
      Stack: corosync
      Current DC: maxdb-ha-vm-1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
      Last updated: Wed Oct 23 02:04:32 2024
      Last change: Wed Oct 23 02:01:41 2024 by hacluster via crmd on maxdb-ha-vm-1
    
      2 nodes configured
      7 resource instances configured
    
      Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
      Full list of resources:
    
      STONITH-maxdb-ha-vm-1  (stonith:fence_gce):    Started maxdb-ha-vm-2
      STONITH-maxdb-ha-vm-2  (stonith:fence_gce):    Started maxdb-ha-vm-1
      Resource Group: SAPMaxDB_Group
         healthcheck_maxdb  (service:haproxy):      Started maxdb-ha-vm-1
         sapdb_regpd        (ocf::heartbeat:gcp-pd-move):   Started maxdb-ha-vm-1
         lvm_sapdb  (ocf::heartbeat:LVM-activate):  Started maxdb-ha-vm-1
         sapdb_fs   (ocf::heartbeat:Filesystem):    Started maxdb-ha-vm-1
         MDB_SAPMaxDB       (ocf::heartbeat:SAPDatabase):   Started maxdb-ha-vm-1
    
      Daemon Status:
      corosync: active/enabled
      pacemaker: active/enabled
      pcsd: active/enabled

Failover testen

Testen Sie Ihren Cluster, indem Sie einen Ausfall auf dem aktiven Host simulieren. Verwenden Sie ein Testsystem oder führen Sie den Test auf Ihrem Produktionssystem durch, bevor Sie das System für die Verwendung freigeben.

Sichern Sie vor dem Test das System.

Sie können einen Ausfall auf unterschiedliche Weise simulieren, z. B. so:

  • MaxDB oder x_server manuell beenden
  • MaxDB- oder x_server-Prozess beenden
  • reboot (auf dem aktiven Knoten)
  • ip link set eth0 down für Instanzen mit einer einzelnen Netzwerkschnittstelle
  • iptables ... DROP für Instanzen mit mehreren Netzwerkschnittstellen
  • echo c > /proc/sysrq-trigger

Diese Anleitung verwendet ip link set eth0 down oder iptables, um eine Netzwerkunterbrechung zwischen den beiden Hosts in Ihrem Cluster zu simulieren. Verwenden Sie den Befehl ip link für eine Instanz mit einer einzelnen Netzwerkschnittstelle und den Befehl iptables für Instanzen mit einer oder mehreren Netzwerkschnittstellen. Der Test validiert sowohl Failover als auch Fencing. Wenn für die Instanzen mehrere Netzwerkschnittstellen definiert sind, verwenden Sie den Befehl iptables auf dem sekundären Host, um eingehenden und ausgehenden Traffic anhand der IP-Adresse zu löschen, die vom primären Host für die Cluster-Kommunikation verwendet wird, wodurch ein Verlust der Netzwerkverbindung zum primären Knoten simuliert wird.

  1. Schalten Sie als Root auf dem aktiven Host die Netzwerkschnittstelle offline:

    # ip link set eth0 down
  2. Stellen Sie eine SSH-Verbindung zu einem der Hosts her und wechseln Sie zum Root-Nutzer.

  3. Geben Sie pcs status ein, um zu prüfen, ob der zuvor passive Host jetzt den regionalen nichtflüchtigen Speicher angehängt hat und die MaxDB-Dienste ausführt. Da im Cluster der automatische Neustart aktiviert ist, wird der angehaltene Host neu gestartet und übernimmt wie im folgenden Beispiel gezeigt die Rolle des passiven Hosts:

    Cluster name: maxdb-ha-cluster
    Stack: corosync
    Current DC: maxdb-ha-vm-2 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
    Last updated: Wed Oct 23 02:01:45 2024
    Last change: Wed Oct 23 02:01:41 2024 by hacluster via crmdon maxdb-ha-vm-2
    
    2 nodes configured
    7 resources configured
    
    Online: [ maxdb-ha-vm-1 maxdb-ha-vm-2 ]
    
    Full list of resources:
    
    STONITH-maxdb-ha-vm-1   (stonith:fence_gce):    Started maxdb-ha-vm-2
    STONITH-maxdb-ha-vm-2   (stonith:fence_gce):    Started maxdb-ha-vm-1
    
    Resource Group: SAPMaxDB_Group
     healthcheck_maxdb  (service:haproxy):      Started maxdb-ha-vm-2
     sapdb_regpd        (ocf::heartbeat:gcp-pd-move):   Started maxdb-ha-vm-2
     lvm_sapdb  (ocf::heartbeat:LVM-activate):  Started maxdb-ha-vm-2
     sapdb_fs   (ocf::heartbeat:Filesystem):    Started maxdb-ha-vm-2
     MDB_SAPMaxDB       (ocf::heartbeat:SAPDatabase):   Started maxdb-ha-vm-2
    
    Daemon Status:
     corosync: active/enabled
     pacemaker: active/enabled
     pcsd: active/enabled

Fehlerbehebung

Informationen zur Fehlerbehebung bei Problemen mit Hochverfügbarkeitskonfigurationen für SAP-Systeme unter RHEL finden Sie unter Fehlerbehebung bei Hochverfügbarkeitskonfigurationen für SAP.

Support für SAP HANA unter RHEL

Wenn Sie Hilfe bei einem Problem mit Hochverfügbarkeitsclustern für SAP HANA unter RHEL benötigen, stellen Sie die erforderlichen Diagnoseinformationen zusammen und wenden Sie sich an den Cloud Customer Care. Weitere Informationen finden Sie unter Diagnoseinformationen zu Hochverfügbarkeitsclustern auf RHEL.