障害検出は、サービス エンジンの高可用性を実現するために不可欠です。
NSX Advanced Load Balancer は、次に示すように、さまざまな方法でサービス エンジンの障害を検出します。
コントローラから SE への障害検出方法
SE 間の障害検出方法
BGP ルーターから SE への障害検出方法
コントローラから SE への障害検出方法
すべての展開で、NSX Advanced Load Balancer Controller は、10 秒に 1 回、制御下にあるすべてのグループのすべてのサービス エンジンにハートビート メッセージを送信します。特定の SE から 6 回連続するハートビート メッセージに対する応答がない場合、コントローラは SE が DOWN していると見なし、すべての仮想サービスを新しい SE に移動します。
[vSphere High Availability] が有効の場合、コントローラが vSphere ホスト障害の発生を検出すると、SE は 6 回連続してハートビート メッセージへの応答に失敗する前に、OPER_PARTITIONED
または OPER_DOWN
に移行します。
稼動状態の仮想サービスがある SE(障害が発生したホスト)は
OPER_PARTITIONED
状態に移行します。稼動状態の仮想サービスがない SE(障害が発生したホスト)は
OPER_DOWN
状態に移行します。
SE 間の障害検出方法
上記のコントローラから SE への障害検出方法では、コントローラは管理インターフェイスを介して定期的なハートビート メッセージを送信することで、サービス エンジンの障害を検出します。ただし、この方法では、SE 上のデータ インターフェイスのデータパス障害は検出されません。
包括的な障害検出を検証するために、サービス エンジンのデータパス ハートビート メカニズムが作成され、サービス エンジンはデータ インターフェイスを介して定期的なハートビート メッセージを送信します。
デフォルトでは、この通信は標準モードに設定されています。「CLI を使用したアグレッシブ モードの有効化」セクションで説明するように、アグレッシブ モードに構成することもできます。
サービス エンジンのデータパス通信モード
サービス エンジンの展開に応じて、SE 間のプロセス間通信に使用できる 3 つのモードについて次に説明します。
- カスタム EtherType
-
これは、サービス エンジンが同じサブネットにある場合に適用されるデフォルト モードです。使用される EtherType は次のとおりです。
ETHERTYPE_AVI_IPC 0XA1C0
ETHERTYPE_AVI_MACINMAC 0XA1C1
ETHERTYPE_AVI_MACINMAC_TXONLY 0XA1C2
- IP カプセル化
-
このモードは、インフラストラクチャが EtherType の通過を許可しない場合に適用できます。このモードでも、サービス エンジンは同じサブネットにあると見なされます。このモードは、デフォルトで AWS に適用されます。
se_ip_encap_ipc X コマンドを使用して、IP カプセル化を構成します。
次の例は、CLI を使用した IP カプセル化の構成を示しています。
#shell Login: admin Password: [GB-slough-cam:cd-avi-cntrl1]: > configure serviceengineproperties [GB-slough-cam:cd-avi-cntrl1]: seproperties> se_bootup_properties [GB-slough-cam:cd-avi-cntrl1]: seproperties:se_bootup_properties> se_ip_encap_ipc 1 [GB-slough-cam:cd-avi-cntrl1]: seproperties:se_bootup_properties> save [GB-slough-cam:cd-avi-cntrl1]: seproperties:> save [GB-slough-cam:cd-avi-cntrl1]: > reboot serviceengine <IP 1> [GB-slough-cam:cd-avi-cntrl1]: > reboot serviceengine <IP 2>
注:se_ip_encap_ipc
コマンドの変更を有効にするには、サービス エンジン グループ内のすべてのサービス エンジンを再起動します。このモードで使用される IP プロトコルは次のとおりです。
IPPROTO_AVI_IPC 73
IPPROTO_AVI_MACINMAC 97
IPPROTO_AVI_MACINMAC_TX 63
- IP パケット
-
このモードは、サービス エンジンが異なるサブネットにある場合に適用されます。宛先サービス エンジンのインターフェイス IP に送信される IP パケットがネクスト ホップ ルーターに送信されます。このモードで使用される IP プロトコルは次のとおりです。
IPPROTO_AVI_IPC_L3 75
IPPROTO_AVI_MACINMAC 97
BGP ルーターから SE への障害検出方法
BGP が構成されている場合、SE 間の障害検出が次のように強化されます。
双方向の転送検出 (BFD) は SE の障害を検出し、フロー ロード バランシングに失敗した SE へのルートを使用しないようにルーターに要求します。
ルーターは、BGP プロトコル タイマーを使用して SE の障害を検出します。
障害検出アルゴリズム
仮想サービスがスケール アウトされている SE グループを検討します。障害検出の手順は次のとおりです。
仮想サービスのプライマリ SE は、すべての仮想サービスのセカンダリ SE に定期的なハートビート メッセージを送信します。
SE が繰り返し応答しない場合、プライマリ SE は、この SE が停止している可能性があると疑います。
SE 障害の可能性を示す通知が NSX Advanced Load Balancer Controller に送信されます。
NSX Advanced Load Balancer Controller は、疑わしいサービス エンジンが停止しているかどうかを確認するために、一連のエコー メッセージを送信します。
サービス エンジン間で送信されるハートビート メッセージの時間枠と頻度に基づいて、操作モードは標準およびアグレッシブです。次に説明するように、両方のモードのアルゴリズムは同じですが、頻度と時間枠が異なります。
プライマリ SE は、100 ミリ秒など、カスタマイズされた間隔でセカンダリ SE にハートビート メッセージを送信します。繰り返し応答しない場合、指定された SE が停止している可能性があることを示します。2 番目の列に表示される設定に従って、プライマリ SE は、次の場合にセカンダリ SE が停止していると疑います。
10 回連続するハートビート メッセージが 1 秒間失敗する(標準)、または
10 回連続するハートビート メッセージが 1 秒間失敗する(アグレッシブ)。ただし、次の構成パラメータを使用してアグレッシブに調整することもできます。
セカンダリが停止していることが疑われるとすぐに、プライマリが NSX Advanced Load Balancer Controller に通知し、後者は、疑わしいサービス エンジンにエコー メッセージを送信します。3 番目の列に表示される設定に従って、コントローラは次の後に疑わしい SE が停止したと宣言します。
4 回連続するエコー メッセージが 8 秒間失敗する(標準)、または
2 回連続するエコー メッセージが 4 秒間失敗する(アグレッシブ)。
2 番目と 3 番目の列の値を合計することにより、コントローラは、標準設定では 9 秒以内に、アグレッシブ設定では 5 秒以内に障害の結論を出します。
SE-DP ハートビート障害に基づいてサービス エンジンの障害を検出するのにかかった時間は次のとおりです。
検出モード |
SE-SE HB メッセージング |
コントローラ-SE のエコー メッセージ |
障害検出の合計時間 |
---|---|---|---|
標準モード |
HB 期間:100 ミリ秒 |
エコー期間:2 秒 |
1+8 = 9 秒 |
10 回連続の障害 |
4 回連続の障害 |
||
アグレッシブ モード |
HB 期間:100 ミリ秒 |
エコー期間:2 秒 |
1+4 = 5 秒 |
10 回連続の障害 |
2 回連続の障害 |
次の構成では、2 秒程度のアグレッシブな障害検出を実現できます。ただし、推奨されるのはベアメタル環境のみです。仮想化環境では、誤検出が発生します。
serviceengineproperties
はアグレッシブなタイムアウト値を示します。
configure serviceengineproperties se_runtime_properties | dp_aggressive_hb_frequency | 100 milliseconds | | dp_aggressive_hb_timeout_count | 5 | se_agent_properties | controller_echo_rpc_aggressive_timeout | 500 milliseconds | | controller_echo_miss_aggressive_limit | 3 |
CLI を使用したアグレッシブ モードの有効化
サービス エンジンの障害検出は、次に説明するように CLI のみを使用してアグレッシブ モードに設定できます。
NSX Advanced Load Balancer Controller のシェル プロンプトにログインし、選択したサービス エンジン グループの下に次のコマンドを入力します。
[admin:1-Controller-2]: > configure serviceenginegroup AA-SE-Group [admin:1-Controller-2]: serviceenginegroup> aggressive_failure_detection [admin:1-Controller-2]: serviceenginegroup> save
次の show コマンドを使用して設定を確認します。
[admin:1-Controller-2]: > show serviceenginegroup AA-SE-Group | grep aggressive | aggressive_failure_detection | True
サービス エンジン ファイルが読み取り専用になる
サービス エンジンのファイル システムが読み取り専用になる場合があります。これはサービス エンジンの機能に影響し、原因不明の障害が発生する可能性があります。読み取り専用状態は、障害のある物理ディスクまたはサービス エンジンのディスク容量不足が原因で発生する可能性があります。これは、サービス エンジンの Syslog ファイルを分析することによってのみ検出できます。