NSX Advanced Load Balancer は、仮想サービスを動的にスケールアウトするか、追加または少数の SE でスケールインすることで、仮想サービスのロード バランシング キャパシティを管理できます。デフォルトでは、仮想サービスのプライマリ SE は、自身を含むセカンダリ SE 間のトラフィック フローの分布を調整します。Contrail を使用した OpenStack では、NSX Advanced Load Balancer は Contrail によって提供される ECMP サポートを利用し、仮想サービス配置の一部として ECMP ルートのオーケストレーションを管理できます。

ECMP 機能は、次の場所に配置できます。

  1. アップストリーム エッジ ルーター(Juniper MX または類似のルーターなど)。

  2. ホスト ハイパーバイザー上の 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_ecmpTrue に設定すると、次のように 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-czpeyAvi-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-IPsrc-portdst-IPdst-portprotocol の 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 の詳細を示しています。