PowerFlex: Configuratie met hoge beschikbaarheid van de gateway kan een vertraging in het opdrachtrelais veroorzaken wanneer de primaire gateway niet beschikbaar is
Summary: API-automatisering aan de clientzijde of handmatige bewerkingen duren langer dan verwacht om via de secundaire gateway (GW) te voltooien dan via de primaire GW.
Symptoms
Zodra een failover van de primaire GW is uitgevoerd en aanvragen op de secundaire GW zijn ontvangen, duurt het verzenden van een aanvraag langer om de bewerking te voltooien.
Voorbeeldscenario:
- Een klant gebruikt Cinder (OpenStack) als een client-side applicatie voor back-end storagecommunicatie.
- Een gebruiker verzendt een API-aanvraag om een nieuw volume op het systeem te maken.
- De aanvraag wordt ontvangen op P-GW (primair), verzonden naar de MDM en het volume is gemaakt.
- De hele bewerking, van de client tot een succesvolle voltooiing, duurt X seconden (afhankelijk van het netwerk en de omgeving van de gebruiker).
- De gebruiker verzendt een UNMAP-aanvraag voor het zojuist gemaakte volume.
- GW-failover promoot S-GW (secundair) om aanvragen te ontvangen (failover kan handmatig worden uitgevoerd of als gevolg van het uitvallen van de service en/of het netwerk van de primaire).
- De gebruiker stuurt een nieuw API-verzoek om een nieuw volume op het systeem te maken.
- De aanvraag wordt ontvangen op S-GW, verzonden naar de MDM en het volume is gemaakt.
- De hele operatie van de client tot een succesvolle voltooiing duurt X+Y seconden.
Het voorbeeldscenario bestaat uit drie bewerkingen: "Create Volume", "Map Volume" en "Unmap Volume" worden na elkaar uitgevoerd.
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
Impact
API-automatisering of handmatige bewerkingen aan de clientzijde nemen meer tijd in beslag dan verwacht.
Cause
De PowerFlex-gateway, die wordt uitgevoerd op Apache Tomcat, bevat verschillende PowerFlex-functies, waaronder een REST-gateway, PowerFlex-installatieprogramma en SNMP-trap-afzender. Voor hoge beschikbaarheid wanneer twee Apache Tomcat-instanties (PowerFlex Gateway-servers) zijn geconfigureerd, gebruikt u Apache httpd. Om een single point of failure in de Apache httpd te voorkomen, kunt u een failover httpd-instantie gebruiken die is geclusterd met behulp van een van de vele beschikbare clusterstacks.
In de omgeving van een klant die RHEL gebruikt voor de GW's, gebruikt de juiste configuratie Keepalived en HAProxy.
Voor beide Apache httpd-servers wordt een gedeeld (virtueel) IP-adres gebruikt. Beide Apache httpd-servers hebben dezelfde configuratie, behalve dat de ene in de Keepalive-configuratie is gedefinieerd als de Primary, terwijl de andere is gedefinieerd als de Secundaire. Als de primaire mislukt, wordt de secundaire de primaire, wat betekent dat de gebruikers geen verlies van service merken.
In een RHEL/CentOS-omgeving bewaakt de Keepalive-service de PowerFlex Gateway-servers en bepaalt naar welke server de clientaanvraag moet worden doorgestuurd. HAProxy en Keepalived zijn geconfigureerd op RHEL/CentOS om PowerFlex Gateway van hoge beschikbaarheid te voorzien.
De Keepalived
Open-source tool wordt gebruikt voor de keep-alive-component en is verantwoordelijk voor het bewaken van de status van HAProxy en het configureren van het virtuele IP-adres indien nodig.
Voor meer informatie over Keepalived, zie http://www.keepalived.org.
De HAProxy
Open-source tool, die dient als load balancer voor de PowerFlex Gateway, de PowerFlex-systemen bewaakt en verkeer omleidt als een knooppunt uitvalt.
Voor meer informatie over HAProxy, zie http://www.haproxy.org.
De standaardconfiguratie van HAProxy is ingesteld op de secundaire GW wanneer u eigenaar bent van het virtuele IP-adres, om opnieuw te proberen het ontvangen API-verzoek naar het primaire te verzenden (de waarde "retries" is ingesteld op 3) en wanneer het niet beschikbaar is, om het vervolgens naar de backend (MDM) te verzenden.
Resolution
Zoals te zien is in de onderstaande voorbeeldconfiguratie van HAProxy, wordt de standaard HAProxy onder de Global settings is de waarde 'nieuwe pogingen' ingesteld op 3, wat betekent dat er drie keer gedurende één seconde wordt geprobeerd de opdrachten naar de primaire GW opnieuw uit te voeren.
Het doet de nieuwe aanroep naar de primaire GW omdat onder de backend siogateway wordt de waarde 'saldo' ingesteld op 'eerste', wat de primaire GW zou zijn.
Het wijzigen van de waarden voor 'mode' en 'option', en het toevoegen van 'server' kenmerken zijn ook van het grootste belang:
- De waarden 'mode' en 'option' moeten worden gewijzigd in respectievelijk 'http' en 'httpchk'.
- 'server'-kenmerken moeten worden toegevoegd met 'check fall 5 inter 2000 rise 2'.
Zodra de bovengenoemde waarden zijn gewijzigd en toegevoegd, neemt de latentie af of verdwijnt deze volledig.
De HAProxy-instellingen zijn afstembaar voor de omgevingsbehoeften van de klant. Als een klant zijn applicatieaanroepen sneller wil laten verlopen, kan hij de HAProxy-instellingen afstemmen op de bedrijfsbehoeften.
Default configuration file for HAProxy:
haproxy.cfg VOOR bewerken:
...
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 NA bewerken:
...
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