Deploy Virtual Machines to Availability Zones and Availability Sets
Evaluate High Availability and Fault Tolerance Strategies
High availability and fault tolerance ensure that Azure virtual machines and their workloads stay running even when hardware fails, maintenance occurs, or disasters happen. Azure offers three main strategies for this: availability zones, availability sets, and Virtual Machine Scale Sets (VMSS). Each strategy protects against different types of failures, and choosing the right one depends on how critical the workload is and what kind of failures you need to prepare for.
Availability zones are physically separate datacenters within an Azure region, each with its own power, cooling, and networking. When you deploy VMs across multiple zones, your application can fail over to another zone if one zone goes down, giving you up to 99.99% uptime. This is the highest level of protection Azure offers and works best for mission-critical workloads that cannot tolerate any downtime. There are two ways to use zones: zone-redundant deployments automatically spread resources across zones, while zonal deployments pin resources to a specific zone and require manual spreading for redundancy.
An availability set groups VMs together so Azure knows how your application is built and can distribute them intelligently across hardware. The set spreads VMs across fault domains (different physical racks with separate power and network) and update domains (groups that reboot together during maintenance). This design prevents a single hardware failure or a single maintenance update from taking down all your VMs at once. Availability sets give you 99.95% uptime and work well when you need ultra-low latency between VMs or when your region does not support availability zones.
Virtual Machine Scale Sets let you deploy and manage a group of load-balanced VMs that can automatically scale based on demand. Scale sets can be configured for zonal or zone-redundant deployments, and the flexible orchestration mode spreads VMs across fault domains and availability zones for better resilience. The automatic scaling feature adds or removes VMs based on rules you set, while the zone-balancing feature keeps VMs evenly distributed across zones.
For storage, Azure provides redundancy options that work alongside your VM deployment strategy. Locally Redundant Storage (LRS) replicates data three times within a single datacenter, while Zone-Redundant Storage (ZRS) replicates across three different availability zones to protect against datacenter failures. Geo-Redundant Storage (GRS) goes further by replicating to a distant secondary region for disaster recovery. Services like Azure Backup and Azure Site Recovery let you replicate VMs across zones or regions and practice failover so you are ready when outages happen.
To create VMs in availability zones, you specify which zones to deploy into when you create the virtual machine. Each zone is a separate physical location with its own infrastructure, so when you spread VMs across zones, a failure in one location does not affect the others. The Azure portal, Azure CLI, PowerShell, and Resource Manager templates all support specifying zones during VM creation.
Virtual Machine Scale Sets can be deployed in three ways. A zonal deployment puts all VMs in a single zone, giving you control over which zone hosts your instances. A zone-redundant deployment spreads VMs evenly across multiple zones automatically, which is ideal for production workloads that need high availability. When using flexible orchestration mode, you can control exactly how VMs are distributed across fault domains within each zone.
An availability set works differently because it keeps VMs in the same datacenter but on separate hardware. When you place VMs in an availability set, Azure automatically distributes them across different fault domains and update domains. Fault domains protect against hardware failures by separating VMs onto different racks, while update domains ensure that not all VMs restart at the same time during Azure's planned maintenance. This separation is what gives availability sets their reliability guarantee.
To create resources with availability zones using PowerShell, you specify multiple zones with the -Zone parameter. For example, setting -Zone "1", "2", "3" creates a zone-redundant deployment that spreads instances across three zones. The same principle applies when using Azure CLI or Resource Manager templates—you declare which zones to use, and Azure handles the distribution.
Implement Deployment and Configuration Best Practices
When planning VM deployments, start by deciding whether availability zones or availability sets better match your needs. Use zones when you need protection against entire datacenter failures and want the highest uptime SLA of 99.99%. Use sets when your region does not support zones, when you need extremely low network latency between VMs, or when 99.95% uptime meets your requirements. The choice affects not just availability but also network performance, since cross-zone traffic has slightly higher latency than same-datacenter traffic.
Inside an availability set, properly configuring fault domains and update domains is essential for resilience. Fault domains group VMs that share power and network infrastructure, so spreading VMs across multiple fault domains means a rack failure takes down only some of your instances. Update domains control when VMs reboot during maintenance—Azure never reboots all update domains at once, so having multiple update domains ensures your application stays available during updates. The general practice is to have at least two or three of each.
For storage, align managed disks with the fault domains of their parent VMs so the storage does not become a single point of failure. Using Zone-Redundant Storage (ZRS) for shared disks ensures the storage layer itself survives zone failures, which matters for clustered applications like SQL Server Always On availability groups. Locally Redundant Storage (LRS) works for less critical data since it protects only against hardware failures within one datacenter.
When deploying at scale, Virtual Machine Scale Sets with flexible orchestration provide automation and consistency. You define the configuration once, and the scale set creates and manages many VMs together. Automatic scaling rules adjust the VM count based on demand or schedules, while the default spreading behavior places instances across fault domains or zones to maintain availability. Automating deployments through Azure Resource Manager templates ensures every deployment follows the same pattern, reducing mistakes and making it easier to recreate your environment if needed.