DHCP Service LoadBalancing Scheduler

Launchpad blueprint:

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

Problem Description

With the current Agent Management and Scheduler extensions we are not able to effectively distribute the DHCP namespaces when there are multiple Network Nodes available. Existing scheduler(Chance Scheduler) does not load balance the DHCP namespace properly across multiple Network Nodes based on the network load of DHCP agents.

Chance scheduler schedules DHCP namespaces unevenly, which is not suitable when large number of namespaces are created. Chance scheduler schedules around 90% of DHCP namespaces on a single Network Node and remaining 10% of namespaces are distributed across remaining Network Nodes.

This blueprint attempts to address this issue by proposing a new DHCP agent scheduler which will equally distribute the DHCP namespaces across multiple Network Nodes based on DHCP namespace count of the DHCP agent.

Proposed Change

In the Neutron server, we have written a DHCP agent scheduler which will keep track of the DHCP services running on the Network Nodes based on the “network_scheduler_driver” configuration of ‘neutron.conf’.

‘LeastNetworksScheduler’ type of DHCP scheduler will be triggered only if the “network_scheduler_driver” parameter is set to LeastNetworksScheduler. The default value for this flag is ‘ChanceScheduler’.

When the new network is created the DHCP agent scheduler will fetch the dhcp agents with minimum number of networks hosted on it. And schedules the newly created DHCP namespace service on those minimally loaded DHCP agents.

Here the dhcp agent load is decided based on the number of DHCP namespaces which are already created on the dhcp agent. ‘LeastNetworksScheduler’ will return as many number of minimally loaded DHCP agents as mentioned in ‘dhcp_agents_per_network’ configuration parameter.

In this implementation the DHCP namespace count is calculated based on report status messages received from DHCP agents.

Data Model Impact

A new column named “load” will be added in the “Agents” table. This column contains the Agent load based on the DHCP namespaces count which are hosted on that particular agent. The table will be sorted based on the load and least loaded top n Agents will be supplied for scheduler to host the DHCP namespaces.

REST API Impact

None

Security Impact

None

Notifications Impact

None

Other End User Impact

None

Performance Impact

None

IPv6 Impact

None

Other Deployer Impact

This feature can be enabled by setting the flag network_scheduler_driver = LeastNetworksScheduler which is configurable from “neutron.conf”. If the flag is set to ChanceScheduler, none of this code will be executed.

Developer Impact

None

Community Impact

None

Alternatives

None

Implementation

Assignee(s)

Primary assignee:

praveen-sm-kumar

Other contributors:

shiva-m

Work Items

Highlevel tasks include:
  • Refactor the code of ChanceScheduler and introduce new class named LeastNetworksScheduler This activity includes moving the common methods to parent class named DHCPScheduler and inheriting those methods in ChanceScheduler and LeastNetworksScheduler classes.

  • LeastNetworksScheduler This class will have the implementation to get the dhcp agents which is hosting least number of networks. Subsequently it will schedule the respective DHCP namespace services on those minimally loaded DHCP agents.

Dependencies

Will reuse few methods from current scheduler classes.

Testing

The code will be covered with unit tests.

Tempest Tests

None

Functional Tests

Will be added.

API Tests

None

Documentation Impact

Current documentation will have to be enhanced to add the content specific to DHCP service load balancing scheduler.

User Documentation

Scheduler section of Openstack Configuration Reference document needs to be modified.

Developer Documentation

None

References

The code has been submitted for review at the below link https://review.openstack.org/#/c/137017