PowerFlex: Konfiguracja wysokiej dostępności bramki może powodować opóźnienie przekazywania poleceń, gdy brama podstawowa jest wyłączona
Summary: Automatyzacja interfejsu API po stronie klienta lub operacje ręczne trwają dłużej niż oczekiwano za pośrednictwem bramy pomocniczej (GW) niż za pośrednictwem podstawowej GW.
Symptoms
Gdy główny GW zostanie przełączony w tryb failover i otrzyma żądania w dodatkowym GW, wysłanie żądania trwa dłużej, aby ukończyć operację.
Przykładowy scenariusz:
- Klient używa Cinder (OpenStack) jako aplikacji po stronie klienta do komunikacji z pamięcią masową zaplecza.
- Użytkownik wysyła żądanie interfejsu API w celu utworzenia nowego woluminu w systemie.
- Żądanie jest odbierane przez P-GW (podstawowe), przesyłane do MDM, a wolumin jest tworzony pomyślnie.
- Cała operacja od klienta do pomyślnego zakończenia zajmuje X sekund (w zależności od sieci i środowiska użytkowników).
- Użytkownik wysyła żądanie UNMAP dla nowo utworzonego woluminu.
- Przełączanie awaryjne GW promuje S-GW (dodatkowe) do odbierania żądań (przełączanie awaryjne można wykonać ręcznie lub w wyniku awarii usługi lub sieci podstawowej).
- Użytkownik wysyła kolejne żądanie interfejsu API, aby utworzyć nowy wolumin w systemie.
- Żądanie jest odbierane na S-GW, przesyłane do MDM, a wolumin zostaje pomyślnie utworzony.
- Cała operacja od klienta do pomyślnego zakończenia zajmuje X+Y sekund.
Przykładowy scenariusz składa się z trzech operacji: Polecenia "Create Volume", "Map Volume" i "Unmap Volume" są uruchamiane jeden po drugim.
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
Wpływ
Automatyzacja interfejsu API po stronie klienta lub operacje ręczne trwają dłużej niż oczekiwano.
Cause
Brama PowerFlex, która działa na serwerze Apache Tomcat, obsługuje kilka funkcji PowerFlex, w tym bramę REST, instalator PowerFlex i nadawcę pułapek SNMP. Aby zapewnić wysoką dostępność, gdy skonfigurowane są dwie instancje Apache Tomcat (serwery PowerFlex Gateway), należy użyć protokołu Apache httpd. Aby zapobiec pojedynczemu punktowi awarii w Apache httpd, można użyć wystąpienia httpd trybu failover, które jest klastrowane przy użyciu jednego z wielu dostępnych stosów klastrowania.
W środowisku klienta, który używa RHEL dla GW, prawidłowa konfiguracja używa Keepalived i HAProxy.
Współdzielony (wirtualny) adres IP jest używany dla obu serwerów httpd Apache. Oba serwery httpd Apache mają taką samą konfigurację, z tą różnicą, że jeden jest zdefiniowany w konfiguracji Keepalived jako podstawowy, podczas gdy drugi jest zdefiniowany jako dodatkowy. Jeśli podstawowy ulegnie awarii, dodatkowy staje się podstawowym, co oznacza, że użytkownicy nie zauważą żadnej utraty usługi.
W środowisku RHEL/CentOS usługa Keepalived monitoruje serwery bramy PowerFlex i określa, do którego serwera należy przekazać żądanie klienta. HAProxy i Keepalived są skonfigurowane na systemie RHEL/CentOS w celu zapewnienia wysokiej dostępności bramy PowerFlex.
Rodzina Keepalived
Narzędzie typu open source jest używany dla komponentu keep-alive i jest odpowiedzialny za monitorowanie stanu HAProxy i konfigurowanie wirtualnego adresu IP w razie potrzeby.
Aby uzyskać więcej informacji na temat funkcji Keepalived, zobacz http://www.keepalived.org.
W ramach projektu HAProxy
Narzędzie typu open source, który służy jako moduł równoważenia obciążenia bramy PowerFlex, monitoruje systemy PowerFlex i przekierowuje ruch w przypadku awarii węzła.
Aby uzyskać więcej informacji na temat systemu HAProxy, zobacz http://www.haproxy.org.
Domyślna konfiguracja HAProxy jest ustawiona tak, aby mieć dodatkowy GW, gdy jest właścicielem wirtualnego adresu IP, aby ponowić próbę przesłania odebranego żądania API do podstawowego (wartość "ponawia" jest ustawiona na 3), a gdy jest wyłączony, aby przejść do wysłania go do zaplecza (MDM).
Resolution
Jak widać na przykładowej konfiguracji HAProxy poniżej, domyślny HAProxy pod Global settings wartość "ponawia" jest ustawiona na 3, co oznacza, że próbuje ponowić wykonanie poleceń do głównego GW trzy razy po jednej sekundzie.
Wykonuje ponowną próbę wywołania podstawowej GW, ponieważ w sekcji backend siogateway wartość "saldo" jest ustawiona na "pierwszą", która byłaby głównym GW.
Zmiana wartości dla 'mode' i 'option' oraz dodanie charakterystyki 'server' również nie ma większego znaczenia:
- Wartości "mode" i "option" należy zmienić odpowiednio na "http" i "httpchk".
- Charakterystyka "serwera" powinna być dodana za pomocą "check fall 5 inter 2000 rise 2".
Po zmianie i dodaniu wyżej wymienionych wartości opóźnienie zmniejsza się, jeśli nie znika całkowicie.
Ustawienia HAProxy można dostosować do potrzeb środowiskowych klientów. Jeśli klient chce, aby wywołania aplikacji były szybsze, może dostroić ustawienia HAProxy do swoich potrzeb biznesowych.
Domyślny plik konfiguracyjny dla HAProxy:
haproxy.cfg PRZED edycją:
...
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 edycji:
...
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