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é Red Hat Enterprise Linux (RHEL) 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 RHEL, 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é RHEL.
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 :
$
pcs 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 :
Resource rsc_alias (class=ocf provider=heartbeat type=gcp-vpc-move-vip) \ Attributes: alias_ip=10.10.0.90/32 Operations: monitor interval=60s timeout=60s (vip_hkn_00-monitor-interval-60s) start interval=0s timeout=600s stop interval=0s timeout=20s Resource rsc_vip(class=ocf provider=heartbeat type=IPaddr2) \ Attributes: cidr_netmask=32 ip=10.10.0.90 nic=eth0 Operations: monitor interval=10s timeout=20s (vip_hkn_00-monitor-interval-10s) start interval=0s timeout=20s (vip_hkn_00-start-interval-0s) stop interval=0s timeout=20s (vip_hkn_00-stop-interval-0s)
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 interne à stratégie directe 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.
Ouvrez Cloud Shell.
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_ADDRESSPour en savoir plus sur la réservation d'une adresse IP statique, consultez la page Réserver une adresse IP interne statique.
Confirmez la réservation d'adresse IP :
$
gcloud compute addresses describe VIP_NAME \ --region CLUSTER_REGIONUn 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
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_NAMEConfirmez la création des groupes d'instances :
$
gcloud compute instance-groups unmanaged listUn 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
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=2Confirmez la création de la vérification de l'état :
$
gcloud compute health-checks describe HEALTH_CHECK_NAMEUn 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.
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_ZONESi 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_NUMExemple :
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
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-checksAjoutez 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_REGIONAjoutez 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_REGIONCré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 ALLPour 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.
Sur les deux VM hôtes, installez l'utilitaire
socat
:$
sudo yum install -y socatDémarrez un processus
socat
pour écouter le port de vérification de l'état pendant 60 secondes :$
sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,forkDans 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_REGIONLe 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 :
Cliquez sur votre vérification de l'état dans la console :
Cliquez sur Modifier.
Dans le champ Port, remplacez le numéro de port par 22.
Cliquez sur Enregistrer, puis patientez une minute ou deux.
Dans Cloud Shell, vérifiez l'état de vos groupes d'instances backend :
$
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGIONLe 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
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
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.
En tant qu'utilisateur racine, sur l'instance primaire active, mettez le cluster en mode de maintenance :
$
pcs property set maintenance-mode="true"Sauvegardez la configuration du cluster :
$
pcs config show > clusterconfig.backup
Annuler l'allocation de l'adresse IP d'alias
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)"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
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 ALLConfirmez 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 listSupprimez la règle de transfert temporaire :
$
gcloud compute forwarding-rules delete rule-name --region=cluster-regionLibérez l'adresse IP temporaire que vous avez réservée :
$
gcloud compute addresses delete temp-ip-name --region=cluster-region
Installer des écouteurs et créer une ressource de vérification de l'état
Pour configurer une ressource de vérification de l'état, vous devez d'abord installer les écouteurs.
Installer un écouteur
L'équilibreur de charge utilise un écouteur sur le port de vérification de l'état de chaque hôte afin de déterminer où l'instance principale du cluster SAP HANA est exécutée. 1. Installez un écouteur TCP en mode root sur l'instance maître du système principal et celle du système secondaire. Ces instructions permettent d'installer et d'utiliser HAProxy comme écouteur.
#
yum install haproxy
Ouvrez le fichier de configuration
haproxy.cfg
pour le modifier :#
vi /etc/haproxy/haproxy.cfgDans la section defaults du fichier
haproxy.cfg
, remplacezmode
partcp
.Après la section defaults, créez une section en ajoutant :
#--------------------------------------------------------------------- # Health check listener port for SAP HANA HA cluster #--------------------------------------------------------------------- listen healthcheck bind *:healthcheck-port-num
Le port de liaison est le même que celui utilisé lors de la création de la vérification de l'état.
Lorsque vous avez terminé, vos modifications doivent ressembler à l'exemple suivant :
#--------------------------------------------------------------------- # 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 HANA HA cluster #--------------------------------------------------------------------- listen healthcheck bind *:60000
Sur chaque hôte, en tant qu'utilisateur racine, démarrez le service pour vérifier qu'il est correctement configuré :
#
systemctl start haproxy.serviceSur la page "Équilibrage de charge" de la console Google Cloud, cliquez sur l'entrée de l'équilibreur de charge :
Dans la section Backend de la page Détails de l'équilibreur de charge, si le service HAProxy est actif sur les deux hôtes,
1/1
s'affiche dans la colonne Healthy (Opérationnel) de chaque entrée de groupe d'instances.Sur chaque hôte, arrêtez le service HAProxy :
#
systemctl stop haproxy.serviceUne fois que vous avez arrêté le service HAProxy sur chaque hôte,
0/1
s'affiche dans la colonne Healthy (Opérationnel) de chaque groupe d'instances.Plus tard, lorsque la vérification de l'état sera configurée, le cluster relancera l'écouteur sur le nœud maître.
Créer la ressource de vérification de l'état
Sur l'un ou l'autre des hôtes, en tant qu'utilisateur racine, créez une ressource de vérification de l'état pour le service HAProxy :
#
pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s
Modifiez la configuration du cluster pour utiliser la ressource de vérification de l'état et supprimer la ressource d'alias.
Supprimez le nom
Colocation Constraints
du groupe existant contenant la ressource d'adresse IP d'alias mappée à l'instance principale de SAP HANA :#
pcs constraint remove colocation-alias-vip-group-sap_hana_resource_nameCréez un groupe de ressources qui regroupe les ressources VIP et de vérification de l'état :
#
pcs resource group add rsc-group-namehealthcheck_resource_namevip_resource_nameCette commande remplace le nom de groupe précédent des ressources d'adresses IP d'alias et d'adresses IP virtuelles par le nouveau nom de groupe de ressources dans la configuration du cluster.
Vérifiez le nom du nouveau groupe de ressources dans la configuration du cluster :
#
pcs config showUn résultat semblable aux lignes suivantes doit s'afficher :
Group: ilb-vip-group Resource: vip_hkn_00 (class=ocf provider=heartbeat type=IPaddr2) Attributes: cidr_netmask=32 ip=10.10.0.90 nic=eth0 Operations: monitor interval=10s timeout=20s (vip_hkn_00-monitor-interval-10s) start interval=0s timeout=20s (vip_hkn_00-start-interval-0s) stop interval=0s timeout=20s (vip_hkn_00-stop-interval-0s) Resource: ilb-health-check (class=service type=haproxy) Operations: monitor interval=60 timeout=100 (ilb-health-check-monitor-interval-60) start interval=0s timeout=100 (ilb-health-check-start-interval-0s) stop interval=0s timeout=100 (ilb-health-check-stop-interval-0s)
Supprimez la ressource d'alias :
#
pcs resource delete alias_resource_nameVérifiez le statut du cluster :
#
pcs statusUn résultat semblable à l'exemple suivant doit s'afficher dans la section "Groupe de ressources" :
STONITH-hana-ha-vm-1 (stonith:fence_gce): Started hana-ha-vm-2 STONITH-hana-ha-vm-2 (stonith:fence_gce): Started hana-ha-vm-1 Clone Set: SAPHanaTopology_HA1_22-clone [SAPHanaTopology_HA1_22] Started: [ hana-ha-vm-1 hana-ha-vm-2 ] Master/Slave Set: SAPHana_HA1_22-master [SAPHana_HA1_22] Masters: [ hana-ha-vm-1 ] Slaves: [ hana-ha-vm-2 ] Resource Group: g-primary rsc_healthcheck_HA1 (service:haproxy): Started hana-ha-vm-1 rsc_vip_HA1_22 (ocf::heartbeat:IPaddr2): Started hana-ha-vm-1
Désactivez le mode de maintenance pour le cluster :
#
pcs property set 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 -dEn tant que n'importe quel autre utilisateur :
telnet VIP HANA SQL port
ou
nc -zv VIP HANA SQL port