Upgrading a load balancer safely: a runbook for lower operational risk

A load-balancer change can affect routing, TLS, sessions, health checks, and observability at once. A strong runbook turns an upgrade into a set of testable assumptions with a clear way back.
A load balancer is often viewed as an infrastructure component in the middle, so a configuration change can be underestimated: replace a certificate, adjust a health check, add a routing rule, or upgrade a version. It sits on the path of almost every request, however. A small error may not kill a backend but can still give users redirect loops, lost sessions, CORS failures, blocked requests from a new header, or traffic sent to a group that is not ready. A load-balancer upgrade is not “change it and see.” It is a product change with a direct effect on customer experience.
A safe runbook does not begin with a command list. It begins with context: which traffic crosses this component, who owns the applications behind it, what counts as success, and what criteria require a return to the previous state. With those answers clear, a team can make a controlled change rather than guess under pressure.
Inventory the request path before touching configuration
Describe a request from the user perspective: domain, DNS, CDN or WAF, load balancer, listener, rule, target group, application, dependency, and response. Record protocol, port, certificate, redirects, added or removed headers, timeout, request-size limit, sticky session, and health-check mechanism. A listener-only change can break uploads when body limits differ or break an API when a proxy header changes.
The inventory should also show an owner for every route. Admin paths, webhooks, public APIs, static assets, and partner callbacks can behave very differently. Without knowing which traffic uses a rare rule, a team may learn only after an important integration stops working. Review access logs and telemetry over a representative period, including peak hours, to learn the actual routes, methods, response codes, host headers, and client types.
Establish a comparable baseline, not only a configuration snapshot
Before the change, record user-visible measures: 2xx, 4xx, and 5xx rates, latency by route, connection-error rate, healthy-backend count, TLS handshake time when relevant, and successful login or form-submission rate. Add application measures such as throughput, saturation, and dependency errors. This is the reference for detecting regression; a load balancer can look healthy while moving failure into the application layer.
The baseline needs real smoke tests. Select representative journeys: open the home page, call an important API, sign in when suitable, submit a test form in a safe environment, load assets, verify redirects, and exercise a simulated callback. Each test needs an explicit expected result. Do not rely on one command-line request and assume real traffic is safe; browsers, cache, cookies, HTTP/2, TLS, and older clients can behave differently.
Make changes small, canary them, and define stop gates
Split large changes into independent steps whenever possible. Deploy a new certificate before changing routing policy; add a target group before sending a small share of traffic; change a health check after its endpoint is verified. Each step needs a continuation condition, a stop condition, and a person authorized to decide. A canary is not only a traffic percentage. It is a way to test an assumption in a scope small enough to reverse calmly.
For sensitive routes, canary by host, path, internal-user group, or a test header rather than randomly sampling all customers. This lets a team observe specific protocols and payloads. Where traffic cannot be separated, choose a lower-risk window, notify dependent owners, and increase monitoring. A change that cannot be canaried is not impossible, but it needs stronger preparation and rollback.
Check the quiet failure points
A health check should represent serving capability, not merely an open process port. If an endpoint returns 200 while its database is unavailable, the load balancer can continue sending requests to a backend that cannot complete them. A health check that is too expensive can create load itself. Define the difference between liveness, readiness, and deeper checks, then choose the correct target for routing.
Test session persistence when cookie name, timeout, domain, SameSite settings, or backend session encoding changes. Test TLS with certificate chain, SNI, cipher policy, and supported clients. Make header forwarding explicit so an application does not trust a spoofed IP or produce a redirect with the wrong scheme. Align timeouts between client, load balancer, and backend; an unreasonable shorter layer creates intermittent failures that are difficult to reproduce.
Observe end to end and roll back on signals
During the change window, do not watch only the load-balancer dashboard. Watch errors and latency at the edge, application, database, and important dependencies while using correlation IDs in logs. When errors increase, the team needs to know where requests stop and which user group is affected. A useful dashboard displays the difference before and after the change, not only a current number.
Rollback must be a prepared action, not an idea after failure. Confirm that the prior configuration, artifact, or template can be applied, understand DNS or routing convergence, identify approvers, and know which session data may be affected. Set rollback thresholds before starting: sustained error increase, failure of a critical journey, falling backend health, or untrustworthy observability. When a threshold is met, return to a known state before debating the cause further.
Close a change with evidence and improvement
After traffic stabilizes, rerun smoke tests, compare the baseline, verify the certificate and rare routes, and confirm with application owners. Retain the change, version, time, approver, findings, and follow-up work. If there was a small incident or near miss, treat it as improvement data: which test was absent, which metric alerted late, which rule was too complex, or which dependency lacked an owner?
A sensible path is to standardize inventory and baselines for important load balancers first, then build repeatable smoke tests and canary capability, and finally rehearse rollback. Success is not measured by a change that produced no complaint once. It is measured by a team that can explain impact, detect regression early, and return to safety with minimal panic.
Published ; updated