NSX Advanced Load Balancer 可以通过将虚拟服务动态扩展到更多 SE 上或缩减到更少 SE 上,来管理虚拟服务的负载均衡容量。默认情况下,虚拟服务的主 SE 负责协调辅助 SE 之间(包括其自身)的流量分配。在具有 Contrail 的 OpenStack 上,NSX Advanced Load Balancer 可以利用 Contrail 提供的 ECMP 支持,并在虚拟服务放置过程中管理 ECMP 路由编排。
ECMP 功能可位于以下位置:
上游 Edge 路由器(例如 Juniper MX 或类似路由器)。
主机 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-czpey 和 Avi-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-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
的链接,并具有两个路由,分别到 Hypervisor 172.16.11.101 和 172.16.11.102 上运行的 SE 虚拟机。
如果一个 VIP 地址对应有多个 SE 实例,vRouter 将收到指向最终目标的多个 XMPP 路由。XMPP 路由将具有不同的路由标识 (Route Distinguisher, RD) 以进行区分,而且它们具有不同的下一跃点和 MPLS 标签以标识不同的 SE 实例。
扩展/缩减期间的流量弹性
流量是一个 5 元组:src-IP、src-port、dst-IP、dst-port 和 protocol。路由器对 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 详细信息。