Skip to main content
When you deploy virtual machines in Azure, designing for high availability is essential. A single VM is a single point of failure: if the VM or the underlying host fails, your service becomes unavailable. High availability reduces this risk by keeping applications accessible during unplanned hardware outages and planned maintenance. High-availability design typically combines platform features and application-level redundancy. Azure provides infrastructure redundancy (power, networking, failover mechanisms), but you must architect your VMs and services to take advantage of that redundancy. Common causes of downtime:
  • Network failures, power outages, or host hardware problems.
  • Software bugs or misconfigurations.
  • Planned maintenance (host updates or patching).
This article explains Azure availability sets and availability zones and shows how to use them to create resilient VM deployments.

Availability set

An availability set is a logical grouping that instructs Azure how your application is deployed so it can provide redundancy. Availability sets use two key concepts:
  • Fault domain (FD): a physical isolation boundary (similar to a rack). Different fault domains do not share the same power or network switches. If one fault domain experiences a hardware failure, VMs in other fault domains continue to run.
  • Update domain (UD): a logical grouping used during platform updates and reboots. Azure updates one UD at a time so not all instances are rebooted simultaneously.
Example
  • If you deploy three VMs to an availability set, Azure distributes them across available FDs and UDs (for example, FD0/UD0, FD1/UD1, FD2/UD2). If FD0 loses power, VMs in FD1 and FD2 continue serving traffic. If Microsoft updates UD1, VMs in UD0 and UD2 remain available while UD1 is updated.
A diagram titled "Availability Set" showing a datacenter split into three fault domains (FD0, FD1, FD2) with several update domains (UD0–UD4) and small VM icons inside each. Arrows and red "X" markers illustrate infrastructure connections and simulated failures to show redundancy and fault isolation.
Key limits and recommendations
  • Update domains: up to 20 (default varies by resource type).
  • Fault domains: typically up to 3 in a classic availability set; edge cases and region-specific limits may vary.
  • Spread at least two VMs across different fault domains to avoid a single point of hardware failure.
  • Use a load balancer in front of the VMs to route traffic to healthy instances.

Creating an availability set and deploying VMs (portal)

You can create an availability set before or while provisioning VMs. Steps (portal):
  1. In the Azure portal, start creating a new VM.
  2. Under Availability options choose “Availability set”.
  3. Select an existing availability set or create a new one.
  4. When creating the availability set, configure the number of fault domains and update domains (for example, 3 FDs and 3 UDs).
  5. Finish VM provisioning; Azure will distribute VMs across the configured FDs and UDs.
A screenshot of the Microsoft Azure portal showing the "Create a virtual machine" page with project and instance details (subscription, resource group, VM name, region) on the left and a "Create availability set" pane open on the right with fault/update domain sliders. The dialog shows an availability set name "ha-as-01" and controls for fault domains, update domains, and managed disks.
Placement behavior and inspection
  • The first VM added to an availability set is typically placed in FD0/UD0. Subsequent VMs are placed in different combinations to maximize isolation.
  • After deployment you can inspect the availability set to see which FD/UD each VM occupies and verify distribution.
A Microsoft Azure portal screenshot showing a deployment named "CreateVm-canonical.0001-com-ubuntu-server-jammy..." with the status "Deployment is in progress." The deployment details list VM and network resources (vm-01, vm-01769, vm-01-vnet, etc.) and their creation/status information.
A screenshot of the Microsoft Azure portal showing an Availability set named "ha-as-01" with its Overview/Essentials panel open and a single virtual machine "vm-01" listed as Running. The panel also shows details like resource group (rg-ha-01), location (East US), and fault/update domains.
Add more VMs to the same availability set to spread them across the configured FDs and UDs. Place an Azure Load Balancer or Application Gateway in front of the VMs to distribute client requests to healthy instances.

Availability zones

Availability sets protect against rack-level failures and host updates within a single datacenter or fault boundary. To guard against datacenter-level outages (for example, a serious power outage or natural disaster), use availability zones. Availability zones are physically separate locations within an Azure region. Each zone has independent power, networking, and cooling. Most regions provide three zones.
A presentation slide titled "Availability Zones" showing three server-rack icons arranged side-by-side inside a dotted boundary labeled "Region A," each card labeled "Availability Zone."

Deploying VMs across availability zones (portal)

When creating a VM:
  1. Under Availability options choose “Availability zones”.
  2. Select the target zone(s) in the region (for example, Zone 1, Zone 2, Zone 3).
  3. Create individual VMs per zone or use zone-aware Virtual Machine Scale Sets (VMSS) to span zones automatically.
  4. Place a zone-redundant load balancer or Traffic Manager in front of your VMs so traffic fails over to healthy zones.
A screenshot of the Microsoft Azure "Create a virtual machine" page showing instance details (resource group rg-ha-01, VM names vm-ha-1/vm-ha-2/vm-ha-3), region set to (US) East US, and availability zones 1–3 selected with Ubuntu Server 20.04 LTS chosen as the image.
Use zone-aware services (zone-redundant storage, zone-redundant load balancer, and VMSS) when you need resilience against an entire datacenter outage.

Comparison: Availability set vs. Availability zones

Best practices

  • Combine platform redundancy with application-level redundancy (stateless app instances, session management, databases with geo-replication).
  • Use an Azure Load Balancer or Application Gateway to distribute traffic across instances in sets or zones.
  • For critical workloads, prefer zone-redundant designs or pair zones with zone-redundant services.
  • Test failover scenarios periodically to validate your application’s behavior under failure conditions.
  • Monitor resource placement (FD/UD, zone) after deployment to ensure expected distribution.

Summary

  • Availability sets provide isolation inside a datacenter using fault domains and update domains to minimize impact from hardware failures and orchestrated updates.
  • Availability zones provide isolation across physically separate datacenters in a region to protect against zone-level outages.
  • Use load balancers, zone-aware VM scale sets, and zone-redundant services to build resilient systems.
Availability sets provide isolation within a datacenter (via fault and update domains); availability zones provide isolation across datacenters within a region. Choose the option that matches the level of redundancy your application requires.
With these concepts and Azure features, you can design VM deployments that remain available during planned maintenance and many types of failures.

Watch Video