PowerFlex:ゲートウェイの高可用性設定により、プライマリ ゲートウェイがダウンしているときにコマンド リレーの遅延が発生することがある
Summary: クライアント側APIの自動化または手動操作は、プライマリーGWよりもセカンダリー ゲートウェイ(GW)経由で完了するまでに予想以上に時間がかかります。
Symptoms
プライマリーGWがフェールオーバーし、セカンダリーGWでリクエストを受信すると、リクエストの送信に時間がかかり、操作が完了する。
シナリオ例:
- お客様は、バックエンド ストレージ通信用のクライアント側アプリケーションとしてCinder (OpenStack)を使用しています。
- ユーザーがAPIリクエストを送信して、システムに新しいボリュームを作成します。
- リクエストはP-GW(プライマリー)で受信され、MDMに転送され、ボリュームが正常に作成されます。
- クライアントから正常に完了するまでの操作全体は、X秒かかります(ユーザーのネットワークと環境によって異なります)。
- ユーザーは、新しく作成されたボリュームで割り当て解除要求を送信します。
- GWフェールオーバーは、要求を受信するためにS-GW(セカンダリ)を昇格します(フェールオーバーは手動で実行することも、プライマリのサービスまたはネットワーク、あるいはその両方がダウンした結果として実行することもできます)。
- ユーザーが別のAPIリクエストを送信して、システムに新しいボリュームを作成します。
- リクエストがS-GWで受信されてMDMに転送され、ボリュームが正常に作成されます。
- クライアントから正常に完了するまでの操作全体は、X+Y秒かかります。
このシナリオ例は、次の3つの操作で構成されています。[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
Apache Tomcatで実行されるPowerFlex Gatewayは、RESTゲートウェイ、PowerFlexインストーラー、SNMPトラップ送信者など、いくつかのPowerFlex機能をホストします。2つのApache Tomcatインスタンス(PowerFlex Gatewayサーバー)が構成されている場合に高可用性を実現するには、Apache httpdを使用します。Apache httpd の単一障害点を防ぐために、多くの利用可能なクラスタリングスタックの 1 つを使用してクラスタ化されたフェイルオーバー httpd インスタンスを使用できます。
GWにRHELを使用しているお客様の環境では、正しい構成でKeepalivedとHAProxyを使用します。
共有 (仮想) IP アドレスは、両方の Apache httpd サーバーに使用されます。Apache httpd サーバはどちらも同じ設定ですが、一方が Keepalived 設定でプライマリとして定義され、もう一方がセカンダリとして定義されている点が異なります。プライマリに障害が発生した場合、セカンダリがプライマリになるため、ユーザーはサービスの損失に気付くことはありません。
RHEL/CentOS環境では、KeepalivedサービスがPowerFlex Gatewayサーバーを監視し、クライアント リクエストの転送先サーバーを決定します。HAProxyとKeepalivedは、PowerFlex Gatewayに高可用性を提供するためにRHEL/CentOS上で構成されます。
キープアライブ
オープンソース ツール キープアライブ コンポーネントに使用され、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 設定の例でわかるように、デフォルトの HAProxy は Global settings セクションでは、「retries」値が3に設定されます。つまり、プライマリGWへのコマンドを1秒ごとに3回再試行します。
プライマリー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