Creación de un conjunto de escalado de máquinas virtuales que usa zonas de disponibilidad

Las zonas de disponibilidad de Azure son ubicaciones aisladas de fallos dentro de una región de Azure que proporcionan alimentación, refrigeración y redes redundantes. Permiten ejecutar aplicaciones con alta disponibilidad y tolerancia a errores en los centros de datos. Las regiones de Azure que admiten Availability Zones tienen un mínimo de tres zonas independientes. Cada zona de disponibilidad consta de uno o varios centros de datos equipados con infraestructuras independientes de alimentación, red y refrigeración. Estas zonas de disponibilidad se conectan mediante una red de alto rendimiento que cuenta con una latencia de ida y vuelta inferior a 2 milisegundos. Para obtener más información, consulte Introducción a las zonas de disponibilidad.

Para proteger los conjuntos de escalado de máquinas virtuales de los errores en el nivel del centro de datos, puede crear un conjunto de escalado en todas las zonas de disponibilidad. Para usar las Zonas de disponibilidad, el conjunto de escalado se debe crear en una región de Azure compatible.

Consideraciones de diseño para zonas de disponibilidad

Virtual Machine Scale Sets admite tres modelos de implementación zonales:

  • Expansión de zona o redundancia de zona (recomendado)
  • Zonal o alineado por zonas (zona única)
  • Regional

Expansión de zona o redundancia de zona

Un conjunto de escalado con redundancia de zona o expansión de zona distribuye instancias en todas las zonas seleccionadas, "zones": ["1","2","3"]. De forma predeterminada, el conjunto de escalado realiza un enfoque de mejor esfuerzo para distribuir uniformemente las instancias entre zonas seleccionadas. Sin embargo, puede especificar que desea un equilibrio de zona estricto estableciendo "zoneBalance": "true" en la implementación. Cada máquina virtual y sus discos son zonales, por lo que se anclan a una zona específica. Las instancias entre zonas están conectadas por una red de alto rendimiento con baja latencia. En caso de que se produzca una interrupción zonal o un problema de conectividad, la conectividad a instancias dentro de la zona afectada puede estar en peligro, mientras que las instancias de otras zonas de disponibilidad no deben verse afectadas. Puede agregar capacidad al conjunto de escalado durante una interrupción zonal y el conjunto de escalado agrega más instancias a las zonas no afectadas. Cuando se restaura la zona, es posible que tenga que reducir verticalmente el conjunto de escalado a la capacidad original. Un procedimiento recomendado sería configurar reglas de escalado automático según el uso de la memoria o CPU. Las reglas de escalado automático permitirían que el conjunto de escalado responda ante una pérdida de las instancias de VM en esa zona mediante el escalado horizontal de instancias nuevas en las zonas operativas.

La propagación de instancias entre zonas de disponibilidad cumple el Acuerdo de Nivel de Servicio del 99,99 % para las instancias distribuidas entre zonas de disponibilidad y se recomienda para la mayoría de las cargas de trabajo de Azure.

Zonal o alineado por zonas (zona única)

Un conjunto de escalado alineado por zonas o zonal coloca instancias en una sola zona de disponibilidad "zones": ['1']. Cada máquina virtual y sus discos son zonales, por lo que se anclan a una zona específica. Esta configuración se usa principalmente cuando se necesita una menor latencia entre instancias.

Regional

Un conjunto de escalado de máquinas virtuales regional es cuando la asignación de zona no se establece explícitamente ("zones"=[] o "zones"=null). En esta configuración, el conjunto de escalado crea instancias regionales (no ancladas de zona) y coloca implícitamente instancias en toda la región. No hay ninguna garantía de equilibrio o propagación entre zonas, o que las instancias llegan a la misma zona de disponibilidad. La coubicación de discos está garantizada para discos Ultra y Premium v2, el mejor esfuerzo para los discos Premium V1 y no se garantiza para los discos SKU estándar (SSD o HDD).

En el caso excepcional de una interrupción zonal completa, cualquiera o todas las instancias del conjunto de escalado pueden verse afectadas.

Dominios de error y zonas de disponibilidad

Un dominio de error es un grupo de aislamiento de errores dentro de una zona de disponibilidad o centro de datos de nodos de hardware que comparten la misma potencia, red, refrigeración y programación de mantenimiento de la plataforma. Es probable que las instancias de máquina virtual que se encuentren en dominios de error diferentes se vean afectadas por la misma interrupción planeada o no planeada. Puede especificar cómo se distribuyen las instancias entre dominios de error dentro de una región o zona.

  • Propagación máxima (platformFaultDomainCount = 1)
  • Propagación fija estática (platformFaultDomainCount = 5)
  • Propagación alineada con dominios de error de disco de almacenamiento (platformFaultDomainCount = 2 o 3, solo para implementaciones regionales)

Con la propagación máxima, el conjunto de escalado propaga las máquinas virtuales en tantos dominios de error como sea posible dentro de cada zona. Esta propagación podría incluir más o menos de cinco dominios de error por zona. Con la propagación fija estática, el conjunto de escalado propaga las máquinas virtuales en exactamente cinco dominios de error por zona. Si el conjunto de escalado no encuentra cinco dominios de error distintos por zona para satisfacer la solicitud de asignación, se produce un error en la solicitud.

Se recomienda implementar con propagación máxima la mayoría de las cargas de trabajo, ya que este enfoque ofrece la mejor propagación en la mayoría de los casos. Si necesita que las réplicas se incluyan en unidades de aislamiento de hardware distintas, se recomienda la propagación en distintas zonas de disponibilidad y el empleo de la propagación máxima en cada una de ellas.

Nota:

Con la propagación máxima, solo verá un dominio de error en la vista de la instancia de la máquina virtual del conjunto de escalado y en los metadatos de la instancia, independientemente de cuántos dominios de error están propagando las máquinas virtuales. La propagación dentro de cada zona es implícita.

Grupos de selección de ubicación

Importante

Los grupos de selección de ubicación solo se aplican a los conjuntos de escalado de máquinas virtuales que se ejecutan en el modo de orquestación Uniforme.

Al implementar un conjunto de escalado,puede realizar la implementación con un único grupo de selección de ubicación por Availability Zone o con varios por zona. Para los conjuntos de escalado regionales (no zonales), la opción es tener un único grupo de selección de ubicación en la región o tener varios. Si la propiedad singlePlacementGroup del conjunto de escalado se establece en false, el conjunto de escalado puede estar compuesto por varios grupos de selección de ubicación y tiene un intervalo de 0 a 1000 máquinas virtuales. Cuando se establece en el valor predeterminado true, el conjunto de escalado se compone de un solo grupo de selección de ubicación y tiene un intervalo de 0 a 100 máquinas virtuales. Para la mayoría de las cargas de trabajo, se recomiendan varios grupos de selección de ubicación, lo que permite mayor escala. En la versión 2017-12-01 de la API, los conjuntos de escalado de una o varias zonas tienen varios grupos de selección de ubicación de manera predeterminada, pero se cambia de manera predeterminada a un único grupo para los conjuntos de escalado regionales (no zonales).

Nota:

Si usa la propagación máxima, debe usar varios grupos de selección de ubicación.

Equilibrio de zona

Por último, para conjuntos de escalado implementados en varias zonas, también tiene la opción de elegir la "mejor opción de equilibrio de zonas" o "equilibrio de zonas estricto". Un conjunto de escalado se considera “equilibrado” si cada zona tiene el mismo número de VM +\- 1 VM que en todas las otras zonas del conjunto de escalado. Por ejemplo:

  • Se considera equilibrado un conjunto de escalado con dos máquinas virtuales en la zona 1, tres en la zona 2 y tres en la zona 3. Hay solo una zona con un recuento de VM diferentes y es solo 1 menor que las demás zonas.
  • Se considera equilibrado un conjunto de escalado con una máquina virtual en la zona 1, tres en la zona 2 y tres en la zona 3. La zona 1 tiene 2 VM menos que las zonas 2 y 3.

Es posible que las máquinas virtuales del conjunto de escalado se creen correctamente, aunque sus extensiones no puedan realizar la implementación. Estas máquinas virtuales con errores de extensión se siguen teniendo en cuenta para determinar si un conjunto de escalado está equilibrado. Por ejemplo, un conjunto de escalado con tres máquinas virtuales en la zona 1, tres en la zona 2 y tres en la zona 3 se considera equilibrado aunque todas las extensiones produzcan un error en la zona 1 y sean correctas en las zonas 2 y 3.

Con la mejor opción de equilibrio de zonas, el conjunto de escalado intenta aumentarse y reducirse horizontalmente, y conserva el equilibrio. Sin embargo, si por alguna razón el equilibrio de zonas no es posible (por ejemplo, que una zona deje de funcionar, y, como consecuencia, el conjunto de escala no pueda crear una máquina virtual en esa zona), el conjunto de escalado permite el desequilibrio temporal para realizar correctamente el aumento o la reducción horizontal. Para los posteriores intentos de escalado horizontal, el conjunto de escalado e máquinas virtuales a las zonas donde se necesitan más para conseguir el equilibrio. Análogamente, para los posteriores intentos de reducción horizontal, el conjunto de escalado elimina máquinas virtuales de las zonas donde se necesitan menos para conseguir el equilibrio. Con el equilibrio de zonas estricto, el conjunto de escalado produce un error al intentar el aumento o la reducción horizontal si ello causara desequilibrio.

Para usar la mejor opción de equilibrio de zonas, establezca zoneBalance en false. Esta es la configuración predeterminada de la API versión 2017-12-01. Para usar el equilibrio de zonas estricto, establezca zoneBalance en true.

Nota:

La propiedad zoneBalance solo se puede establecer si la propiedad zones del conjunto de escalado contiene más de una zona. Si no hay zonas o solo se especifica una, la propiedad zoneBalance no se debe establecer.

Creación de conjuntos de escalado zonales o de expansión de zona

Cuando implementa un conjunto de escalado de máquinas virtuales, puede elegir usar una sola zona de disponibilidad en una región, o bien varias zonas.

Puede crear un conjunto de escalado que use las Zonas de disponibilidad con uno de los métodos siguientes:

Uso de Azure Portal

El proceso para crear un conjunto de escalado que usa una zona de disponibilidad es igual al que se detalla en el artículo de introducción. Cuando selecciona una región de Azure compatible, puede crear un conjunto de escalado en una o varias de las zonas disponibles, tal como se muestra en el ejemplo siguiente:

Creación de un conjunto de escalado en una sola zona de disponibilidad

El conjunto de escalado y los recursos de apoyo, como la dirección IP pública y Azure Load Balancer, se crean en la zona única que se especifica.

Uso de la CLI de Azure

El proceso para crear un conjunto de escalado que usa una zona de disponibilidad es igual al que se detalla en el artículo de introducción. Para usar las Zonas de disponibilidad, debe crear el conjunto de escalado en una región de Azure compatible.

Agregue el parámetro --zones al comando az vmss create y especifique qué zona se usará (como la zona 1, 2 o 3).

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image <SKU Image> \
    --upgrade-policy-mode automatic \
    --admin-username azureuser \
    --generate-ssh-keys \
    --zones 1 2 3

Se tardan unos minutos en crear y configurar todos los recursos de conjunto de escalado y máquinas virtuales en las zonas que especifica. Para ver un ejemplo completo de los recursos de red y un conjunto de escalado con redundancia de zona, consulte este script de CLI de ejemplo

Uso de Azure PowerShell

Para usar las Zonas de disponibilidad, debe crear el conjunto de escalado en una región de Azure compatible. Agregue el parámetro -Zone al comando New-AzVmssConfig y especifique qué zonas se usarán (como la zona 1, 2 o 3).

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "EastUS2" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic" `
  -Zone "1", "2", "3"

Utilización de plantillas del Administrador de recursos de Azure

El proceso para crear un conjunto de escalado que usa una zona de disponibilidad es igual al que se detalla en el artículo de introducción para Linux o Windows.

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "East US 2",
  "apiVersion": "2017-12-01",
  "zones": [
        "1",
        "2",
        "3"
      ]
}

Si crea un equilibrador de carga o una dirección IP pública especifique la propiedad "sku": {"name":"Standard"} para crear los recursos de red con redundancia de zona. También debe crear un grupo de seguridad de red y reglas para permitir cualquier tráfico. Para obtener más información, consulte Introducción a Azure Load Balancer Estándar y Load Balancer Estándar y zonas de disponibilidad.

Para ver un ejemplo completo de un conjunto de escalado con redundancia de zona y recursos de red, consulte nuestra plantilla de muestra de Resource Manager.

Actualice el conjunto de escalas para agregar las zonas de disponibilidad

Puede modificar una escala para expandir el conjunto de zonas sobre las cuales se van a distribuir las instancias de la máquina virtual. La expansión le permite aprovechar el Acuerdo de Nivel de Servicio de disponibilidad zonal más alto (99,99 %) frente al Acuerdo de Nivel de Servicio de disponibilidad regional (99,95 %). O bien, expanda el conjunto de escalado para aprovechar las nuevas zonas de disponibilidad que no estaban disponibles cuando se creó el conjunto de escalado.

Importante

La actualización de Virtual Machine Scale Sets para agregar zonas de disponibilidad está actualmente en versión preliminar. Las versiones preliminares están a su disposición con la condición de que acepte los Términos de uso adicionales. Es posible que algunos de los aspectos de esta característica cambien antes de ofrecer disponibilidad general.

Importante

Esta característica está pensada para cargas de trabajo sin estado en Virtual Machine Scale Sets. Los conjuntos de escalado con cargas de trabajo con estado o que se usan con Service Fabric o Azure Kubernetes Services no se admiten para la expansión zonal.

Esta característica se puede usar con la API versión 2023-03-01 o posterior.

Habilitación de la suscripción para usar la característica de expansión zonal

Debe registrarse para cuatro marcas de características en la suscripción:

az feature register --namespace Microsoft.Compute --name VmssAllowRegionalToZonalMigration
az feature register --namespace Microsoft.Compute --name VmssAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowRegionalToZonalMigration

Puede comprobar el estado de registro de cada característica mediante:

az feature show --namespace Microsoft.Compute --name \<feature-name\>

Expansión del conjunto de escalado para usar zonas de disponibilidad

Puede actualizar el conjunto de escalado para escalar horizontalmente las instancias a una o varias zonas de disponibilidad adicionales, hasta el número de zonas de disponibilidad admitidas por la región. En el caso de las regiones que admiten zonas, el número mínimo de zonas es 3.

Importante

Al expandir el conjunto de escalas a zonas adicionales, las instancias originales no migran ni se modifican. Al escalar, se crearán nuevas instancias y se distribuirán de manera uniforme en las zonas de disponibilidad seleccionadas. Al escalar en el conjunto de escalado, las instancias regionales se priorizarán primero para su eliminación. Después de eso, las instancias se eliminarán en función de la escala en la política.

La expansión a un conjunto de escalado zonal se realiza en tres pasos:

  1. Preparación para la expansión zonal
  2. Actualizar el parámetro zones en el conjunto de escalado
  3. Adición de nuevas instancias zonales y eliminación de instancias originales

Preparación para la expansión zonal

Advertencia

Esta característica permite agregar zonas al conjunto de escalado. No puede volver a un conjunto de escalado regional ni quitar zonas una vez que se hayan agregado.

Para prepararse para la expansión zonal:

  • Compruebe que tiene suficiente cuota para el tamaño de máquina virtual en la región seleccionada para controlar más instancias.
  • Compruebe que el tamaño de máquina virtual y los tipos de disco que está usando están disponibles en todas las zonas deseadas. Puede usar la API de SKU de recursos de proceso para determinar qué tamaños están disponibles en qué zonas
  • Compruebe que la configuración del conjunto de escalado es válida para los conjuntos de escalado zonales:
    • platformFaultDomainCount debe establecerse entre 1 y 5. No se admite la propagación fija con 2 o 3 dominios de error para las implementaciones zonales.
    • No se admiten reservas de capacidad durante la expansión de zona. Una vez que el conjunto de escalado es totalmente zonal (no más instancias regionales), puede agregar un grupo de reserva de capacidad al conjunto de escalado.
    • No se admiten implementaciones de Azure Dedicated Host.

Actualización del parámetro zones en el conjunto de escalado

Actualice el conjunto de escalado para cambiar el parámetro zones.

  1. Ir al conjunto de escalado que desea configurar
  2. En la pestaña Propiedades de la página de aterrizaje del conjunto de escalado, busque la propiedad Zona de disponibilidad y presione Editar.
  3. En el cuadro de diálogo Editar ubicación, seleccione las zonas deseadas.
  4. Seleccione Aplicar.

Adición de nuevas instancias zonales y eliminación de instancias originales

Escalado y reducción horizontal de forma manual

Actualice la capacidad del conjunto de escalado para agregar más instancias. La nueva capacidad debe establecerse en la capacidad original más el número de instancias nuevas. Por ejemplo, si el conjunto de escalado tenía 5 instancias regionales y desea escalar horizontalmente para que tenga tres instancias en cada una de las tres zonas, debe establecer la capacidad en 14.

Puede actualizar el parámetro zones y la capacidad del conjunto de escalado en la misma plantilla de ARM o llamada a la API de REST.

Cuando esté seguro de que las nuevas instancias están listas, reduzca horizontalmente el conjunto de escalado para quitar las instancias regionales originales. Puede eliminar manualmente las instancias regionales específicas o reducir horizontalmente la capacidad del conjunto de escalado. Al reducir horizontalmente mediante la reducción de la capacidad del conjunto de escalado, la plataforma siempre prefiere quitar las instancias regionales y, a continuación, seguir la directiva de escalado.

Automatización con actualizaciones graduales + MaxSurge

Con las actualizaciones graduales + MaxSurge, se crean nuevas instancias zonales y se actualizan con el modelo de escalado más reciente en lotes. Una vez que se agrega un lote de nuevas instancias al conjunto de escalado y se notifica como correcto, se automatiza un lote de instancias antiguas del conjunto de escalado. Las actualizaciones continúan hasta que se actualizan todas las instancias.

Importante

Las actualizaciones graduales con MaxSurge se encuentran actualmente en versión preliminar pública. Solo están disponibles para el modo de orquestación uniforme de VMSS.

Problemas y limitaciones conocidos

  • La versión preliminar está destinada a cargas de trabajo sin estado en Virtual Machine Scale Sets.

  • No se admiten conjuntos de escalado que ejecutan Service Fabric o Azure Kubernetes Service.

  • No se pueden quitar ni reemplazar zonas, solo se pueden agregar zonas.

  • No se puede actualizar desde un conjunto de escalado zonal o de expansión de zona a un conjunto de escalado regional.

  • platformFaultDomainCount debe establecerse entre 1 y 5. No se admite la propagación fija con 2 o 3 dominios de error para las implementaciones zonales.

  • No se admiten reservas de capacidad durante la expansión de zona. Una vez que el conjunto de escalado es totalmente zonal (no más instancias regionales), puede agregar un grupo de reserva de capacidad al conjunto de escalado.

  • No se admiten implementaciones de Azure Dedicated Host

Pasos siguientes

Ahora que ha creado un conjunto de escalado en una zona de disponibilidad, puede aprender a implementar aplicaciones en conjuntos de escalado de máquinas virtuales o usar el escalado automático con conjuntos de escalado de máquinas virtuales.