NSX Advanced Load Balancer は、仮想サービスを動的にスケールアウトするか、追加または少数の SE でスケールインすることで、仮想サービスのロード バランシング キャパシティを管理できます。デフォルトでは、仮想サービスのプライマリ SE は、自身を含むセカンダリ SE 間のトラフィック フローの分布を調整します。Contrail を使用した OpenStack では、NSX Advanced Load Balancer は Contrail によって提供される ECMP サポートを利用し、仮想サービス配置の一部として ECMP ルートのオーケストレーションを管理できます。
ECMP 機能は、次の場所に配置できます。
アップストリーム エッジ ルーター(Juniper MX または類似のルーターなど)。
ホスト ハイパーバイザー上の Contrail vRouter。
例
Neutron では、VIP 19.1.1.7 は Avi-se-czpey という名前の SE のインターフェイス ポートに関連付けられています。
root@dc11-cfg-1:~# neutron port-list +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+ | id | name | mac_address | fixed_ips | +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+ | dc4695c6-6d16-4ee0-ab05-774537a33ab2 | Avi-Data...| 02:dc:46:95:c6:6d | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.6"} | | | | | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.7"} | ... +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+
Contrail では、VIP 19.1.1.7 は、ポート dc4695c6-6d16-4ee0-ab05-774537a33ab2
と同じリンケージと、ハイパーバイザー 172.16.11.101 で実行されている SE 仮想マシンへの 1 つのルートを持ちます。
仮想サービスのスケールアウト
NSX Advanced Load Balancer CLI を使用して、scaleout_ecmp を True
に設定すると、次のように vs2 のスケールアウトが可能になります。
configure virtualservice vs2 scaleout_ecmp save +----------------------------------+-----------------------------------------------------+ | Field | Value | +----------------------------------+-----------------------------------------------------+ | uuid | virtualservice-2f8770d0-20cc-477f-9419-b206b9624389 | | name | vs2 | | scaleout_ecmp | True | | vip[1] | | | vip_id | 0 | | ip_address | 19.1.1.7 | | enabled | True | | network_ref | 02b846e6-cd68-4c84-b7ab-3709946ed28b | | port_uuid | c0e4cb54-8706-4bed-97bb-271a603f858f | | subnet_uuid | a834986a-385e-4616-9d9c-6b91cfaa51e0 | | subnet | 19.1.1.0/24 | | auto_allocate_ip | True | | auto_allocate_floating_ip | False | ... +----------------------------------+-----------------------------------------------------+ scaleout virtualservice vs2 vip_id 0
スケールアウト後、vs2 は次のサマリ出力に示すように、Avi-se-czpey と Avi-se-pnjbb の 2 つの SE で実行されます。
show virtualservice vs2 summary +-----------------------+-----------------------------------------+ | Field | Value | +-----------------------+-----------------------------------------+ | oper_status | | | state | OPER_UP | | percent_ses_up | 100 | | vip_summary[1] | | | vip_id | 0 | | oper_status | | | state | OPER_UP | | service_engine[1] | | | ref | Avi-se-czpey | | primary | True | | standby | False | | service_engine[2] | | | ref | Avi-se-pnjbb | | primary | False | | standby | False | | num_se_requested | 2 | | num_se_assigned | 2 | +-----------------------+-----------------------------------------+
Neutron では、VIP 19.1.1.7 が SE Avi-se-czpey および Avi-se-pnjbb のインターフェイス ポートにも関連付けられます。
root@dc11-cfg-1:~# neutron port-list +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+ | id | name | mac_address | fixed_ips | +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+ | dc4695c6-6d16-4ee0-ab05-774537a33ab2 | Avi-Data...| 02:dc:46:95:c6:6d | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.6"} | | | | | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.7"} | | 492ee72a-c647-490f-9648-77124e1cf0b6 | Avi-Data...| 02:49:2e:e7:2a:c6 | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.4"} | | | | | {"subnet_id": "a834986a-385e-4616-9d9c-6b91cfaa51e0", "ip_address": "19.1.1.7"} | +--------------------------------------+------------+-------------------+---------------------------------------------------------------------------------+
Contrail では、VIP 19.1.1.7 は、ポート dc4695c6-6d16-4ee0-ab05-774537a33ab2 and 492ee72a-c647-490f-9648-77124e1cf0b6
と同じリンケージと、ハイパーバイザー 172.16.11.101 と 172.16.11.102 で実行されている SE 仮想マシンへの 2 つのルートを持ちます。
VIP アドレスに複数の SE インスタンスがある場合、vRouter は最終的な宛先に向かう複数の XMPP ルートを受信します。XMPP ルートには異なるルート識別子 (RD) があり、異なる SE インスタンスを識別するための異なるネクスト ホップと MPLS ラベルがあります。
スケールアウト/スケールイン時のフローの回復性
フローは src-IP、src-port、dst-IP、dst-port、protocol の 5-tuple です。ルーターは 5-tuple のハッシュを実行して、使用するパスを選択します。Contrail vRouter は、フロー テーブルを使用して、フロー用に選択した SE 宛先を保持します。そのため、ECMP グループ内の SE インスタンスの数が変更されても、フローは移動しません。
フローティング IP アドレス ECMP
NSX Advanced Load Balancer CLI を使用して、次のようにフローティング IP アドレスを仮想サービス vs2
に関連付けます。
configure virtualservice vs2 vip vip_id 0 auto_allocate_floating_ip Overwriting the previously entered value for auto_allocate_floating_ip floating_subnet_uuid 010a4d99-794c-42a9-948c-080014463217 save save +----------------------------------+-----------------------------------------------------+ | Field | Value | +----------------------------------+-----------------------------------------------------+ | uuid | virtualservice-2f8770d0-20cc-477f-9419-b206b9624389 | | name | vs2 | | scaleout_ecmp | True | | vip[1] | | | vip_id | 0 | | ip_address | 19.1.1.7 | | enabled | True | | network_ref | 02b846e6-cd68-4c84-b7ab-3709946ed28b | | port_uuid | c0e4cb54-8706-4bed-97bb-271a603f858f | | subnet_uuid | a834986a-385e-4616-9d9c-6b91cfaa51e0 | | subnet | 19.1.1.0/24 | | auto_allocate_ip | True | | auto_allocate_floating_ip | False | | floating_ip | 10.1.11.4 | | auto_allocate_floating_ip | True | | floating_subnet_uuid | 010a4d99-794c-42a9-948c-080014463217 | ... +----------------------------------+-----------------------------------------------------+
Contrail では、floating_ip は SE のインターフェイス ポートと、ハイパーバイザー 172.16.11.101 および 172.16.11.102 で実行されている SE 仮想マシンへの 2 つのルートにリンクされます。
仮想サービス トラフィックの統計情報
show virtualservice vs2 detail filter disable_aggregate se | grep connections_handled | connections_handled | 102 | | connections_handled | 49 |
次のスクリーンショットは、ECMP FIP リンケージの詳細を示しています。
次のスクリーンショットは、ECMP FIP ルーティング テーブルの詳細を示しています。
次のスクリーンショットは、ECMP リンケージの詳細を示しています。
次のスクリーンショットは、非 ECMP リンケージの詳細を示しています。
次のスクリーンショットは、非 ECMP ルート 1 の詳細を示しています。
次のスクリーンショットは、ECMP ルート 2 の詳細を示しています。