PowerFlex:主要閘道關閉時,閘道高可用性組態可能會導致命令中繼延遲
Summary: 在輔助閘道 (GW) 上完成的用戶端 API 自動化或手動操作比透過主閘道 GW 完成的時間長於預期。
Symptoms
主要 GW 進行容錯移轉並在次要 GW 上收到要求後,傳送要求需要較長的時間才能完成操作。
範例案例:
- 客戶使用 Cinder (OpenStack) 作為後端儲存通訊的用戶端應用程式。
- 使用者發送 API 請求以在系統上創建新卷。
- 要求會在 P-GW (主要) 上接收,並傳送至 MDM,且磁碟區已成功建立。
- 從用戶端到成功完成的整個操作需要 X 秒(取決於使用者的網路和環境)。
- 使用者在新創建的卷上發送 UNMAP 請求。
- GW 故障轉移促進 S-GW(輔助)接收請求(故障轉移可以手動完成,也可以由於主伺服器的服務或網路或兩者關閉而完成)。
- 使用者傳送另一個 API 要求,以在系統上建立新磁碟區。
- 在 S-GW 上接收請求,將其傳輸到 MDM,並成功創建卷。
- 從用戶端到成功完成的整個操作需要 X+Y 秒。
範例方案包含三個操作:「建立磁碟區」、「對應磁碟區」、「取消對應磁碟區」逐一執行。
P-吉瓦
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 實例。
在為 GW 使用 RHEL 的客戶環境中,正確的組態會使用 Keepalive 和 HAProxy。
兩個 Apache httpd 伺服器都會使用共用 (虛擬) IP 位址。兩個 Apache httpd 伺服器具有相同的配置,除了其中一個在 Keepalive 配置中定義為主伺服器,而另一個伺服器定義為輔助伺服器。如果主資料庫發生故障,輔助資料庫將成為主資料庫,這意味著使用者不會注意到任何服務丟失。
在 RHEL/CentOS 環境中,Keepalive 服務會監控 PowerFlex Gateway 伺服器,並決定將用戶端要求轉送至哪一部伺服器。HAProxy 和 Keepalive 已在 RHEL/CentOS 上設定,以提供具備高可用性的 PowerFlex Gateway。
基帕利夫
開放原始碼工具 用於保持活動狀態元件,並負責監控HAProxy的狀態並根據需要配置虛擬IP位址。
如需更多有關 Keepalived 的資訊,請參閱 http://www.keepalived.org。
哈普羅克西
開放原始碼工具可作為 PowerFlex Gateway 的負載平衡器,監控 PowerFlex 系統,並在節點中斷時重新導向流量。
有關HAProxy的更多資訊,請參閱 http://www.haproxy.org。
HAProxy 的預設配置設置為在擁有虛擬 IP 時具有輔助 GW,以重試將收到的 API 請求傳輸到主 IP (“重試”值設置為 3),並在它關閉時繼續將其發送到後端 (MDM)。
Resolution
如下方的 HAProxy 組態範例所見,預設的 HAProxy Global settings 部分中的「重試」值設置為 3,這表示它會嘗試將命令重試到主要 GW 三次,每次一秒鐘。
它會對主要 GW 執行重試呼叫,因為在 backend siogateway 部分中,“餘額”值設置為“第一個”,即為主要 GW。
變更「模式」 和 「選項」的值, 以及新增「伺服器」特性,也並非至關重要:
- 「mode」 和 「option」 值應分別變更為「http」和「httpchk」。
- “伺服器”特徵應添加“檢查秋季 5 2000 年間上升 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