Health probes and backend redundancy: the basics
What does a load balancer with no safety net actually look like?
An Azure Load Balancer is a layer-4 pass-through that spreads inbound TCP and UDP traffic across the instances in a backend pool. On its own it does not know whether any of those instances is actually serving. That job belongs to the health probe: a small check, TCP, HTTP or HTTPS, that the load balancer sends to each backend on a fixed interval. When a backend stops answering the probe, the load balancer marks it unhealthy and stops sending it new connections. Without a probe, or with a probe that checks the wrong thing, the load balancer keeps cheerfully forwarding requests to an instance that is hung, mid-deploy or returning errors, and your users get the failures directly.
The probe is only half the picture. A probe that correctly removes a sick instance is useless if there is nowhere else to send the traffic. If the backend pool holds a single instance and that instance goes unhealthy, every request to the pool fails, because redundancy is the thing that makes a probe actionable. This is why Azure Advisor raises the reliability recommendation 'Ensure backend pools contain at least two instances': a single-instance pool is a single point of failure no probe can rescue. Microsoft is explicit that the Standard Load Balancer SLA applies only when you have at least two healthy backend instances configured.
Most reliability gaps here are drift, not design. A load balancer stood up with one VM 'for now' and never scaled out. A probe pointed at a generic open port that answers even when the application behind it is broken. A pool where two VMs happen to live in the same availability zone, so a single datacentre fault takes both down at once. The work is to make sure every load-balancing rule has a probe that reflects real application health, and that every backend pool it feeds has at least two healthy instances spread across fault boundaries.
In this lesson you will learn how Azure Load Balancer uses health probes to detect failing backends, why a probe is only as good as the redundancy behind it, and how to find and fix the single-instance pools and weak probes in your estate. It is grounded in the Azure Advisor reliability recommendation 'Ensure backend pools contain at least two instances', and in how probes actually decide which instances receive traffic.
The probe that pointed at the wrong door
A classic failure mode is a health probe that checks a port rather than the application. A team points a TCP probe at port 80, the web server keeps the socket open, and the probe stays green, even while the application behind it is returning 500s or stuck waiting on a dead database. The load balancer, seeing a healthy probe, keeps routing real users straight into the failure. The fix is to make the probe test something that fails when the application fails: an HTTP probe against a dedicated health path that itself checks the application's critical dependencies. A probe is only as honest as the thing it asks.
Finding single-instance pools and weak probes
Priya runs platform reliability at a growing SaaS company. Azure Advisor has flagged several load balancers with the recommendation 'Ensure backend pools contain at least two instances', and an incident last month, a single VM rebooting for patches and taking a service down with it, made the point in person.
Rather than guess, Priya starts by listing every load balancer and counting the backend addresses in each pool, so the genuine single points of failure stand out before anything is changed.
List every load balancer and how many instances sit in each backend pool. A count of one is a single point of failure.
A pool with a single backend is the highest-value target: the most business-critical single-instance pool is where one routine failure becomes a customer-facing outage. Count instances, then check the probe behind each pool.
How a probe decides an instance is healthydeep dive
A health probe checks each backend on a fixed interval, 5 seconds by default in the Azure portal, and uses a threshold of consecutive results to flip an instance between healthy and unhealthy. A TCP probe opens a connection to the configured port and fails if the instance does not answer or sends a reset. An HTTP or HTTPS probe issues a GET against a path you specify and treats only an HTTP 200 as healthy: any other status, a 403, 404 or 500, or no response within the timeout, counts as a failure. For TCP probes the threshold is symmetric, so with a threshold of 2 an instance needs two consecutive successes to come into rotation and two consecutive failures to leave it. The probe source is always the Azure address 168.63.129.16, identified by the AzureLoadBalancer service tag, so your network security groups and host firewalls must allow it or every instance will look down.
What happens when an instance fails the probe depends on the SKU, and the difference is the whole reason redundancy matters. On a Standard Load Balancer, when a single instance probes down the load balancer simply stops sending it new connections and routes new flows to the remaining healthy backends, while established TCP flows to other instances continue. But when every instance in a pool probes down, no new flows are sent to the pool at all: a single-instance pool whose one instance fails is, by definition, an all-down pool, so the probe has done its job and there is still nothing to serve the request. On a Basic Load Balancer the all-down case is worse, because it terminates established TCP flows too.
This is why the probe and the redundancy are one capability rather than two settings. The probe is the detector; the second instance is the thing that makes detection actionable. Microsoft ties them together in the SLA itself: the Load Balancer SLA applies only when you have at least two healthy backend instances configured, and it explicitly excludes downtime caused by network security groups blocking traffic, which is exactly what a misconfigured probe path looks like to the platform.
What is the impact of a single-instance pool or a weak probe?
The direct impact is downtime. A backend pool with one instance has no redundancy: any event that takes that instance offline, a patch reboot, a failed deployment, a crashed process, an availability-zone fault, takes the whole load-balanced service offline with it. The probe will correctly detect the failure, but with nowhere healthy to route to, every request to the pool fails until the instance recovers. The failures that hurt most are the routine ones, because they are frequent and entirely foreseeable.
The second-order impact is a false sense of safety. A load balancer in front of a service looks like resilience, and a green probe looks like health, so a single-instance pool or a probe pointed at a bare port can pass every casual inspection right up until the instance it depends on fails. A probe that tests a generic open port instead of real application health is worse than no probe, because it actively keeps routing users into a broken application while reporting that everything is fine.
There is a contractual dimension too. Microsoft only offers the Load Balancer SLA when at least two healthy backend instances are configured, so a single-instance pool is outside the guarantee you are paying a Standard SKU for. If you in turn promise uptime to your own customers, a single point of failure in front of a revenue service is an SLA commitment you cannot actually back, and the credits you owe when it breaks are a real and recurring cost.
How do you make a load-balanced service survive a failure?
Work this as one loop rather than chasing individual Advisor items. The order matters: add redundancy and a real probe together, because either one alone leaves the service exposed.
1. Inventory pools by instance count and probe quality
List every load balancer, count the backends in each pool, and check what each probe actually tests. A pool with one instance is a single point of failure. A probe pointed at a bare TCP port, rather than an application health path, is a check that can stay green while the service is broken. Treat this inventory as the source of truth, not the raw Advisor count.
2. Add a second instance, spread across zones
Bring every production pool to at least two instances so the SLA applies and a single failure has somewhere to fail over to. Place those instances in different availability zones, ideally behind a virtual machine scale set, so a single datacentre fault cannot take both down at once. Two instances in the same zone is better than one, but it is not zone resilience.
3. Point the probe at real application health
Prefer an HTTP or HTTPS probe against a dedicated health endpoint that checks the application's critical dependencies, rather than a bare TCP port that answers regardless of application state. Tune the interval and threshold to detect failure quickly without flapping on transient blips, and make sure the AzureLoadBalancer source IP 168.63.129.16 is allowed through every network security group and host firewall.
4. Make redundancy the default in code
Define load balancers, pools and probes in Bicep or another infrastructure-as-code template so a redundant, properly probed configuration is the only way a service ships. A standard module with a minimum of two instances and a real health path turns reliability from something each team has to remember into something the platform enforces by default.
# 1. Add an HTTP health probe that tests a real application path (not a bare port).
az network lb probe create \
--resource-group rg-prod \
--lb-name lb-checkout-prod \
--name probe-checkout-health \
--protocol Http \
--port 8080 \
--path /healthz \
--interval 5 \
--threshold 2
# 2. Point the load-balancing rule at that probe so unhealthy instances are pulled.
az network lb rule create \
--resource-group rg-prod \
--lb-name lb-checkout-prod \
--name rule-checkout-https \
--protocol Tcp \
--frontend-port 443 \
--backend-port 8080 \
--probe-name probe-checkout-health \
--backend-pool-name pool-web
# --- Or define the whole thing in Bicep so redundancy is the default ---
#
# resource lb 'Microsoft.Network/loadBalancers@2025-03-01' = {
# name: 'lb-checkout-prod'
# location: location
# sku: { name: 'Standard' }
# properties: {
# // Back the pool with a VM scale set of >= 2 instances across zones.
# probes: [
# {
# name: 'probe-checkout-health'
# properties: {
# protocol: 'Http'
# port: 8080
# requestPath: '/healthz'
# intervalInSeconds: 5
# numberOfProbes: 2
# }
# }
# ]
# }
# } Quick quiz
Question 1 of 5Azure Advisor flags a load balancer with the recommendation 'Ensure backend pools contain at least two instances'. Why does a single-instance pool defeat the point of having a health probe?
You scored
0 / 5
Keep learning
Go deeper on how Azure Load Balancer probes detect failure and how to design backend redundancy that actually survives one.
- Azure Load Balancer health probes Probe protocols, intervals, thresholds and the difference in probe-down behaviour between Standard and Basic SKUs.
- Reliability in Azure Load Balancer Availability zones, the two-healthy-instance SLA requirement, and how to make a load balancer resilient to zone and region failures.
- Azure Advisor reliability recommendations The full set of Advisor reliability recommendations, including 'Ensure backend pools contain at least two instances'.
You can now treat load-balancer resilience as one capability rather than a scatter of settings: inventory every pool by instance count and probe quality, add a second instance spread across availability zones so a single failure has somewhere to go, point each probe at a real application health path so a green check means a healthy service, and make that redundant shape the default in code. A health probe detects the failure; the second instance is what turns detection into a non-event.
Back to the library