]> git.proxmox.com Git - mirror_ovs.git/blame - ovn/OVN-GW-HA.md
actions: Allow caller to specify output table.
[mirror_ovs.git] / ovn / OVN-GW-HA.md
CommitLineData
760d034b
EJ
1OVN Gateway High Availability Plan
2==================================
3```
4 +---------------------------+
5 | |
6 | External Network |
7 | |
8 +-------------^-------------+
9 |
10 |
11 +-----------+
12 | |
13 | Gateway |
14 | |
15 +-----------+
16 ^
17 |
18 |
19 +-------------v-------------+
20 | |
21 | OVN Virtual Network |
22 | |
23 +---------------------------+
24
25OVN Gateway
26```
27
28The OVN gateway is responsible for shuffling traffic between the tunneled
29overlay network (governed by ovn-northd), and the legacy physical network. In
30a naive implementation, the gateway is a single x86 server, or hardware VTEP.
31For most deployments, a single system has enough forwarding capacity to service
32the entire virtualized network, however, it introduces a single point of
33failure. If this system dies, the entire OVN deployment becomes unavailable.
34To mitigate this risk, an HA solution is critical -- by spreading
35responsibility across multiple systems, no single server failure can take down
36the network.
37
38An HA solution is both critical to the manageability of the system, and
39extremely difficult to get right. The purpose of this document, is to propose
40a plan for OVN Gateway High Availability which takes into account our past
41experience building similar systems. It should be considered a fluid changing
42proposal, not a set-in-stone decree.
43
44Basic Architecture
45------------------
46In an OVN deployment, the set of hypervisors and network elements operating
47under the guidance of ovn-northd are in what's called "logical space". These
48servers use VXLAN, STT, or Geneve to communicate, oblivious to the details of
49the underlying physical network. When these systems need to communicate with
50legacy networks, traffic must be routed through a Gateway which translates from
51OVN controlled tunnel traffic, to raw physical network traffic.
52
53Since the gateway is typically the only system with a connection to the
54physical network all traffic between logical space and the WAN must travel
55through it. This makes it a critical single point of failure -- if
56the gateway dies, communication with the WAN ceases for all systems in logical
57space.
58
59To mitigate this risk, multiple gateways should be run in a "High Availability
60Cluster" or "HA Cluster". The HA cluster will be responsible for performing
61the duties of a gateways, while being able to recover gracefully from
62individual member failures.
63
64```
65 +---------------------------+
66 | |
67 | External Network |
68 | |
69 +-------------^-------------+
70 |
71 |
72+----------------------v----------------------+
73| |
74| High Availability Cluster |
75| |
76| +-----------+ +-----------+ +-----------+ |
77| | | | | | | |
78| | Gateway | | Gateway | | Gateway | |
79| | | | | | | |
80| +-----------+ +-----------+ +-----------+ |
81+----------------------^----------------------+
82 |
83 |
84 +-------------v-------------+
85 | |
86 | OVN Virtual Network |
87 | |
88 +---------------------------+
89
90OVN Gateway HA Cluster
91```
92
93##### L2 vs L3 High Availability
94In order to achieve this goal, there are two broad approaches one can take.
95The HA cluster can appear to the network like a giant Layer 2 Ethernet Switch,
96or like a giant IP Router. These approaches are called L2HA, and L3HA
97respectively. L2HA allows ethernet broadcast domains to extend into logical
98space, a significant advantage, but this comes at a cost. The need to avoid
99transient L2 loops during failover significantly complicates their design. On
100the other hand, L3HA works for most use cases, is simpler, and fails more
101gracefully. For these reasons, it is suggested that OVN supports an L3HA
102model, leaving L2HA for future work (or third party VTEP providers). Both
103models are discussed further below.
104
105L3HA
106----
107In this section, we'll work through a basic simple L3HA implementation, on top
108of which we'll gradually build more sophisticated features explaining their
109motivations and implementations as we go.
110
111### Naive active-backup.
112Let's assume that there are a collection of logical routers which a tenant has
113asked for, our task is to schedule these logical routers on one of N gateways,
114and gracefully redistribute the routers on gateways which have failed. The
115absolute simplest way to achieve this is what we'll call "naive-active-backup".
116
117```
118+----------------+ +----------------+
119| Leader | | Backup |
120| | | |
121| A B C | | |
122| | | |
123+----+-+-+-+----++ +-+--------------+
124 ^ ^ ^ ^ | |
125 | | | | | |
126 | | | | +-+------+---+
127 + + + + | ovn-northd |
128 Traffic +------------+
129
130Naive Active Backup HA Implementation
131```
132
133In a naive active-backup, one of the Gateways is chosen (arbitrarily) as a
134leader. All logical routers (A, B, C in the figure), are scheduled on this
135leader gateway and all traffic flows through it. ovn-northd monitors this
136gateway via OpenFlow echo requests (or some equivalent), and if the gateway
137dies, it recreates the routers on one of the backups.
138
139This approach basically works in most cases and should likely be the starting
140point for OVN -- it's strictly better than no HA solution and is a good
141foundation for more sophisticated solutions. That said, it's not without it's
142limitations. Specifically, this approach doesn't coordinate with the physical
143network to minimize disruption during failures, and it tightly couples failover
144to ovn-northd (we'll discuss why this is bad in a bit), and wastes resources by
145leaving backup gateways completely unutilized.
146
147##### Router Failover
148When ovn-northd notices the leader has died and decides to migrate routers
149to a backup gateway, the physical network has to be notified to direct traffic
150to the new gateway. Otherwise, traffic could be blackholed for longer than
151necessary making failovers worse than they need to be.
152
153For now, let's assume that OVN requires all gateways to be on the same IP
154subnet on the physical network. If this isn't the case,
155gateways would need to participate in routing protocols to orchestrate
156failovers, something which is difficult and out of scope of this document.
157
158Since all gateways are on the same IP subnet, we simply need to worry about
159updating the MAC learning tables of the Ethernet switches on that subnet.
160Presumably, they all have entries for each logical router pointing to the old
161leader. If these entries aren't updated, all traffic will be sent to the (now
162defunct) old leader, instead of the new one.
163
164In order to mitigate this issue, it's recommended that the new gateway sends a
165Reverse ARP (RARP) onto the physical network for each logical router it now
166controls. A Reverse ARP is a benign protocol used by many hypervisors when
167virtual machines migrate to update L2 forwarding tables. In this case, the
168ethernet source address of the RARP is that of the logical router it
169corresponds to, and its destination is the broadcast address. This causes the
170RARP to travel to every L2 switch in the broadcast domain, updating forwarding
171tables accordingly. This strategy is recommended in all failover mechanisms
172discussed in this document -- when a router newly boots on a new leader, it
173should RARP its MAC address.
174
175### Controller Independent Active-backup
176```
177+----------------+ +----------------+
178| Leader | | Backup |
179| | | |
180| A B C | | |
181| | | |
182+----------------+ +----------------+
183 ^ ^ ^ ^
184 | | | |
185 | | | |
186 + + + +
187 Traffic
188
189Controller Independent Active-Backup Implementation
190```
191
192The fundamental problem with naive active-backup, is it tightly couples the
193failover solution to ovn-northd. This can significantly increase downtime in
194the event of a failover as the (often already busy) ovn-northd controller has
195to recompute state for the new leader. Worse, if ovn-northd goes down, we
196can't perform gateway failover at all. This violates the principle that
197control plane outages should have no impact on dataplane functionality.
198
199In a controller independent active-backup configuration, ovn-northd is
200responsible for initial configuration while the HA cluster is responsible for
201monitoring the leader, and failing over to a backup if necessary. ovn-northd
202sets HA policy, but doesn't actively participate when failovers occur.
203
204Of course, in this model, ovn-northd is not without some responsibility. Its
205role is to pre-plan what should happen in the event of a failure, leaving it
206to the individual switches to execute this plan. It does this by assigning
207each gateway a unique leadership priority. Once assigned, it communicates this
208priority to each node it controls. Nodes use the leadership priority to
209determine which gateway in the cluster is the active leader by using a simple
210metric: the leader is the gateway that is healthy, with the highest priority.
211If that gateway goes down, leadership falls to the next highest priority, and
212conversely, if a new gateway comes up with a higher priority, it takes over
213leadership.
214
215Thus, in this model, leadership of the HA cluster is determined simply by the
216status of its members. Therefore if we can communicate the status of each
217gateway to each transport node, they can individually figure out which is the
218leader, and direct traffic accordingly.
219
220##### Tunnel Monitoring.
221Since in this model leadership is determined exclusively by the health status
222of member gateways, a key problem is how do we communicate this information to
223the relevant transport nodes. Luckily, we can do this fairly cheaply using
224tunnel monitoring protocols like BFD.
225
226The basic idea is pretty straightforward. Each transport node maintains a
227tunnel to every gateway in the HA cluster (not just the leader). These
228tunnels are monitored using the BFD protocol to see which are alive. Given
229this information, hypervisors can trivially compute the highest priority live
230gateway, and thus the leader.
231
232In practice, this leadership computation can be performed trivially using the
233bundle or group action. Rather than using OpenFlow to simply output to the
234leader, all gateways could be listed in an active-backup bundle action ordered
235by their priority. The bundle action will automatically take into account the
236tunnel monitoring status to output the packet to the highest priority live
237gateway.
238
239##### Inter-Gateway Monitoring
240One somewhat subtle aspect of this model, is that failovers are not globally
241atomic. When a failover occurs, it will take some time for all hypervisors to
242notice and adjust accordingly. Similarly, if a new high priority Gateway comes
243up, it may take some time for all hypervisors to switch over to the new leader.
244In order to avoid confusing the physical network, under these circumstances
245it's important for the backup gateways to drop traffic they've received
246erroneously. In order to do this, each Gateway must know whether or not it is,
247in fact active. This can be achieved by creating a mesh of tunnels between
248gateways. Each gateway monitors the other gateways its cluster to determine
249which are alive, and therefore whether or not that gateway happens to be the
250leader. If leading, the gateway forwards traffic normally, otherwise it drops
251all traffic.
252
253##### Gateway Leadership Resignation
254Sometimes a gateway may be healthy, but still may not be suitable to lead the
255HA cluster. This could happen for several reasons including:
256
257* The physical network is unreachable.
258* BFD (or ping) has detected the next hop router is unreachable.
259* The Gateway recently booted and isn't fully configured.
260
261In this case, the Gateway should resign leadership by holding its tunnels down
262using the other_config:cpath_down flag. This indicates to participating
263hypervisors and Gateways that this gateway should be treated as if it's down,
264even though its tunnels are still healthy.
265
266### Router Specific Active-Backup
267```
268+----------------+ +----------------+
269| | | |
270| A C | | B D E |
271| | | |
272+----------------+ +----------------+
273 ^ ^ ^ ^
274 | | | |
275 | | | |
276 + + + +
277 Traffic
278
279Router Specific Active-Backup
280```
281Controller independent active-backup is a great advance over naive
282active-backup, but it still has one glaring problem -- it under-utilizes the
283backup gateways. In ideal scenario, all traffic would split evenly among the
284live set of gateways. Getting all the way there is somewhat tricky, but as a
285step in the direction, one could use the "Router Specific Active-Backup"
286algorithm. This algorithm looks a lot like active-backup on a per logical
287router basis, with one twist. It chooses a different active Gateway for each
288logical router. Thus, in situations where there are several logical routers,
289all with somewhat balanced load, this algorithm performs better.
290
291Implementation of this strategy is quite straightforward if built on top of
292basic controller independent active-backup. On a per logical router basis, the
293algorithm is the same, leadership is determined by the liveness of the
294gateways. The key difference here is that the gateways must have a different
295leadership priority for each logical router. These leadership priorities can
296be computed by ovn-northd just as they had been in the controller independent
297active-backup model.
298
299Once we have these per logical router priorities, they simply need be
300communicated to the members of the gateway cluster and the hypervisors. The
301hypervisors in particular, need simply have an active-backup bundle action (or
302group action) per logical router listing the gateways in priority order for
303*that router*, rather than having a single bundle action shared for all the
304routers.
305
306Additionally, the gateways need to be updated to take into account individual
307router priorities. Specifically, each gateway should drop traffic of backup
308routers it's running, and forward traffic of active gateways, instead of simply
309dropping or forwarding everything. This should likely be done by having
310ovn-controller recompute OpenFlow for the gateway, though other options exist.
311
312The final complication is that ovn-northd's logic must be updated to choose
313these per logical router leadership priorities in a more sophisticated manner.
314It doesn't matter much exactly what algorithm it chooses to do this, beyond
315that it should provide good balancing in the common case. I.E. each logical
316routers priorities should be different enough that routers balance to different
317gateways even when failures occur.
318
319##### Preemption
320In an active-backup setup, one issue that users will run into is that of
321gateway leader preemption. If a new Gateway is added to a cluster, or for some
322reason an existing gateway is rebooted, we could end up in a situation where
323the newly activated gateway has higher priority than any other in the HA
324cluster. In this case, as soon as that gateway appears, it will
325preempt leadership from the currently active leader causing an unnecessary
326failover. Since failover can be quite expensive, this preemption may be
327undesirable.
328
329The controller can optionally avoid preemption by cleverly tweaking the
330leadership priorities. For each router, new gateways should be assigned
331priorities that put them second in line or later when they eventually come up.
332Furthermore, if a gateway goes down for a significant period of time, its old
333leadership priorities should be revoked and new ones should be assigned as if
334it's a brand new gateway. Note that this should only happen if a gateway has
335been down for a while (several minutes), otherwise a flapping gateway could
336have wide ranging, unpredictable, consequences.
337
338Note that preemption avoidance should be optional depending on the deployment.
339One necessarily sacrifices optimal load balancing to satisfy these
340requirements as new gateways will get no traffic on boot. Thus, this feature
341represents a trade-off which must be made on a per installation basis.
342
343### Fully Active-Active HA
344```
345+----------------+ +----------------+
346| | | |
347| A B C D E | | A B C D E |
348| | | |
349+----------------+ +----------------+
350 ^ ^ ^ ^
351 | | | |
352 | | | |
353 + + + +
354 Traffic
355```
356
357The final step in L3HA is to have true active-active HA. In this scenario each
358router has an instance on each Gateway, and a mechanism similar to ECMP is used
359to distribute traffic evenly among all instances. This mechanism would require
360Gateways to participate in routing protocols with the physical network to
361attract traffic and alert of failures. It is out of scope of this document,
362but may eventually be necessary.
363
364L2HA
365----
366L2HA is very difficult to get right. Unlike L3HA, where the consequences of
367problems are minor, in L2HA if two gateways are both transiently active, an L2
368loop triggers and a broadcast storm results. In practice to get around this,
369gateways end up implementing an overly conservative "when in doubt drop all
370traffic" policy, or they implement something like MLAG.
371
372MLAG has multiple gateways work together to pretend to be a single L2 switch
373with a large LACP bond. In principle, it's the right solution to the problem as
374it solves the broadcast storm problem, and has been deployed successfully in
375other contexts. That said, it's difficult to get right and not recommended.