PowerFlex: La configurazione dell'high availability del gateway potrebbe causare un ritardo nell'inoltro dei comandi quando il gateway primario è inattivo
Summary: Il completamento dell'automazione delle API lato client o delle operazioni manuali sul gateway secondario (GW) richiede più tempo del previsto rispetto all'utilizzo del gateway primario. ...
Symptoms
Una volta eseguito il failover del GW primario e ricevute le richieste sul GW secondario, l'invio di una richiesta richiede più tempo per completare l'operazione.
Scenario di esempio:
- Un cliente utilizza Cinder (OpenStack) come applicazione lato client per la comunicazione dello storage back-end.
- Un utente invia una richiesta API per creare un nuovo volume sul sistema.
- La richiesta viene ricevuta su P-GW (primario), trasmessa all MDM e il volume viene creato correttamente.
- L'intera operazione dal client al completamento corretto richiede X secondi (a seconda della rete e dell'ambiente degli utenti).
- L'utente invia una richiesta UNMAP sul volume appena creato.
- Il failover GW promuove S-GW (secondario) a ricevere richieste (il failover può essere eseguito manualmente o a seguito dell'interruzione del servizio o della rete del primario o di entrambi).
- L'utente invia un'altra richiesta API per creare un nuovo volume sul sistema.
- La richiesta viene ricevuta su S-GW, trasmessa all MDM e il volume viene creato correttamente.
- L'intera operazione dal client al completamento corretto richiede X+Y secondi.
Lo scenario di esempio è costituito da tre operazioni: Le opzioni "Create Volume", "Map Volume" e "Unmap Volume" vengono eseguite una dopo l'altra.
P-GW
operations.log
2021-06-02 17:09:17,413 [https-jsse-nio-28443-exec-8] INFO audit - 1.1.1.1:/api/types/Volume/instances {volumeType=ThinProvisioned, name=9g/MBZDNTYioDl1bTD34cw==, storagePoolId=fa75c1c100000000, compressionMethod=Normal, protectionDomainId=0089dc6000000000, volumeSizeInKb=5242880}
2021-06-02 17:09:17,601 [https-jsse-nio-28443-exec-3] INFO audit - 1.1.1.1:/api/instances/Volume::5b273f9b00000005/action/addMappedSdc {guid=bb77b627-250b-457e-8a0b-fee221ceb941, allowMultipleMappings=TRUE}
2021-06-02 17:09:19,270 [https-jsse-nio-28443-exec-5] INFO audit - 1.1.1.1:/api/instances/Volume::5b273f9b00000005/action/removeMappedSdc {guid=bb77b627-250b-457e-8a0b-fee221ceb941}
cinder-volume.log
2021-06-02 17:09:17.428 136 DEBUG cinder.volume.drivers.dell_emc.powerflex.rest_client [req-747562dc-0abd-472f-bff4-f739c52d88d2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] REST Request: https://1.1.1.254:443/api/types/Volume/instances with params {"protectionDomainId": "0089dc6000000000", "storagePoolId": "fa75c1c100000000", "name": "9g/MBZDNTYioDl1bTD34cw==", "volumeType": "ThinProvisioned", "volumeSizeInKb": "5242880", "compressionMethod": "Normal"} _check_response /usr/lib/python3.6/site-packages/cinder/volume/drivers/dell_emc/powerflex/rest_client.py:518
2021-06-02 17:09:17.559 136 INFO os_brick.initiator.connectors.scaleio [req-747562dc-0abd-472f-bff4-f739c52d88d2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] map volume request: https://1.1.1.254:443/api/instances/Volume::5b273f9b00000005/action/addMappedSdc
2021-06-02 17:09:19.241 136 INFO os_brick.initiator.connectors.scaleio [req-747562dc-0abd-472f-bff4-f739c52d88d2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] Unmap volume request: https://1.1.1.254:443/api/instances/Volume::5b273f9b00000005/action/removeMappedSdc
S-GW
operations.log
2021-06-02 16:55:00,452 [https-jsse-nio-28443-exec-9] INFO audit - 1.1.1.2:/api/types/Volume/instances {volumeType=ThinProvisioned, name=Ik6i/JD8TeKrTHtUg9HQrw==, storagePoolId=fa75c1c100000000, compressionMethod=Normal, protectionDomainId=0089dc6000000000, volumeSizeInKb=5242880}
2021-06-02 16:55:09,665 [https-jsse-nio-28443-exec-4] INFO audit - 1.1.1.2:/api/instances/Volume::5b273f9a00000004/action/addMappedSdc {guid=bb77b627-250b-457e-8a0b-fee221ceb941, allowMultipleMappings=TRUE}
2021-06-02 16:55:20,373 [https-jsse-nio-28443-exec-9] INFO audit - 1.1.1.2:/api/instances/Volume::5b273f9a00000004/action/removeMappedSdc {guid=bb77b627-250b-457e-8a0b-fee221ceb941}
cinder-volume.log
2021-06-02 16:55:00.461 136 DEBUG cinder.volume.drivers.dell_emc.powerflex.rest_client [req-ece34b6a-497f-4826-9c47-13f76773eaf2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] REST Request: https://1.1.1.254:443/api/types/Volume/instances with params {"protectionDomainId": "0089dc6000000000", "storagePoolId": "fa75c1c100000000", "name": "Ik6i/JD8TeKrTHtUg9HQrw==", "volumeType": "ThinProvisioned", "volumeSizeInKb": "5242880", "compressionMethod": "Normal"} _check_response /usr/lib/python3.6/site-packages/cinder/volume/drivers/dell_emc/powerflex/rest_client.py:518
2021-06-02 16:55:00.594 136 INFO os_brick.initiator.connectors.scaleio [req-ece34b6a-497f-4826-9c47-13f76773eaf2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] map volume request: https://1.1.1.254:443/api/instances/Volume::5b273f9a00000004/action/addMappedSdc
2021-06-02 16:55:11.320 136 INFO os_brick.initiator.connectors.scaleio [req-ece34b6a-497f-4826-9c47-13f76773eaf2 8561f3a4fa914f0283bebe844eaae9ff 16f473111d914314aba5f4a3870a1ec7 - default default] Unmap volume request: https://1.1.1.254:443/api/instances/Volume::5b273f9a00000004/action/removeMappedSdc
Impatto
L'automazione delle API lato client o le operazioni manuali richiedono più tempo del previsto per il completamento.
Cause
Il gateway PowerFlex, che viene eseguito su Apache Tomcat, ospita diverse funzioni di PowerFlex, tra cui un gateway REST, il programma di installazione di PowerFlex e il sender di trap SNMP. Per garantire la high availability quando sono configurate due istanze Apache Tomcat (server gateway PowerFlex), utilizzare Apache httpd. Per evitare un singolo punto di errore in httpd Apache, è possibile utilizzare un'istanza httpd di failover in cluster utilizzando uno dei numerosi stack di clustering disponibili.
Nell'ambiente di un cliente che utilizza RHEL per i GW, la configurazione corretta utilizza Keepalived e HAProxy.
Un indirizzo IP condiviso (virtuale) viene utilizzato per entrambi i server httpd Apache. Entrambi i server httpd Apache hanno la stessa configurazione, tranne per il fatto che uno è definito nella configurazione Keepalived come primario, mentre l'altro è definito come secondario. In caso di guasto del server primario, il database secondario diventa il principale, il che significa che gli utenti non notano alcuna perdita di servizio.
In un'ambiente RHEL/CentOS, il servizio Keepalived monitora i server gateway PowerFlex e determina a quale server inoltrare la richiesta del client. HAProxy e Keepalived sono configurati su RHEL/CentOS per fornire high availability al gateway PowerFlex.
Il Keepalived
Strumento open source viene utilizzato per il componente keep-alive ed è responsabile del monitoraggio dello stato di HAProxy e della configurazione dell'indirizzo IP virtuale in base alle esigenze.
Per ulteriori informazioni su Keepalived, vedere http://www.keepalived.org.
L'HAProxy
Strumento open source, che funge da bilanciatore del carico per il gateway PowerFlex, monitora i sistemi PowerFlex e reindirizza il traffico in caso di interruzione di un nodo.
Per ulteriori informazioni su HAProxy, vedere http://www.haproxy.org.
La configurazione predefinita di HAProxy è impostata per avere il GW secondario quando si possiede l'IP virtuale, per riprovare a trasmettere la richiesta API ricevuta al primario (il valore "retries" è impostato su 3) e, quando è inattivo, per procedere all'invio al back-end (MDM).
Resolution
Come si può vedere nella configurazione HAProxy di esempio riportata di seguito, l'HAProxy predefinito sotto il Global settings , il valore 'retries' è impostato su 3, il che significa che tenta di riprovare i comandi al GW primario tre volte per un secondo ciascuno.
Esegue la richiamata dei tentativi al GW primario perché sotto il backend siogateway , il valore di 'bilanciamento' è impostato su 'primo', che sarebbe il GW primario.
Anche la modifica dei valori per 'mode' e 'option' e l'aggiunta delle caratteristiche 'server' sono della massima importanza:
- I valori 'mode' e 'option' devono essere modificati rispettivamente in 'http' e 'httpchk'.
- Le caratteristiche «server» devono essere aggiunte con «check fall 5 inter 2000 rise 2».
Una volta modificati e aggiunti i valori sopra menzionati, la latenza diminuisce se non scompare completamente.
Le impostazioni HAProxy sono regolabili in base alle esigenze ambientali dei clienti. Se un cliente ha bisogno di chiamate all'applicazione più veloci, può ottimizzare le impostazioni HAProxy per adattarle alle proprie esigenze aziendali.
File di configurazione predefinito per HAProxy:
haproxy.cfg PRIMA della modifica:
...
defaults
retries 3
...
backend powerflexgateway
mode tcp
balance first
option ssl-hello-chk
server gateway1 1.1.1.1:28443 maxconn 256 ssl verify none
server gateway2 1.1.1.2:28443 maxconn 256 ssl verify none
haproxy.cfg DOPO la modifica:
...
defaults
retries 1
...
backend powerflexgateway
mode http
balance first
option httpchk
server gateway1 1.1.1.1:28443 maxconn 256 ssl verify none check fall 5 inter 2000 rise 2
server gateway2 1.1.1.2:28443 maxconn 256 ssl verify none check fall 5 inter 2000 rise 2