DHCP 服务负载均衡调度器

Launchpad蓝图

https://blueprints.launchpad.net/neutron/+spec/dhcpservice-loadbalancing

问题描述

使用当前的 Agent 管理和调度器扩展,我们无法有效地分配 DHCP 命名空间,尤其是在有多个网络节点可用时。现有的调度器(Chance 调度器)无法根据 DHCP agent 的网络负载,在多个网络节点之间正确地负载均衡 DHCP 命名空间。

Chance 调度器会不均匀地调度 DHCP 命名空间,当创建大量命名空间时,这并不适用。Chance 调度器会将大约 90% 的 DHCP 命名空间调度到一个网络节点上,而剩余的 10% 的命名空间则分布在其余网络节点上。

此蓝图试图通过提出一个新的 DHCP agent 调度器来解决此问题,该调度器将根据 DHCP agent 的 DHCP 命名空间数量,在多个网络节点之间平均分配 DHCP 命名空间。

提议的变更

在 Neutron 服务器中,我们编写了一个 DHCP agent 调度器,它将根据 ‘neutron.conf’ 中的“network_scheduler_driver”配置,跟踪在网络节点上运行的 DHCP 服务。

只有当“network_scheduler_driver”参数设置为 LeastNetworksScheduler 时,才会触发 ‘LeastNetworksScheduler’ 类型的 DHCP 调度器。 此标志的默认值为 ‘ChanceScheduler’。

当创建新网络时,DHCP agent 调度器将获取托管网络数量最少的 dhcp agent。并将新创建的 DHCP 命名空间服务调度到这些负载最小的 DHCP agent 上。

这里的 dhcp agent 负载是根据 dhcp agent 上已经创建的 DHCP 命名空间数量来决定的。‘LeastNetworksScheduler’ 将返回 ‘dhcp_agents_per_network’ 配置参数中指定的,负载最少的 DHCP agent 数量。

在此实现中,DHCP 命名空间计数是基于从 DHCP agent 接收到的报告状态消息计算的。

数据模型影响

将在“Agents”表中添加一个名为“load”的新列。 此列包含基于托管在该 agent 上的 DHCP 命名空间数量的 Agent 负载。 该表将根据负载排序,并且负载最少的排名前 n 个 Agent 将被提供给调度器以托管 DHCP 命名空间。

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

IPv6 影响

其他部署者影响

可以通过设置标志 network_scheduler_driver = LeastNetworksScheduler 来启用此功能,该标志可以从 “neutron.conf” 中配置。 如果该标志设置为 ChanceScheduler,则不会执行任何此代码。

开发人员影响

社区影响

备选方案

实现

负责人

主要负责人

praveen-sm-kumar

其他贡献者

shiva-m

工作项

高级任务包括
  • 重构 ChanceScheduler 的代码,并引入一个名为 LeastNetworksScheduler 的新类。 此活动包括将公共方法移动到名为 DHCPScheduler 的父类中,并在 ChanceScheduler 和 LeastNetworksScheduler 类中继承这些方法。

  • LeastNetworksScheduler 此类将具有获取托管网络数量最少的 dhcp agent 的实现。 随后,它将在这些负载最小的 DHCP agent 上调度相应的 DHCP 命名空间服务。

依赖项

将重用当前调度器类中的一些方法。

测试

代码将涵盖单元测试。

Tempest 测试

功能测试

将会添加。

API 测试

文档影响

需要增强当前文档,以添加特定于 DHCP 服务负载均衡调度器的内容。

用户文档

需要修改 Openstack 配置参考文档的调度器部分。

开发人员文档

参考资料

代码已提交进行审查,链接如下 https://review.openstack.org/#/c/137017