Migrer une adresse IP virtuelle dans un cluster SLES à haute disponibilité vers un équilibreur de charge interne

Sur Google Cloud, la méthode recommandée pour mettre en œuvre une adresse IP virtuelle pour un cluster à haute disponibilité basé sur le système d'exploitation pour SAP consiste à utiliser le basculement d'un équilibreur de charge TCP/UDP interne.

Si vous possédez un cluster à haute disponibilité SUSE Linux Enterprise Server (SLES) pour SAP sur Google Cloud utilisant une adresse IP virtuelle mise en œuvre avec une adresse IP d'alias, vous pouvez migrer cette adresse IP virtuelle pour utiliser un équilibreur de charge interne.

Si vous avez utilisé le modèle Deployment Manager sap_hana_ha, qui n'est plus pris en charge, pour déployer un système de scaling SAP HANA dans un cluster à haute disponibilité sur SLES, votre adresse IP virtuelle est implémentée avec une adresse IP d'alias

Ces instructions montrent comment migrer une adresse IP virtuelle dans un cluster à haute disponibilité SLES.

Prérequis

Ces instructions supposent que vous disposez déjà d'un cluster à haute disponibilité correctement configuré sur Google Cloud utilisant une adresse IP d'alias pour la mise en œuvre de l'adresse IP virtuelle.

Vue d'ensemble de la procédure

  • Configurez et testez un équilibreur de charge à l'aide d'une règle de transfert temporaire et d'une adresse IP temporaire à la place de l'adresse IP virtuelle.
  • Définissez votre cluster sur le mode de maintenance et, si possible, arrêtez vos instances de serveur d'applications SAP afin d'éviter tout comportement inattendu.
  • Annulez l'allocation de l'adresse IP d'alias à l'hôte primaire. Cette adresse devient l'adresse IP virtuelle avec l'équilibreur de charge.
  • Dans la configuration du cluster Pacemaker :
    • Modifiez la classe de la ressource d'adresse IP virtuelle existante.
    • Remplacez les paramètres existants des adresses IP d'alias par les paramètres du service de vérification de l'état.

Confirmer l'adresse IP virtuelle existante

En tant qu'utilisateur racine, sur l'instance de VM primaire, affichez votre configuration de cluster basée sur une adresse IP d'alias :

$ crm configure show

Dans la définition de la ressource, la plage d'adresses IP virtuelles apparaît sur les ressources alias et IPaddr2. Si vous devez modifier l'adresse IP virtuelle, vous devez mettre à jour les deux ressources. Consultez l'exemple ci-dessous :

primitive rsc_vip_gcp-primary ocf:gcp:alias \
        op monitor interval=60s timeout=60s \
        op start interval=0 timeout=600s \
        op stop interval=0 timeout=180s \
        params alias_ip="10.128.1.200/32" hostlist="ha1 ha2" gcloud_path="/usr/local/google-cloud-sdk/bin/gcloud" logging=yes \
        meta priority=10
primitive rsc_vip_int-primary IPaddr2 \
        params ip=10.128.1.200 cidr_netmask=32 nic=eth0 \
        op monitor interval=3600s timeout=60s

Dans la console Google Cloud, vérifiez que l'adresse IP utilisée avec l'adresse IP d'alias est réservée. L'adresse IP peut être l'adresse IP utilisée pour l'adresse IP d'alias, ou une nouvelle adresse IP.

$ gcloud compute addresses list --filter="region:( cluster-region )"

Si l'adresse IP est réservée et allouée à l'instance de VM primaire, son état est IN_USE. Lorsque vous réattribuez l'adresse IP à votre équilibreur de charge, vous devez d'abord annuler l'allocation de l'instance principale active et son état deviendra RESERVED.

Si l'adresse n'est pas incluse dans les adresses IP renvoyées par la commande list, réservez-la dès maintenant pour éviter tout conflit ultérieur :

$ gcloud compute addresses create vip-name \
  --region cluster-region --subnet cluster-subnet \
  --addresses vip-address

Affichez de nouveau la liste de vos adresses pour confirmer que l'adresse IP apparaît comme RESERVED.

Configurer la prise en charge du basculement Cloud Load Balancing

Le service d'équilibrage de charge réseau passthrough interne avec prise en charge du basculement achemine le trafic vers l'hôte actif dans un cluster SAP HANA en fonction d'un service de vérification de l'état.

Pour éviter les conflits et autoriser les tests avant la fin de la migration, ces instructions vous permettent de créer une règle de transfert temporaire avec une adresse IP réservée du même sous-réseau que l'adresse IP virtuelle. Lorsque vous êtes prêt à migrer la mise en œuvre de l'adresse IP virtuelle, vous créez une dernière règle de transfert avec l'adresse IP virtuelle.

Réserver une adresse IP temporaire pour l'adresse IP virtuelle

L'adresse IP virtuelle suit le système SAP HANA actif. L'équilibreur de charge achemine le trafic envoyé à l'adresse IP virtuelle vers la VM qui héberge actuellement le système SAP HANA actif.

  1. Ouvrez Cloud Shell.

    Accéder à Cloud Shell

  2. Réservez une adresse IP temporaire dans le même sous-réseau que l'adresse IP d'alias à des fins de test. Si vous omettez l'option --addresses, une adresse IP du sous-réseau spécifié est choisie pour vous :

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

    Pour en savoir plus sur la réservation d'une adresse IP statique, consultez la page Réserver une adresse IP interne statique.

  3. Confirmez la réservation d'adresse IP :

    $ gcloud compute addresses describe VIP_NAME \
      --region CLUSTER_REGION

    Un résultat semblable aux lignes suivantes doit s'afficher :

    address: 10.0.0.19
    addressType: INTERNAL
    creationTimestamp: '2020-05-20T14:19:03.109-07:00'
    description: ''
    id: '8961491304398200872'
    kind: compute#address
    name: vip-for-hana-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-hana-ha
    status: RESERVED
    subnetwork: https://www.googleapis.com/compute/v1/projects/example-project-123456/regions/us-central1/subnetworks/example-subnet-us-central1

Créer des groupes d'instances pour vos VM hôtes

  1. Dans Cloud Shell, créez deux groupes d'instances non gérés, puis attribuez la VM hôte maître principale à l'un et la VM hôte maître secondaire à l'autre :

    $ 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. Confirmez la création des groupes d'instances :

    $ gcloud compute instance-groups unmanaged list

    Un résultat semblable aux lignes suivantes doit s'afficher :

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

Créer une vérification de l'état Compute Engine

  1. Dans Cloud Shell, créez la vérification de l'état. Pour le port utilisé par la vérification de l'état, choisissez un port situé dans la plage privée (49152-65535) afin d'éviter tout conflit avec d'autres services. Les valeurs de l'intervalle entre deux tests et du délai avant expiration sont légèrement supérieures aux valeurs par défaut afin d'augmenter la tolérance au basculement lors des événements de migration à chaud de Compute Engine. Vous pouvez ajuster les valeurs, si nécessaire :

    $ 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. Confirmez la création de la vérification de l'état :

    $ gcloud compute health-checks describe HEALTH_CHECK_NAME

    Un résultat semblable aux lignes suivantes doit s'afficher :

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

Créer une règle de pare-feu pour les vérifications d'état

Définissez une règle de pare-feu pour un port situé dans la plage privée qui permet d'accéder à vos VM hôtes à partir des plages d'adresses IP utilisées par les vérifications d'état de Compute Engine, 35.191.0.0/16 et 130.211.0.0/22. Pour en savoir plus, consultez la section Créer des règles de pare-feu pour les vérifications d'état.

  1. Si ce n'est pas déjà fait, ajoutez un tag réseau à vos VM hôtes. Ce tag réseau est utilisé par la règle de pare-feu pour les vérifications d'état.

    $ 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. Si vous n'en avez pas encore, créez une règle de pare-feu pour autoriser les vérifications de l'état :

    $ 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

    Exemple :

    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

Configurer l'équilibreur de charge et le groupe de basculement

  1. Créez le service de backend de l'équilibreur de charge :

    $ 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. Ajoutez le groupe d'instances principal au service de backend :

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group PRIMARY_IG_NAME \
      --instance-group-zone PRIMARY_ZONE \
      --region CLUSTER_REGION
  3. Ajoutez le groupe d'instances de basculement secondaire au service de backend :

    $ gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --instance-group SECONDARY_IG_NAME \
      --instance-group-zone SECONDARY_ZONE \
      --failover \
      --region CLUSTER_REGION
  4. Créez une règle de transfert temporaire. Pour l'adresse IP, spécifiez l'adresse IP temporaire que vous avez réservée pour le test : Si vous devez accéder au système SAP HANA en dehors de la région spécifiée ci-dessous, incluez l'indicateur --allow-global-access dans la définition :

    $ 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

    Pour en savoir plus sur l'accès interrégional à votre système SAP HANA à haute disponibilité, consultez la page Équilibrage de charge TCP/UDP interne.

Tester la configuration de l'équilibreur de charge

Même si vos groupes d'instances backend ne seront considérés comme opérationnels que plus tard, vous pouvez tester la configuration de l'équilibreur de charge en configurant un écouteur pour répondre aux vérifications d'état. Une fois un écouteur configuré, si l'équilibreur de charge est correctement configuré, les groupes d'instances backend deviennent opérationnels.

Les sections suivantes présentent différentes méthodes que vous pouvez utiliser pour tester la configuration.

Tester l'équilibreur de charge avec l'utilitaire socat

Vous pouvez vous servir de l'utilitaire socat pour écouter temporairement le port de vérification de l'état. Vous devez tout de même installer l'utilitaire socat, car vous l'utiliserez plus tard lors de la configuration des ressources du cluster.

  1. En tant qu'utilisateur racine, installez sur les deux VM hôtes l'utilitaire socat :

    # zypper install -y socat

  2. Démarrez un processus socat pour écouter le port de vérification de l'état pendant 60 secondes :

    # timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,fork

  3. Dans Cloud Shell, après avoir attendu quelques secondes pour que la vérification de l'état détecte l'écouteur, vérifiez l'état de vos groupes d'instances backend :

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

    Le résultat doit être semblable à ceci :

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

Tester l'équilibreur de charge à l'aide du port 22

Si le port 22 est ouvert pour les connexions SSH sur vos VM hôtes, vous pouvez modifier temporairement le vérificateur de l'état afin d'utiliser ce port, qui dispose d'un écouteur capable de lui répondre.

Pour utiliser temporairement le port 22, procédez comme suit :

  1. Cliquez sur votre vérification de l'état dans la console :

    Accéder à la page "Vérifications d'état"

  2. Cliquez sur Modifier.

  3. Dans le champ Port, remplacez le numéro de port par 22.

  4. Cliquez sur Enregistrer, puis patientez une minute ou deux.

  5. Dans Cloud Shell, vérifiez l'état de vos groupes d'instances backend :

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

    Le résultat doit être semblable à ceci :

    ---
    backend: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instanceGroups/hana-ha-ig-1
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-a/instances/hana-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/hana-ha-ig-2
    status:
     healthStatus:
     ‐ healthState: HEALTHY
       instance: https://www.googleapis.com/compute/v1/projects/example-project-123456/zones/us-central1-c/instances/hana-ha-vm-2
       ipAddress: 10.0.0.34
       port: 80
     kind: compute#backendServiceGroupHealth
  6. Lorsque vous avez terminé, rétablissez le numéro de port d'origine de la vérification de l'état.

Migrer l'implémentation de l'adresse IP virtuelle pour utiliser l'équilibreur de charge

Les étapes suivantes permettent de modifier la configuration du cluster Pacemaker et la règle de transfert de l'équilibreur de charge pour effectuer la migration de l'adresse IP virtuelle.

Préparer le système pour la modification

  1. Si possible, arrêtez la connexion entre l'application SAP et la base de données SAP HANA, car la connexion sera brièvement interrompue lors du changement d'adresses IP. Les processus de travail de NetWeaver peuvent se reconnecter à la base de données, mais vous risquez de rencontrer des pannes ou des situations d'attente, ce qui peut interrompre la connexion. Assurez-vous que votre adresse IP est enregistrée dans une plage interne faisant partie de votre VPC dans la région cible.

  2. En tant qu'utilisateur racine, sur l'instance primaire active, mettez le cluster en mode de maintenance :

    $ crm configure property maintenance-mode="true"

  3. Sauvegardez la configuration du cluster :

    $ crm configure show > clusterconfig.backup

Annuler l'allocation de l'adresse IP d'alias

  1. Dans Cloud Shell, confirmez les plages d'adresses IP d'alias attribuées à l'instance principale de SAP HANA :

    $ gcloud compute instances describe \
        primary-host-name \
        --zone primary-zone \
        --format="flattened(name,networkInterfaces[].aliasIpRanges)"
  2. Dans la console Google Cloud, mettez à jour l'interface réseau. Si vous n'avez pas besoin de conserver des adresses IP d'alias, spécifiez --aliases "" :

    $ gcloud compute instances network-interfaces update primary-host-name \
    --zone primary-zone \
    --aliases "ip-ranges-to-retain"

Créer la règle de transfert d'adresse IP virtuelle et nettoyer

  1. Dans la console Google Cloud, créez une règle de transfert frontale pour l'équilibreur de charge, en spécifiant comme adresse IP l'adresse que vous avez précédemment utilisée comme adresse IP d'alias. Il s'agit de votre adresse IP virtuelle.

    $ 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
  2. Confirmez la création de la règle de transfert et notez le nom de la règle de transfert temporaire à supprimer :

    $ gcloud compute forwarding-rules list
  3. Supprimez la règle de transfert temporaire :

    $ gcloud compute forwarding-rules delete rule-name --region=cluster-region
  4. Libérez l'adresse IP temporaire que vous avez réservée :

    $ gcloud compute addresses delete temp-ip-name --region=cluster-region

Modifier la ressource primitive d'adresse IP virtuelle dans la configuration du cluster

  1. En tant qu'utilisateur racine, sur l'instance principale, modifiez la définition de la ressource primitive de l'adresse IP virtuelle. Si le cluster a été créé par les modèles Deployment Manager fournis par Google Cloud, le nom de la ressource primitive de l'adresse IP virtuelle est rsc_vip_gcp-primary :

    $ crm configure edit rsc_name

    La définition de la ressource s'ouvre dans un éditeur de texte, tel que vi.

  2. Apportez les modifications suivantes à la ressource d'adresse IP virtuelle dans la configuration du cluster à haute disponibilité Pacemaker :

    • Remplacez la classe de ressource ocf:gcp:alias par anything.
    • Remplacez l'intervalle op monitor par interval=10s.
    • Définissez le délai d'expiration de op monitor à timeout=20s.
    • Supprimez la définition d'opération op start et op stop.
    • Exclure meta priority=10
    • Remplacez les paramètres d'adresse IP d'alias :
      alias_ip="10.0.0.10/32" hostlist="example-ha-vm1 example-ha-vm2" gcloud_path="/usr/bin/gcloud" logging=yes
      avec les paramètres du service de vérification de l'état :
      binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null"

    Par exemple, remplacez les entrées en gras dans l'exemple d'adresse IP d'alias suivant :

    primitive rsc_vip_gcp-primary ocf:gcp:alias \
        op monitor interval=60s timeout=60s \
        op start interval=0 timeout=180s \
        op stop interval=0 timeout=180s \
        params alias_ip="10.0.0.10/32" hostlist="example-ha-vm1 example-ha-vm2" gcloud_path="/usr/bin/gcloud" logging=yes \
        meta priority=10

    Lorsque vous avez terminé la modification, la définition de la ressource pour le service de vérification de l'état doit ressembler à l'exemple suivant :

    primitive rsc_vip_gcp-primary anything \
        op monitor interval=10s timeout=20s \
        params binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null"

    Dans l'exemple précédent, HC port est le port de vérification de l'état que vous avez spécifié lors de la création de la vérification de l'état et la configuration de l'utilitaire socat.

  3. Désactivez le mode de maintenance pour le cluster :

    $ crm configure property maintenance-mode="false"

Tester le cluster à haute disponibilité mis à jour

À partir de votre instance d'application, vérifiez que vous pouvez accéder à la base de données en exécutant l'une des commandes suivantes :

  • En tant qu'utilisateur sidadm :

    > R3trans -d
  • En tant que n'importe quel autre utilisateur :

    telnet VIP HANA SQL port

    ou

    nc -zv VIP HANA SQL port