PowerFlex: La configuración de alta disponibilidad de gateway puede causar un retraso en Command Relay cuando el gateway primario está inactivo
Summary: La automatización de la API del lado del cliente o las operaciones manuales tardan más de lo esperado en completarse a través de la puerta de enlace secundaria (GW) que a través de la GW primaria. ...
Symptoms
Una vez que se realiza la conmutación por error del GW primario y se reciben solicitudes en el GW secundario, el envío de una solicitud tarda más en completar la operación.
Escenario de ejemplo:
- Un cliente utiliza Cinder (OpenStack) como una aplicación del lado del cliente para la comunicación de almacenamiento de back-end.
- Un usuario envía una solicitud de API para crear un nuevo volumen en el sistema.
- La solicitud se recibe en P-GW (principal), se transmite al MDM y el volumen se crea correctamente.
- Toda la operación desde el cliente hasta su finalización correcta tarda X segundos (según la red y el entorno de los usuarios).
- El usuario envía una solicitud UNMAP en el volumen recién creado.
- La conmutación por error de GW promueve S-GW (secundario) para recibir solicitudes (la conmutación por error se puede realizar manualmente o como resultado de la caída del servicio o la red del principal, o de ambos).
- El usuario envía otra solicitud de API para crear un nuevo volumen en el sistema.
- La solicitud se recibe en S-GW, se transmite al MDM y el volumen se crea correctamente.
- Toda la operación desde el cliente hasta su finalización correcta tarda X + Y segundos.
El escenario de ejemplo consta de tres operaciones: "Create Volume", "Map Volume" y "Unmap Volume" se ejecutan uno tras otro.
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
Impacto
La automatización de API del lado del cliente o las operaciones manuales tardan más de lo esperado en completarse.
Cause
El gateway de PowerFlex, que se ejecuta en Apache Tomcat, aloja varias características de PowerFlex, incluido un gateway REST, un instalador de PowerFlex y un remitente de capturas SNMP. Para obtener alta disponibilidad, cuando se configuran dos instancias de Apache Tomcat (servidores de gateway de PowerFlex), utilice Apache httpd. Para evitar un punto único de falla en Apache httpd, puede usar una instancia de httpd de conmutación por error que se agrupa en clústeres mediante una de las muchas pilas de agrupación en clústeres disponibles.
En el entorno de un cliente que utiliza RHEL para los GW, la configuración correcta utiliza Keepalived y HAProxy.
Se utiliza una dirección IP compartida (virtual) para ambos servidores Apache httpd. Ambos servidores Apache httpd tienen la misma configuración, excepto que uno se define en la configuración de Keepalived como primario, mientras que el otro se define como secundario. Si falla la principal, la secundaria se convierte en la principal, lo que significa que los usuarios no notan ninguna pérdida de servicio.
En un entorno RHEL/CentOS, el servicio Keepalived monitorea los servidores del gateway de PowerFlex y determina a qué servidor reenviar la solicitud del cliente. HAProxy y Keepalived están configurados en RHEL/CentOS para proporcionar alta disponibilidad al gateway de PowerFlex.
El Keepalived
Herramienta de código abierto se utiliza para el componente keep-alive y es responsable de monitorear el estado de HAProxy y configurar la dirección IP virtual según sea necesario.
Para obtener más información sobre Keepalived, consulte http://www.keepalived.org.
El HAProxy
Herramienta de código abierto, que sirve como balanceador de carga para el gateway de PowerFlex, monitorea los sistemas PowerFlex y redirige el tráfico si un nodo deja de funcionar.
Para obtener más información sobre HAProxy, consulte http://www.haproxy.org.
La configuración predeterminada de HAProxy está configurada para tener el GW secundario cuando se posee la IP virtual, para volver a intentar transmitir la solicitud de API recibida al principal (el valor de "reintentos" se establece en 3) y, cuando está inactivo, para proceder a enviarla al backend (MDM).
Resolution
Como se puede ver en el ejemplo de configuración de HAProxy que aparece a continuación, el HAProxy predeterminado en el atributo Global settings , el valor de 'retries' se establece en 3, lo que significa que intenta volver a intentar los comandos al GW principal tres veces durante un segundo cada uno.
Realiza la llamada de reintento al GW primario porque bajo el backend siogateway , el valor de 'balance' se establece en 'first', que sería el GW primario.
Cambiar los valores de 'modo' y 'opción', y agregar características de 'servidor' también es de suma importancia:
- Los valores de 'modo' y 'opción' deben cambiarse a 'http' y 'httpchk', respectivamente.
- Las características del 'servidor' deben añadirse con 'check fall 5 inter 2000 rise 2'.
Una vez que se cambian y suman los valores mencionados anteriormente, la latencia disminuye, si no desaparece por completo.
Los ajustes de HAProxy se adaptan a las necesidades medioambientales de los clientes. Si un cliente necesita que sus llamadas a la aplicación sean más rápidas, puede ajustar la configuración de HAProxy para que se adapte a las necesidades de su negocio.
Archivo de configuración predeterminado para HAProxy:
haproxy.cfg ANTES de editar:
...
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 DESPUÉS de editar:
...
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