NSX Advanced Load Balancer 可以通过将虚拟服务动态扩展到更多 SE 上或缩减到更少 SE 上,来管理虚拟服务的负载均衡容量。默认情况下,虚拟服务的主 SE 负责协调辅助 SE 之间(包括其自身)的流量分配。在具有 Contrail 的 OpenStack 上,NSX Advanced Load Balancer 可以利用 Contrail 提供的 ECMP 支持,并在虚拟服务放置过程中管理 ECMP 路由编排。

ECMP 功能可位于以下位置:

  1. 上游 Edge 路由器(例如 Juniper MX 或类似路由器)。

  2. 主机 Hypervisor 上的 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 的链接,并具有一个到 Hypervisor 172.16.11.101 上运行的 SE 虚拟机的路由。

虚拟服务扩展

使用 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 在两个 SE(Avi-se-czpeyAvi-se-pnjbb)上运行,如以下摘要输出中所示。

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-czpeyAvi-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 的链接,并具有两个路由,分别到 Hypervisor 172.16.11.101 和 172.16.11.102 上运行的 SE 虚拟机。

如果一个 VIP 地址对应有多个 SE 实例,vRouter 将收到指向最终目标的多个 XMPP 路由。XMPP 路由将具有不同的路由标识 (Route Distinguisher, RD) 以进行区分,而且它们具有不同的下一跃点和 MPLS 标签以标识不同的 SE 实例。

扩展/缩减期间的流量弹性

流量是一个 5 元组:src-IPsrc-portdst-IPdst-portprotocol。路由器对 5 元组进行哈希处理以选择要使用的路径。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 的接口端口,并具有两个路由,分别到 Hypervisor 172.16.11.101 和 172.16.11.102 上运行的 SE 虚拟机。

虚拟服务流量统计信息

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 详细信息。