PowerFlex: Konfigurace vysoké dostupnosti brány může způsobit zpoždění při předávání příkazů, když je primární brána mimo provoz
Summary: Automatizace rozhraní API na straně klienta nebo ruční operace trvají déle než očekávaně prostřednictvím sekundární brány (GW) než prostřednictvím primárního GW.
Symptoms
Jakmile dojde k převzetí služeb při selhání primárního GW a obdrží požadavky na sekundární GW, trvá odeslání požadavku déle než dokončení operace.
Příklad scénáře:
- Zákazník používá Cinder (OpenStack) jako aplikaci na straně klienta pro komunikaci backendového úložiště.
- Uživatel odešle požadavek API na vytvoření nového svazku v systému.
- Požadavek je přijat na P-GW (primární), přenesen do uzlu MDM a svazek je úspěšně vytvořen.
- Celá operace od klienta k úspěšnému dokončení trvá X sekund (v závislosti na síti a prostředí uživatele).
- Uživatel odešle požadavek UNMAP na nově vytvořený svazek.
- Převzetí služeb při selhání GW podporuje S-GW (sekundární) pro příjem požadavků (převzetí služeb při selhání je možné provést ručně nebo v důsledku výpadku služby nebo sítě primárního serveru).
- Uživatel odešle další požadavek API na vytvoření nového svazku v systému.
- Požadavek je přijat na S-GW, přenesen do uzlu MDM a svazek je úspěšně vytvořen.
- Celá operace od klienta k úspěšnému dokončení trvá X+Y sekund.
Ukázkový scénář se skládá ze tří operací: Příkazy "Create Volume", "Map Volume" a "Unmap Volume" se spouštějí jeden po druhém.
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
Důsledky
Automatizace rozhraní API na straně klienta nebo ruční operace trvají déle, než se očekávalo.
Cause
Brána PowerFlex, která běží na systému Apache Tomcat, obsahuje několik funkcí PowerFlex, včetně brány REST, instalačního programu PowerFlex a odesílatele depeší SNMP. Pro zajištění vysoké dostupnosti při konfiguraci dvou instancí Apache Tomcat (servery PowerFlex Gateway) použijte Apache httpd. Chcete-li zabránit jedinému bodu selhání v Apache httpd, můžete použít instanci httpd s podporou převzetí služeb při selhání, která je clusterovaná pomocí jednoho z mnoha dostupných zásobníků clusteringu.
V prostředí zákazníka, které používá RHEL pro GW, správná konfigurace používá Keepalive a HAProxy.
Sdílená (virtuální) IP adresa se používá pro oba httpd servery Apache. Oba servery Apache httpd mají stejnou konfiguraci s tím rozdílem, že jeden je definován v konfiguraci Keepalive jako primární, zatímco druhý je definován jako sekundární. Pokud primární selže, sekundární se stane primárním, což znamená, že uživatelé nezaznamenají žádnou ztrátu služby.
V prostředí RHEL/CentOS služba Keepalive monitoruje servery brány PowerFlex a určuje, na který server se má požadavek klienta předat. HAProxy a Keepalive jsou nakonfigurovány na RHEL/CentOS, aby poskytovaly bráně PowerFlex Gateway vysokou dostupnost.
Ochránce
opensourcový nástroj používá se pro komponentu keep-alive a je zodpovědný za monitorování stavu HAProxy a konfiguraci virtuální IP adresy podle potřeby.
Další informace o Keepalived najdete v http://www.keepalived.org.
The HAProxy
opensourcový nástroj, který slouží jako nástroj pro vyrovnávání zatížení pro bránu PowerFlex, monitoruje systémy PowerFlex a přesměrovává provoz v případě výpadku uzlu.
Další informace o HAProxy naleznete v http://www.haproxy.org.
Výchozí konfigurace HAProxy je nastavena tak, aby měla sekundární GW při vlastnictví virtuální IP adresy, aby se znovu pokusila přenést přijatý požadavek API na primární adresu (hodnota "retries" je nastavena na 3), a když je mimo provoz, aby pokračovala v jeho odeslání do backendu (MDM).
Resolution
Jak je vidět v příkladu konfigurace HAProxy níže, výchozí HAProxy pod Global settings je hodnota "retries" nastavená na 3, což znamená, že se pokusí zopakovat příkazy do primárního GW třikrát po dobu jedné sekundy.
Provede opakované volání primárního GW, protože v rámci backend siogateway je hodnota "zůstatku" nastavena na "první", což by byla primární GW.
Změna hodnot pro 'mode' a 'option' a přidání 'serverových' charakteristik je také nanejvýš důležité:
- Hodnoty "mode" a "option" by měly být změněny na "http" a "httpchk".
- Charakteristiky "serveru" by měly být přidány spolu s "Check Fall 5 Inter 2000 RISE 2".
Po změně a přidání výše uvedených hodnot se latence sníží, ne-li zcela zmizí.
Nastavení HAProxy jsou laditelná pro potřeby prostředí zákazníků. Pokud zákazník potřebuje, aby volání jeho aplikací bylo rychlejší, může vyladit nastavení HAProxy tak, aby vyhovovalo jeho obchodním potřebám.
Výchozí konfigurační soubor pro HAProxy:
haproxy.cfg PŘED úpravou:
...
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 PO úpravě:
...
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