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 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. Vous devez tout de même installer l'utilitaire socat
, car vous l'utiliserez plus tard lors de la configuration des ressources du cluster.
En tant qu'utilisateur racine, installez sur les deux VM hôtes l'utilitaire
socat
:#
zypper install -y socatDé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,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 :
$
crm configure property maintenance-mode="true"Sauvegardez la configuration du cluster :
$
crm configure 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
Modifier la ressource primitive d'adresse IP virtuelle dans la configuration du cluster
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_nameLa définition de la ressource s'ouvre dans un éditeur de texte, tel que vi.
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
paranything
. - Remplacez l'intervalle
op monitor
parinterval=10s
. - Définissez le délai d'expiration de
op monitor
àtimeout=20s
. - Supprimez la définition d'opération
op start
etop 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.- Remplacez la classe de ressource
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 -dEn tant que n'importe quel autre utilisateur :
telnet VIP HANA SQL port
ou
nc -zv VIP HANA SQL port