Neutron-server根据dhcp_agents_per_network配置,在多个dhcp-agent上启动dnsmasq进程。因此dhcp高可用的实现是通过部署多个dhcp-agent,使一个网络的dhcp服务由多个dhcp-agent支持。图1展示了一个network和dhcp-agent的关系图。
图1 一个network可由多个agent为其实现dhcp功能
如果某些dhcp-agent停服,neutron-server还可以通过Dhcp迁移技术,保证可为网络服务的dhcp-agent数量。
该技术需要将allow_automatic_dhcp_failover设置为True。当dhcp-agentdown时,neutron-server可以分配其他正常的agent为网络提供服务。
它的实现方法是,neutron-server启动后会周期检查dhcp-agent的状态,当发现agent down时,则解除该agent与网络的关系,重新调度一个agent为网络提供服务。
neutron/db/agentschedulers.py
remove_networks_from_down_agents函数被周期执行,该函数实现了dhcp迁移功能,其代码如下: