This patch makes L3 HA failover not depended on neutron components
(during failover).
All HA agents(active and backup) call update_device_up/down after wiring
the ports. But l2pop driver is called for only active agent as port
binding in DB reflects active agent. Then l2pop creates unicast and
multicast flows for active agent.
On failover, flows to new active agent is created. For this to happen -
all of database, messaging server, neutron-server and destination L3
agent should be active during failover. This creates two issues -
1) When any of the above resources(i.e neutron-server, .. ) are dead,
flows between new master and other agents won't be created and
L3 Ha failover is not working. In same scenario, L3 Ha failover will
work if l2pop is disabled.
2) Packet loss during failover is higher as above neutron resources
interact multiple times, so will take time to create l2 flows.
In this change, we allow plugin to notify l2pop when update_device_up/down
is called by backup agents also. Then l2pop will create flood flows to
all HA agents(both active and slave). L2pop won't create unicast flow for
this port, instead unicast flow is created by learning action of table 10
when keepalived sends GARP after assigning ip address to master router's
qr-xx port. As flood flows are already created and unicast flow is
dynamically added, L3 HA failover is not depended on l2pop.
This solves two isses
1) with L3 HA + l2pop, failover will work even if any of above agents
or processes dead.
2) Reduce failover time as we are not depending on neutron to create
flows during failover.
We use L3HARouterAgentPortBinding table for getting all HA agents of a
router port. HA router port on slave agent is also considered for l2pop
distributed_active_network_ports and agent_network_active_port_count
Reviewed: https:/ /review. openstack. org/382210 /git.openstack. org/cgit/ openstack/ neutron/ commit/ ?id=c06ff65dbbc 515ef5a70acc98d ee4f5cb57dce71
Committed: https:/
Submitter: Jenkins
Branch: stable/mitaka
commit c06ff65dbbc515e f5a70acc98dee4f 5cb57dce71
Author: venkata anil <email address hidden>
Date: Thu Aug 4 07:14:47 2016 +0000
l2pop fdb flows for HA router ports
This patch makes L3 HA failover not depended on neutron components
(during failover).
All HA agents(active and backup) call update_ device_ up/down after wiring
the ports. But l2pop driver is called for only active agent as port
binding in DB reflects active agent. Then l2pop creates unicast and
multicast flows for active agent.
On failover, flows to new active agent is created. For this to happen -
all of database, messaging server, neutron-server and destination L3
agent should be active during failover. This creates two issues -
1) When any of the above resources(i.e neutron-server, .. ) are dead,
flows between new master and other agents won't be created and
L3 Ha failover is not working. In same scenario, L3 Ha failover will
work if l2pop is disabled.
2) Packet loss during failover is higher as above neutron resources
interact multiple times, so will take time to create l2 flows.
In this change, we allow plugin to notify l2pop when update_ device_ up/down
is called by backup agents also. Then l2pop will create flood flows to
all HA agents(both active and slave). L2pop won't create unicast flow for
this port, instead unicast flow is created by learning action of table 10
when keepalived sends GARP after assigning ip address to master router's
qr-xx port. As flood flows are already created and unicast flow is
dynamically added, L3 HA failover is not depended on l2pop.
This solves two isses PortBinding table for getting all HA agents of a _active_ network_ ports and agent_network_ active_ port_count
1) with L3 HA + l2pop, failover will work even if any of above agents
or processes dead.
2) Reduce failover time as we are not depending on neutron to create
flows during failover.
We use L3HARouterAgent
router port. HA router port on slave agent is also considered for l2pop
distributed
Conflicts:
neutron/ db/l3_hamode_ db.py
neutron/ plugins/ ml2/drivers/ l2pop/db. py
neutron/ plugins/ ml2/drivers/ l2pop/mech_ driver. py
neutron/ plugins/ ml2/rpc. py
neutron/ tests/unit/ plugins/ ml2/drivers/ l2pop/test_ db.py
neutron/ tests/unit/ plugins/ ml2/drivers/ l2pop/test_ mech_driver. py
neutron/ tests/unit/ plugins/ ml2/test_ rpc.py
Closes-bug: #1522980 3f7f3ed7ffc8f6a 8258ee8662e 4293b97bc435fa8 5983be9f01)
Closes-bug: #1602614
Change-Id: Ie1f5289390b3ff
(cherry picked from commit 26d8702b9d7cc5a