If you ever want to deploy Neutron in OpenStack (Icehouse) in high-availability mode, where you have more than one network controller (node), you’ll have to take into account that most of Neutron components will have to run in active-passive mode. Furthermore, virtual routers get associated to a L3 agent at creation time, and virtual networks to a DHCP agent. This association is established via the host name of the agent (L3 or DHCP). Unless explicitly configured, Neutron agents register themselves with a host name that matches the FQDN of the host where they are running.
An example: let’s imagine a scenario where we have two network nodes:
nn2.example.com. By default, the L3 agent running on the host
nn1.example.com will register itself with a host name of
nn1.example.com. The same holds true for the the DHCP agent. The L3 agent on host nn2.example.com is not running yet, but it’s configured in the same way as the other L3 agent. Hence, the L3 agent on host nn2.example.com will register itself using a host named
Now, a user creates a virtual router and, at creation time, it gets associated with the L3 agent running on host
nn1.example.com. At some point, host
nn1.example.com fails. The L3 agent on host
nn2.example.com will be brought up (for example, via Pacemaker). The problem is that the virtual router is associated with an L3 agent named
nn1.example.com, which is now unreachable. There’s an L3 agent named
nn2.example.com, but that won’t do it.
What’s the proper solution to fix this mess? To tell Neutron agents to register themselves with a fictitious, unique host name. Since there will only be one agent of the same type running at the same time (active-passive), it won’t cause any problems. How does one tell the Neutron agents in OpenStack (Icehouse) to use this fictitious name? Just add the following configuration option to
/etc/neutron/neutron.conf inside the
[DEFAULT] host = my-fictitious-host-name