PowerFlex:当主网关关闭时,网关高可用性配置可能会导致命令中继延迟
Summary: 与通过主网关 GW 相比,通过辅助网关 (GW) 完成客户端 API 自动化或手动作所需的时间比预期的要长。
Symptoms
主 GW 故障切换并在次要 GW 上收到请求后,发送请求需要更长时间才能完成作。
示例情景:
- 客户使用 Cinder (OpenStack) 作为客户端应用程序进行后端存储通信。
- 用户发送 API 请求以在系统上创建新卷。
- 请求在 P-GW(主)上接收,传输到 MDM,并成功创建卷。
- 从客户端到成功完成的整个作过程需要 X 秒(取决于用户的网络和环境)。
- 用户在新创建的卷上发送 UNMAP 请求。
- GW 故障切换会提升 S-GW(辅助)以接收请求(故障切换可以手动完成,也可以由于主服务的服务和/或网络故障而完成)。
- 用户发送另一个 API 请求以在系统上创建新卷。
- 请求在 S-GW 上接收,传输到 MDM,并成功创建卷。
- 从客户端到成功完成整个作需要 X+Y 秒。
示例方案包含三个作:“Create Volume”、“Map Volume”和“Unmap Volume”,一个接一个地运行。
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
PowerFlex Gateway 在 Apache Tomcat 上运行,托管多个 PowerFlex 功能,包括 REST 网关、PowerFlex 安装程序和 SNMP 陷阱发送器。要在配置两个 Apache Tomcat 实例(PowerFlex Gateway 服务器)时获得高可用性,请使用 Apache httpd。为了防止 Apache httpd 中出现单点故障,您可以使用故障转移 httpd 实例,该实例使用许多可用的群集堆栈之一进行群集。
在将 RHEL 用于 GW 的客户环境中,正确的配置使用 Keepalived 和 HAProxy。
共享(虚拟)IP 地址用于两个 Apache httpd 服务器。两个 Apache httpd 服务器具有相同的配置,不同之处在于,一个服务器在 Keepalived 配置中定义为主服务器,而另一个服务器定义为辅助服务器。如果主节点发生故障,辅助节点将成为主节点,这意味着用户不会注意到任何服务丢失。
在 RHEL/CentOS 环境中,Keepalived 服务会监视 PowerFlex Gateway服务器并确定将客户端请求转发到哪个服务器。在 RHEL/CentOS 上配置了 HAProxy 和 Keepalived 以提供 PowerFlex Gateway高可用性。
The Keepalived
开源工具 用于保持活动组件,负责监控 HAProxy 的状态并根据需要配置虚拟 IP 地址。
有关 Keepalived 的更多信息,请参阅 http://www.keepalived.org。
The HAProxy
开源工具,它充当 PowerFlex Gateway的负载平衡器,监视 PowerFlex 系统并在节点宕机时重定向流量。
有关 HAProxy 的详细信息,请参阅 http://www.haproxy.org。
HAProxy 的默认配置设置为在拥有虚拟 IP 时具有辅助 GW,以重新尝试将收到的 API 请求传输到主 GW(“retries”值设置为 3),并在关闭时继续将其发送到后端 (MDM)。
Resolution
从下面的 HAProxy 配置示例中可以看出,默认 HAProxy 位于 Global settings 部分,则 'retries' 值设置为 3,这意味着它会尝试对主 GW 重试命令 3 次,每次 1 秒。
它会对主 GW 执行重试调用,因为在此下 backend siogateway 部分中,“balance”值设置为“first”,即主 GW。
更改“mode” 和 “option”的值, 并添加“server”特征也并非最重要:
- “mode” 和“ option” 值应分别更改为“http”和“httpchk”。
- “server”特征应添加“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