Su Google Cloud, il metodo consigliato per implementare un indirizzo IP virtuale (VIP) per un cluster ad alta disponibilità (OS) basato su sistema operativo per SAP è utilizzare il supporto di failover di un bilanciatore del carico TCP/UDP interno.
Se hai già un cluster ad alta disponibilità SUSE Linux Enterprise Server (SLES) per SAP su Google Cloud che utilizza un VIP implementato con un IP alias, puoi eseguire la migrazione del VIP per utilizzare un bilanciatore del carico interno.
Se hai utilizzato il modello sap_hana_ha
Deployment Manager, che non è più supportato, per eseguire il deployment di un sistema di scale up SAP HANA in un cluster ad alta disponibilità su SLES, il VIP verrà implementato con un IP alias.
Queste istruzioni mostrano come eseguire la migrazione di un VIP in un cluster SLES HA.
Prerequisiti
Queste istruzioni presuppongono che tu abbia già un cluster HA configurato correttamente su Google Cloud che utilizza un IP alias per l'implementazione VIP.
Panoramica della procedura
- Configura e testa un bilanciatore del carico utilizzando una regola di forwarding temporaneo e un indirizzo IP temporaneo al posto del VIP.
- Imposta il cluster sulla modalità di manutenzione e, se puoi, arresta le istanze del server delle applicazioni SAP per evitare comportamenti imprevisti.
- Individua l'indirizzo IP alias dall'host principale. Questo indirizzo diventa il VIP con il bilanciatore del carico.
- Nella configurazione del cluster Pacemaker:
- Cambia la classe della risorsa VIP esistente.
- Sostituisci i parametri esistenti per l'IP alias con i parametri del servizio di controllo di integrità.
Conferma l'indirizzo VIP esistente
Come root, nell'istanza VM principale viene visualizzata la configurazione del cluster esistente basata su alias IP:
$
crm configure show
Nella definizione della risorsa, l'intervallo di indirizzi VIP viene visualizzato
nelle risorse alias
e IPaddr2
. Per modificare l'indirizzo VIP,
devi aggiornare entrambe le risorse. Vedi l'esempio di seguito:
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
Nella console, verifica che l'indirizzo IP utilizzato con l'IP alias sia riservato. Può essere l'indirizzo IP utilizzato per l'IP alias o un nuovo indirizzo IP.
$
gcloud compute addresses list --filter="region:( cluster-region )"
Se l'indirizzo IP è riservato e allocato all'istanza VM principale,
il suo stato è indicato come IN_USE
. Quando riallochi
l'IP al tuo bilanciatore del carico, lo devi prima riposizionare dall'istanza principale
attiva, dopodiché lo stato cambia in RESERVED
.
Se l'indirizzo non è incluso negli indirizzi IP restituiti dal comando list, prenotalo ora per evitare conflitti di indirizzo 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
vengano visualizzati come RESERVED
.
Configurare il supporto per il failover di Cloud Load Balancing
Il servizio di bilanciamento del carico TCP/UDP interno con supporto del failover instrada il traffico all'host attivo in un cluster SAP HANA basato su un servizio di controllo di integrità.
Per evitare conflitti e consentire il test prima del completamento della migrazione, segui queste istruzioni per creare una regola di inoltro temporanea con un indirizzo IP segnaposto della stessa subnet dell'indirizzo VIP. Quando è tutto pronto per passare all'implementazione VIP, devi creare una nuova regola di inoltro 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 ospita attualmente il sistema SAP HANA attivo.
Apri Cloud Shell:
Prenota un indirizzo IP temporaneo per la stessa subnet dell'IP alias per scopi di test. Se ometti il flag
--addresses
, scegli un indirizzo IP nella subnet specificata:$
gcloud compute addresses create vip-name \ --region cluster-region --subnet cluster-subnet \ --addresses vip-addressPer ulteriori informazioni sulla prenotazione di un IP statico, vedi Prenotare un indirizzo IP interno statico.
Conferma la prenotazione dell'indirizzo IP:
$
gcloud compute addresses describe vip-name \ --region cluster-regionDovresti vedere un output simile all'esempio seguente:
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
Creare gruppi di istanze per le VM host
In Cloud Shell, crea due gruppi di istanze non gestite e assegna la VM host principale a una e la VM host secondaria all'altra:
$
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 all'esempio seguente:
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
Creare un controllo di integrità di Compute Engine
In Cloud Shell, crea il controllo di integrità. Per la porta utilizzata dal controllo di integrità, scegli una porta nell'intervallo privato 49152-65535, per evitare conflitti con altri servizi. I valori di controllo tra intervalli di timeout e timeout sono leggermente più lunghi rispetto ai 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 all'esempio seguente:
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 ulteriori informazioni, consulta la sezione Creare 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 viene 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 principali 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 secondarie e di failover 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 all'esterno dell'area geografica 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 ulteriori informazioni sull'accesso tra aree geografiche al tuo sistema ad alta disponibilità SAP HANA, vedi Bilanciamento del carico TCP/UDP interno.
Testa la configurazione del bilanciatore del carico
Anche se i gruppi di istanze di backend non si registrano come integri fino a un momento successivo, puoi testare la configurazione del bilanciatore del carico configurando un listener per rispondere ai controlli di integrità. Dopo aver configurato un listener, se il bilanciatore del carico è configurato correttamente, lo stato dei gruppi di istanze di backend passa a Integro.
Le seguenti sezioni presentano diversi metodi che puoi utilizzare per testare la configurazione.
Test del bilanciatore del carico con utilità socat
Puoi utilizzare l'utilità socat
per ascoltare temporaneamente la porta del controllo di integrità. Devi comunque installare l'socat
utilità, perché ti servirà in un secondo momento per la configurazione delle risorse del cluster.
Installa l'utilità
socat
su entrambe le VM host come root:#
zypper install -y socatAvvia un processo
socat
per rimanere in ascolto per 60 secondi sulla porta del controllo di integrità:#
timeout 60s socat - TCP-LISTEN:hlth-chk-port-num,forkIn Cloud Shell, dopo aver atteso alcuni secondi per consentire al controllo di integrità di rilevare il listener, controlla l'integrità dei gruppi di istanze 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 tramite 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 ha un listener che può 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 istanze 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, reimposta il numero di porta del controllo di integrità su quello originale.
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.
Prepara il sistema per la modifica
Se puoi, puoi interrompere la connessione dell'applicazione SAP al database SAP HANA, perché interrompi brevemente la connessione per scambiare gli indirizzi IP. I processi di lavoro di NetWeaver sono in grado di ristabilire una connessione con il database, ma potrebbero verificarsi errori o interruzioni del processo che impediscono la connessione. Assicurati che il tuo IP sia registrato in un intervallo interno che fa parte del tuo VPC nell'area geografica di destinazione.
Come root sull'istanza principale attiva, imposta il cluster in modalità di manutenzione:
$
crm configure property maintenance-mode="true"Esegui il backup della configurazione del cluster:
$
crm configure show > clusterconfig.backup
Individua l'IP alias
In Cloud Shell, verifica 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, aggiorna l'interfaccia di rete. Se non hai bisogno di 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 inoltro VIP e correggi
Nella console, crea una nuova regola di forwarding front-end per il bilanciatore del carico, specificando come indirizzo IP l'indirizzo IP precedentemente utilizzato per l'alias 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 per l'eliminazione temporanea:
$
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
Modifica la risorsa primitiva VIP nella configurazione del cluster
Modifica l'istanza principale come radice utilizzando la definizione di risorsa primitiva VIP. Se il cluster è stato creato dai modelli di Deployment Manager forniti da Google Cloud, il nome della risorsa primitiva VIP è
rsc_vip_gcp-primary
:$
crm configure edit rsc_nameLa definizione della risorsa si apre in un editor di testo, ad esempio vi.
Apporta le seguenti modifiche alla risorsa VIP nella configurazione del cluster HA del pacemaker:
- Sostituisci la classe della risorsa,
ocf:gcp:alias
conanything
- Modifica l'intervallo di
op monitor
ininterval=10s
- Modifica il timeout di
op monitor
intimeout=20s
- Rimuovi definizione dell'operazione
op start
eop stop
- Rimuovi
meta priority=10
- Sostituisci i parametri IP alias:
alias_ip="10.0.0.10/32" hostlist="example-ha-vm1 example-ha-vm2" gcloud_path="/usr/bin/gcloud" logging=yes
con i parametri del servizio per il controllo di integrità:binfile="/usr/bin/socat" cmdline_options="-U TCP-LISTEN:healthcheck-port-num,backlog=10,fork,reuseaddr /dev/null"
Ad esempio, sostituisci le voci in grassetto nell'esempio di IP alias seguente:
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
Una volta apportate le modifiche, la definizione delle risorse per il servizio di controllo di integrità dovrebbe essere simile all'esempio seguente:
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"
Nell'esempio precedente,
HC port
è la porta del controllo di integrità che hai specificato quando hai creato il controllo di integrità e configurato l'utilità socat.- Sostituisci la classe della risorsa,
Escludere il cluster dalla modalità di manutenzione:
$
crm configure property maintenance-mode="false"
Testa il cluster ad alta disponibilità aggiornato
Dall'istanza dell'applicazione, verifica di poter raggiungere il database eseguendo uno dei seguenti comandi:
Come utente
sidadm
:>
R3trans -dCome qualsiasi utente:
telnet VIP HANA SQL port
o
nc -zv VIP HANA SQL port