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迁移功能,其代码如下:
remove_networks_from_down_agents主要完成了以下功能:
① 从数据库中查询状态为down的dhcp-agent;
② 解除数据表中network和agent的关联关系;
③ 为网络重新分配一个agent。
_schedule_network的实现细节:
① 重新调度一个dhcp-agent,并在数据库中建立新agent和network的关联关系;
② 远程调用agent的network_create_end方法,通知agent处理新增加的网络,处理过程和subnet_create_end类似。