PowerFlex: 게이트웨이 고가용성 구성으로 인해 기본 게이트웨이가 다운된 경우 명령 릴레이에서 지연이 발생할 수 있음
Summary: 클라이언트 쪽 API 자동화 또는 수동 작업은 기본 GW를 통하는 것보다 GW(보조 게이트웨이)를 통해 완료하는 데 예상보다 오래 걸립니다.
Symptoms
기본 GW가 장애 조치(failover)되고 보조 GW에서 요청을 수신하면 요청을 보내는 데 작업을 완료하는 데 시간이 더 오래 걸립니다.
예제 시나리오:
- 고객이 Cinder(OpenStack)를 백엔드 스토리지 통신을 위한 클라이언트 측 애플리케이션으로 사용하고 있습니다.
- 사용자가 시스템에 새 볼륨을 생성하기 위해 API 요청을 보냅니다.
- P-GW(Primary)에서 요청이 수신되어 MDM으로 전송되고 볼륨이 성공적으로 생성됩니다.
- 클라이언트에서 성공적인 완료까지의 전체 작업은 X초가 걸립니다(사용자의 네트워크 및 환경에 따라 다름).
- 사용자가 새로 생성된 볼륨에 UNMAP 요청을 보냅니다.
- GW 페일오버는 S-GW(보조)가 요청을 수신하도록 승격합니다(페일오버는 수동으로 수행하거나 기본 서비스나 네트워크 또는 둘 다 다운된 결과로 수행할 수 있음).
- 사용자가 시스템에 새 볼륨을 생성하기 위해 다른 API 요청을 보냅니다.
- 요청이 S-GW에서 수신되고 MDM으로 전송되며 볼륨이 성공적으로 생성됩니다.
- 클라이언트에서 성공적인 완료까지의 전체 작업은 X+Y초가 걸립니다.
예제 시나리오는 다음 세 가지 작업으로 구성됩니다. "Create Volume", "Map Volume", "Unmap Volume"이 차례로 실행됩니다.
P-개릴라지(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
영향
클라이언트 쪽 API 자동화 또는 수동 작업을 완료하는 데 예상보다 오래 걸립니다.
Cause
Apache Tomcat에서 실행되는 PowerFlex Gateway는 REST 게이트웨이, PowerFlex 설치 프로그램, SNMP 트랩 발신자를 비롯한 여러 PowerFlex 기능을 호스팅합니다. 두 개의 Apache Tomcat 인스턴스(PowerFlex Gateway 서버)가 구성된 경우 고가용성을 위해 Apache httpd를 사용합니다. Apache httpd에서 단일 장애 지점을 방지하기 위해 사용 가능한 여러 클러스터링 스택 중 하나를 사용하여 클러스터링된 장애 조치 httpd 인스턴스를 사용할 수 있습니다.
GW에 RHEL을 사용하는 고객 환경에서 올바른 구성은 Keepalived 및 HAProxy를 사용합니다.
공유(가상) IP 주소는 Apache httpd 서버 모두에 사용됩니다. 두 Apache httpd 서버는 모두 구성이 동일하지만 하나는 Keepalive 구성에서 기본으로 정의되고 다른 하나는 보조로 정의됩니다. 기본이 실패하면 보조가 기본이 되므로 사용자는 서비스 손실을 느끼지 못합니다.
RHEL/CentOS 환경에서 Keepalived 서비스는 PowerFlex Gateway 서버를 모니터링하고 클라이언트 요청을 전달할 대상 서버를 결정합니다. HAProxy 및 Keepalived는 RHEL/CentOS에서 PowerFlex Gateway에 고가용성을 제공하도록 구성됩니다.
더 키팔리브(The Keepalived)
오픈 소스 툴 는 keep-alive 구성 요소에 사용되며 HAProxy의 상태를 모니터링하고 필요에 따라 가상 IP 주소를 구성하는 작업을 담당합니다.
Keepalived에 대한 자세한 내용은 http://www.keepalived.org 를 참조하세요.
The HAProxy
오픈 소스 툴PowerFlex Gateway의 로드 밸런싱 장치 역할을 하는 는 PowerFlex 시스템을 모니터링하고 노드가 다운되면 트래픽을 리디렉션합니다.
HAProxy에 대한 자세한 내용은 http://www.haproxy.org 를 참조하세요.
HAProxy의 기본 구성은 가상 IP를 소유할 때 보조 GW를 갖고, 수신된 API 요청을 기본 서버로 전송을 다시 시도하고("retries" 값이 3으로 설정됨), 중단된 경우 백엔드(MDM)로 전송을 진행하도록 설정됩니다.
Resolution
아래의 HAProxy 구성 예에서 볼 수 있듯이 Global settings 섹션에서 'retries' 값은 3으로 설정되며, 이는 각각 1초 동안 기본 GW에 대한 명령을 세 번 다시 시도하려고 시도함을 의미합니다.
기본 GW에 대한 재시도 호출을 수행합니다. backend siogateway 섹션에서 'balance' 값은 'first'로 설정되며, 이는 기본 GW가 됩니다.
'mode' 및 'option' 의 값을 변경하고 'server' 특성을 추가하는 것도 가장 중요하지 않습니다.
- 'mode' 와 'option' 값은 각각 'http'와 'httpchk'로 변경해야 합니다.
- '서버' 특성은 'Check Fall 5 Inter 2000 Rise 2'로 추가해야 합니다.
위에서 언급한 값이 변경되고 추가되면 완전히 사라지지는 않더라도 대기 시간이 줄어듭니다.
HAProxy 설정은 고객의 환경 요구 사항에 맞게 조정할 수 있습니다. 고객이 애플리케이션 호출을 더 빠르게 수행하기를 원하는 경우 비즈니스 요구 사항에 맞게 HAProxy 설정을 조정할 수 있습니다.
HAProxy의 기본 구성 파일:
haproxy.cfg 편집하기 전에 :
...
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 편집 후 :
...
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