PowerFlex: Die Konfiguration der hohen Verfügbarkeit des Gateways kann zu einer Verzögerung des Befehlsrelais führen, wenn das primäre Gateway ausgefallen ist
Summary: Clientseitige API-Automatisierung oder manuelle Vorgänge dauern länger als erwartet über das sekundäre Gateway (GW) als über das primäre GW.
Symptoms
Sobald ein Failover der primären Gateway-Instanz durchgeführt wurde und Anforderungen auf der sekundären Storage-Instanz eingehen, dauert das Senden einer Anforderung länger, um den Vorgang abzuschließen.
Beispielszenario:
- Ein Kunde verwendet Cinder (OpenStack) als clientseitige Anwendung für die Back-end-Storage-Kommunikation.
- Ein Nutzer sendet eine API-Anforderung, um ein neues Volume auf dem System zu erstellen.
- Die Anforderung wird auf P-GW (Primary) empfangen, an den MDM übertragen und das Volume wird erfolgreich erstellt.
- Der gesamte Vorgang vom Client bis zum erfolgreichen Abschluss dauert X Sekunden (abhängig vom Netzwerk und der Umgebung des Benutzers).
- Der Nutzer sendet eine UNMAP-Anforderung an das neu erstellte Volume.
- Beim GW-Failover wird S-GW (sekundär) auf den Empfang von Anforderungen hochgestuft (das Failover kann manuell oder als Ergebnis eines Ausfalls des Dienstes oder Netzwerks des primären Server oder beider erfolgen).
- Der Nutzer sendet eine weitere API-Anforderung, um ein neues Volume auf dem System zu erstellen.
- Die Anforderung wird auf S-GW empfangen, an den MDM übertragen und das Volume wird erfolgreich erstellt.
- Der gesamte Vorgang vom Client bis zum erfolgreichen Abschluss dauert X+Y Sekunden.
Das Beispielszenario besteht aus drei Vorgängen: "Create Volume", "Map Volume" und "Unmap Volume" werden nacheinander ausgeführt.
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
Auswirkungen
Die clientseitige API-Automatisierung oder manuelle Vorgänge dauern länger als erwartet.
Cause
Das PowerFlex Gateway, das auf Apache Tomcat ausgeführt wird, hostet mehrere PowerFlex-Funktionen, einschließlich eines REST-Gateways, des PowerFlex-Installationsprogramms und des SNMP-Trap-Senders. Wenn zwei Apache Tomcat-Instanzen (PowerFlex Gateway-Server) konfiguriert sind, verwenden Sie für hohe Verfügbarkeit Apache httpd. Um einen Single Point of Failure in Apache HTTPD zu verhindern, können Sie eine Failover-HTTPD-Instanz verwenden, die mit einem der vielen verfügbaren Clustering-Stacks geclustert wird.
In der Umgebung eines Kunden, die RHEL für die Storage-Kanäle verwendet, verwendet die richtige Konfiguration Keepalived und HAProxy.
Eine gemeinsame (virtuelle) IP-Adresse wird für beide Apache httpd-Server verwendet. Beide Apache HTTPD-Server haben die gleiche Konfiguration, mit der Ausnahme, dass einer in der Keepawed-Konfiguration als primärer Server definiert ist, während der andere als sekundärer Server definiert ist. Wenn der primäre Server ausfällt, wird der sekundäre zum primären Server, was bedeutet, dass die Nutzer keinen Serviceverlust bemerken.
In einer RHEL/CentOS-Umgebung überwacht der Keepalive-Service die PowerFlex Gateway -Server und bestimmt, an welchen Server die Clientanfrage weitergeleitet werden soll. HAProxy und Keepalived werden unter RHEL/CentOS konfiguriert, um PowerFlex Gateway hohe Verfügbarkeit zu bieten.
Die Keepalived
Open-Source-Tool wird für die Keep-Alive-Komponente verwendet und ist für die Überwachung des Status von HAProxy und die Konfiguration der virtuellen IP-Adresse nach Bedarf verantwortlich.
Weitere Informationen zu Keepalived finden Sie unter http://www.keepalived.org.
Der HAProxy
Open-Source-Tool, der als Load Balancer für das PowerFlex Gateway dient, überwacht die PowerFlex-Systeme und leitet den Datenverkehr um, wenn ein Node ausfällt.
Weitere Informationen zu HAProxy finden Sie unter http://www.haproxy.org.
Die Standardkonfiguration von HAProxy ist so festgelegt, dass der sekundäre GW beim Besitz der virtuellen IP erneut versucht, die empfangene API-Anforderung an den primären zu übertragen (der Wert "retries" ist auf 3 festgelegt) und wenn er ausgefallen ist, um sie an das Backend (MDM) zu senden.
Resolution
Wie in der Beispiel-HAProxy-Konfiguration unten zu sehen ist, ist der Standard-HAProxy unter dem Global settings wird der Wert für 'retries' auf 3 gesetzt, was bedeutet, dass versucht wird, die Befehle an das primäre Gateway dreimal für jeweils eine Sekunde zu wiederholen.
Er führt den Wiederholungsaufruf an das primäre Gateway durch, da unter dem backend siogateway wird der Wert "balance" auf "first" gesetzt, was dem primären GW entspricht.
Das Ändern der Werte für 'mode' und 'option' und das Hinzufügen von 'server'-Merkmalen sind ebenfalls von größter Wichtigkeit:
- Die Werte "mode" und "option" sollten in "http" bzw. "httpchk" geändert werden.
- Die Merkmale "Server" sollten mit "check Fall 5 Inter 2000 RISE 2" ergänzt werden.
Sobald die oben genannten Werte geändert und hinzugefügt werden, verringert sich die Latenz, wenn nicht sogar vollständig.
Die HAProxy-Einstellungen können an die Umgebungsanforderungen des Kunden angepasst werden. Wenn ein Kunde seine Anwendungsaufrufe beschleunigen muss, kann er die HAProxy-Einstellungen an seine Geschäftsanforderungen anpassen.
Standardkonfigurationsdatei für HAProxy:
haproxy.cfg VOR der Bearbeitung:
...
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 NACH der Bearbeitung:
...
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