Su Google Cloud, il modo consigliato per implementare un indirizzo IP virtuale (VIP) per un cluster ad alta disponibilità basato su sistema operativo per SAP è utilizzare il supporto di failover di un bilanciatore del carico TCP/UDP interno.
Se hai già un cluster Red Hat Enterprise Linux (RHEL) ad alta disponibilità per SAP su Google Cloud che utilizza un VIP implementato con un IP alias, puoi eseguire la migrazione del VIP per utilizzare invece un bilanciatore del carico interno.
Se hai utilizzato il modello Deployment Manager sap_hana_ha
, che non è più supportato, per eseguire il deployment di un sistema di scale up SAP HANA in un cluster ad alta disponibilità su RHEL, il VIP viene implementato con un IP alias.
Queste istruzioni mostrano come eseguire la migrazione di un VIP in un cluster RHEL ad alta disponibilità.
Prerequisiti
Queste istruzioni presuppongono che tu disponga già di un cluster ad alta disponibilità su Google Cloud che utilizza un IP alias per l'implementazione VIP.
Panoramica della procedura
- Configurare e testare un bilanciatore del carico utilizzando una regola di forwarding temporanea e un indirizzo IP temporaneo al posto del VIP.
- Imposta il cluster in modalità di manutenzione e, se possibile, arresta le istanze del server delle applicazioni SAP per evitare comportamenti imprevisti.
- Distribuisci l'indirizzo IP alias dall'host principale. Questo indirizzo diventa il VIP con il bilanciatore del carico.
- Nella configurazione del cluster Pacemaker:
- Modifica la classe della risorsa VIP esistente.
- Sostituisci i parametri esistenti per l'IP alias con i parametri per il servizio di controllo di integrità.
Conferma l'indirizzo VIP esistente
Come root, nell'istanza VM principale visualizza la configurazione del cluster basata su IP alias esistente:
$
pcs configure show
Nella definizione della risorsa, l'intervallo di indirizzi VIP appare
nelle risorse alias
e IPaddr2
. Per cambiare l'indirizzo VIP,
devi aggiornare entrambe le risorse. Vedi l'esempio che segue:
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)
Nella console Google Cloud, verifica che l'indirizzo IP utilizzato con l'IP alias sia riservato. L'indirizzo IP può essere quello utilizzato per l'IP alias o può essere un nuovo indirizzo IP.
$
gcloud compute addresses list --filter="region:( cluster-region )"
Se l'indirizzo IP è prenotato e allocato all'istanza VM principale, il relativo stato sarà IN_USE
. Quando riallochi l'IP al bilanciatore del carico, devi prima distribuirlo dall'istanza principale attiva, dopodiché il suo stato diventa RESERVED
.
Se l'indirizzo non è incluso negli indirizzi IP restituiti dal comando list, prenotalo ora per evitare conflitti di indirizzi in futuro:
$
gcloud compute addresses create vip-name \
--region cluster-region --subnet cluster-subnet \
--addresses vip-address
Elenca di nuovo i tuoi indirizzi per confermare che l'indirizzo IP venga visualizzato come RESERVED
.
Configura il supporto del failover di Cloud Load Balancing
Il servizio Bilanciatore del carico di rete passthrough interno con supporto del failover instrada il traffico all'host attivo in un cluster SAP HANA in base a un servizio di controllo di integrità.
Per evitare conflitti e consentire i test prima del completamento della migrazione, in queste istruzioni è necessario creare una regola di forwarding temporanea con un indirizzo IP segnaposto dalla stessa subnet dell'indirizzo VIP. Quando è tutto pronto per passare all'implementazione VIP, crea una nuova regola di forwarding finale con l'indirizzo VIP.
Prenota un indirizzo IP temporaneo per l'IP virtuale
L'indirizzo VIP segue il sistema SAP HANA attivo. Il bilanciatore del carico instrada il traffico inviato al VIP alla VM che attualmente ospita il sistema SAP HANA attivo.
Apri Cloud Shell:
Prenotare un indirizzo IP temporaneo nella stessa subnet dell'IP alias per scopi di test. Se ometti il flag
--addresses
, viene scelto automaticamente un indirizzo IP nella subnet specificata:$
gcloud compute addresses create VIP_NAME \ --region CLUSTER_REGION --subnet CLUSTER_SUBNET \ --addresses VIP_ADDRESSPer saperne di più sulla prenotazione di un IP statico, consulta Prenotare un indirizzo IP interno statico.
Conferma prenotazione indirizzo IP:
$
gcloud compute addresses describe VIP_NAME \ --region CLUSTER_REGIONDovresti vedere un output simile al seguente esempio:
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
Crea gruppi di istanze per le VM host
In Cloud Shell, crea due gruppi di istanze non gestite e assegna la VM dell'host master principale a uno e la VM dell'host master secondario all'altro:
$
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_NAMEConferma la creazione dei gruppi di istanze:
$
gcloud compute instance-groups unmanaged listDovresti vedere un output simile al seguente esempio:
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
Crea un controllo di integrità di Compute Engine
In Cloud Shell, crea il controllo di integrità. Scegline una che rientra nell'intervallo privato, 49152-65535, per evitare conflitti con altri servizi. I valori di timeout e intervallo di controllo sono leggermente più lunghi dei valori predefiniti, in modo da aumentare la tolleranza di failover durante gli eventi di migrazione live di Compute Engine. Se necessario, puoi modificare i valori:
$
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=2Conferma la creazione del controllo di integrità:
$
gcloud compute health-checks describe HEALTH_CHECK_NAMEDovresti vedere un output simile al seguente esempio:
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
Crea una regola firewall per i controlli di integrità
Definisci una regola firewall per una porta nell'intervallo privato che consenta l'accesso alle VM host dagli intervalli IP utilizzati dai controlli di integrità di Compute Engine, 35.191.0.0/16
e 130.211.0.0/22
. Per maggiori informazioni, consulta Creazione di regole firewall per i controlli di integrità.
Se non ne hai già uno, aggiungi un tag di rete alle VM host. Questo tag di rete è utilizzato dalla regola firewall per i controlli di integrità.
$
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_ZONESe non ne hai già una, crea una regola firewall per consentire i controlli di integrità:
$
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_NUMAd esempio:
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
Configura il bilanciatore del carico e il gruppo di failover
Crea il servizio di backend del bilanciatore del carico:
$
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-checksAggiungi il gruppo di istanze principale al servizio di backend:
$
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group PRIMARY_IG_NAME \ --instance-group-zone PRIMARY_ZONE \ --region CLUSTER_REGIONAggiungi il gruppo di istanze di failover secondario al servizio di backend:
$
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group SECONDARY_IG_NAME \ --instance-group-zone SECONDARY_ZONE \ --failover \ --region CLUSTER_REGIONCreare una regola di forwarding temporanea. Per l'indirizzo IP, specifica l'indirizzo IP temporaneo che hai prenotato per il test. Se devi accedere al sistema SAP HANA dall'esterno della regione specificata di seguito, includi il flag
--allow-global-access
nella definizione:$
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 ALLPer saperne di più sull'accesso tra regioni al tuo sistema ad alta disponibilità SAP HANA, consulta Bilanciamento del carico TCP/UDP interno.
Testa la configurazione del bilanciatore del carico
Anche se i gruppi di istanza di backend non si registrano come integri fino a dopo, puoi testare la configurazione del bilanciatore del carico impostando un listener che risponda ai controlli di integrità. Dopo aver configurato un listener, se il bilanciatore del carico è configurato correttamente, lo stato dei gruppi di istanza di backend diventa integro.
Le seguenti sezioni illustrano diversi metodi che puoi utilizzare per testare la configurazione.
Test del bilanciatore del carico con l'utilità socat
Puoi utilizzare l'utilità socat
per rimanere temporaneamente in ascolto sulla porta per il controllo di integrità.
Su entrambe le VM host, installa l'utilità
socat
:$
sudo yum install -y socatAvvia un processo
socat
per rimanere in ascolto per 60 secondi sulla porta per il controllo di integrità:$
sudo timeout 60s socat - TCP-LISTEN:HLTH_CHK_PORT_NUM,forkIn Cloud Shell, dopo aver atteso alcuni secondi affinché il controllo di integrità rilevasse il listener, controlla l'integrità dei gruppi di istanza di backend:
$
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGIONDovresti vedere un output simile al seguente:
--- 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
Test del bilanciatore del carico utilizzando la porta 22
Se la porta 22 è aperta per le connessioni SSH sulle VM host, puoi modificare temporaneamente il controllo di integrità in modo da utilizzare la porta 22, che include un listener in grado di rispondere al controllo di integrità.
Per utilizzare temporaneamente la porta 22:
Fai clic sul controllo di integrità nella console:
Fai clic su Modifica.
Nel campo Porta, imposta il numero di porta su 22.
Fai clic su Salva e attendi un paio di minuti.
In Cloud Shell, controlla l'integrità dei gruppi di istanza di backend:
$
gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region CLUSTER_REGIONDovresti vedere un output simile al seguente:
--- 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
Al termine, ripristina il numero di porta originale per il controllo di integrità.
Eseguire la migrazione dell'implementazione VIP per utilizzare il bilanciatore del carico
I passaggi seguenti modificano la configurazione del cluster Pacemaker e la regola di forwarding del bilanciatore del carico per completare la migrazione VIP.
Preparare il sistema per la modifica
Se puoi, interrompi la connessione dell'applicazione SAP al database SAP HANA perché la connessione verrà interrotta per un breve momento per lo scambio degli indirizzi IP. I processi di lavoro NetWeaver sono in grado di riconnettersi al database, ma potrebbero verificarsi errori o situazioni di blocco, che possono evitare l'interruzione della connessione. Assicurati che il tuo IP sia registrato in un intervallo interno che fa parte del tuo VPC nella regione di destinazione.
Come root sull'istanza principale attiva, imposta il cluster in modalità di manutenzione:
$
pcs property set maintenance-mode="true"Esegui il backup della configurazione del cluster:
$
pcs config show > clusterconfig.backup
Distribuisci l'IP alias
In Cloud Shell, conferma gli intervalli IP alias assegnati all'istanza principale di SAP HANA:
$
gcloud compute instances describe \ primary-host-name \ --zone primary-zone \ --format="flattened(name,networkInterfaces[].aliasIpRanges)"Nella console Google Cloud, aggiorna l'interfaccia di rete. Se non devi conservare gli IP alias, specifica
--aliases ""
:$
gcloud compute instances network-interfaces update primary-host-name \ --zone primary-zone \ --aliases "ip-ranges-to-retain"
Crea la regola di forwarding VIP ed esegui la pulizia
Nella console Google Cloud, crea una nuova regola di forwarding front-end per il bilanciatore del carico, specificando l'indirizzo IP precedentemente utilizzato per l'IP alias come indirizzo IP. Questo è il tuo VIP.
$
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 ALLConferma la creazione della regola di forwarding e prendi nota del nome della regola di forwarding temporanea per l'eliminazione:
$
gcloud compute forwarding-rules listElimina la regola di forwarding temporanea:
$
gcloud compute forwarding-rules delete rule-name --region=cluster-regionRilascia l'indirizzo IP temporaneo che hai prenotato:
$
gcloud compute addresses delete temp-ip-name --region=cluster-region
Installa listener e crea una risorsa di controllo di integrità
Per configurare una risorsa di controllo di integrità, devi prima installare i listener.
Installa un listener
Il bilanciatore del carico utilizza un listener sulla porta per il controllo di integrità di ciascun host per determinare dove è in esecuzione l'istanza principale del cluster SAP HANA. 1. Come root sull'istanza master sui sistemi primari e secondari, installa un listener TCP. Queste istruzioni installano e utilizzano HAProxy come listener.
#
yum install haproxy
Apri il file di configurazione
haproxy.cfg
per la modifica:#
vi /etc/haproxy/haproxy.cfgNella sezione defaults (Impostazioni predefinite) di
haproxy.cfg
, impostamode
sutcp
.Dopo la sezione relativa ai valori predefiniti, crea una nuova sezione aggiungendo:
#--------------------------------------------------------------------- # Health check listener port for SAP HANA HA cluster #--------------------------------------------------------------------- listen healthcheck bind *:healthcheck-port-num
La porta di associazione è la stessa che hai utilizzato quando hai creato il controllo di integrità.
Al termine, gli aggiornamenti dovrebbero essere simili al seguente esempio:
#--------------------------------------------------------------------- # 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
Su ogni host come root, avvia il servizio per verificare che sia configurato correttamente:
#
systemctl start haproxy.serviceNella pagina Bilanciatore del carico nella console Google Cloud, fai clic sulla voce del bilanciatore del carico:
Pagina Bilanciamento del carico
Nella sezione Backend della pagina Dettagli bilanciatore del carico, se il servizio HAProxy è attivo su entrambi gli host, viene visualizzato
1/1
nella colonna Integrità di ogni voce di gruppo di istanze.Su ogni host, interrompi il servizio HAProxy:
#
systemctl stop haproxy.serviceDopo aver arrestato il servizio HAProxy su ciascun host, viene visualizzato
0/1
nella colonna Integrità di ogni gruppo di istanze.In seguito, quando il controllo di integrità viene configurato, il cluster riavvia l'ascoltatore sul nodo master.
Crea la risorsa del controllo di integrità
Su uno dei due host come root, crea una risorsa di controllo di integrità per il servizio HAProxy:
#
pcs resource create healthcheck_resource_name service:haproxy op monitor interval=10s timeout=20s
Modifica la configurazione del cluster per utilizzare la risorsa di controllo di integrità e rimuovi la risorsa alias
Rimuovi
Colocation Constraints
per il gruppo esistente che contiene la risorsa IP alias mappata all'istanza principale di SAP HANA:#
pcs constraint remove colocation-alias-vip-group-sap_hana_resource_nameCrea un nuovo gruppo di risorse che raggruppa le risorse VIP e per il controllo di integrità:
#
pcs resource group add rsc-group-namehealthcheck_resource_namevip_resource_nameQuesto comando sostituisce il nome precedente del gruppo delle risorse IP alias e VIP con il nuovo nome del gruppo di risorse nella configurazione del cluster.
Verifica il nuovo nome del gruppo di risorse nella configurazione del cluster:
#
pcs config showDovresti vedere un output simile al seguente esempio:
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)
Elimina la risorsa alias:
#
pcs resource delete alias_resource_nameVerifica lo stato del cluster:
#
pcs statusNell'output dovresti vedere la sezione Gruppo di risorse simile all'esempio seguente:
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
Esci dalla modalità di manutenzione del cluster:
#
pcs property set maintenance-mode=false
Testa il cluster ad alta disponibilità aggiornato
Dall'istanza dell'applicazione, conferma che puoi raggiungere il database inviando uno dei seguenti comandi:
Come utente di
sidadm
:>
R3trans -dCome qualsiasi utente:
telnet VIP HANA SQL port
o
nc -zv VIP HANA SQL port