Windows Azure IaaS: Administrar la disponibilidad de las VMs (Availability Set)

En el post anterior os mostraba cómo era posible balancear la carga entre dos VMs en Windows Azure IaaS, pero queda un segundo escenario que abordar: Siempre que trabajemos en un entorno, ya sea Windows Azure o bien On Premise, debemos tener en cuenta la disponibilidad del servicio en todo momento. ¿Qué ocurriría si la red fallase? ¿O si un rack fallara? y, por otro lado, ¿Cómo llevamos a cabo las actualizaciones del sistema? ¿Paramos el servicio completamente o controlamos que uno de los nodos siga dando servicio? Todos estos factores deberían estar controlados si queremos que nuestro servicio siempre esté disponible y, por ello, Windows Azure lo resuelve con lo que llaman Fault Domains y Update Domains.

Fault Domains y Update Domains

Una vez que tenemos claro a qué tipos de factores podemos enfrentarnos, tenemos que conocer estos dos términos:

Fault Domain
Se trata de áreas diferenciadas dentro del datacenter de Windows Azure, con el objetivo de evitar puntos de fallo físicos, como la red, la fuente de alimentación de los racks, etcétera. Está muy relacionado con los racks dentro del datacenter. Cuando desplegamos varias máquinas virtuales con el mismo rol lo ideal es que las mismas estén distribuidas por el datacenter en fault domains separados.
Update Domain
La plataforma, como cualquier otro datacenter, necesita realizar tareas de mantenimiento de los sistemas operativos que hacen de host a nuestras máquinas virtuales. Para este escenario tenemos los update domains, los cuales nos permiten que las máquinas estén lógicamente separadas, de tal modo que no dejen de dar servicio a la vez todas aquellas que están desempeñando un mismo rol.

Para verlo más claro, esta es la imagen que se muestra en la documentación oficial del portal de Windows Azure:

updatedomains

Esta configuración se realiza de manera automática en PaaS, ya que cuando subimos nuestras soluciones ya estamos identificando a qué rol va a pertenecer cada una de nuestras máquinas. Sin embargo, en IaaS la plataforma desconoce qué es lo que tenemos en nuestras VMs o cómo están relacionadas entre sí. Para ello, tenemos la capacidad de configurar esta relación manualmente a través de los availability sets.

Availability Set

Una vez que ya entendemos por qué necesitamos esta característica, lo que nos permiten los availability sets es decir qué máquinas tienen el mismo rol, de tal manera que la plataforma impida que dichas VM estén en el mismo rack y en el mismo update domain. Si nos fijamos en las máquinas virtuales del post anterior, en el cloud service que las aloja podemos comprobar en el apartado INSTANCES que ambas pertenecen al mismo update y fault domains:

myiisservice cloud service fault and update domain

Para solucionar esto, lo que debemos hacer es volver al apartado VIRTUAL MACHINES y acceder al apartado CONFIGURE. En él tenemos la opción AVAILABILITY SET, donde nos ofrece la posibilidad de seleccionar uno ya creado o crear uno nuevo. En la VM1 he definido uno llamado IIS-AV-SET y guardando la configuración. Esta acción puede realizarse durante la creación de la máquina virtual y es recomendable hacerlo en ese punto, ya que al crearlo después significa que alguna de las máquinas será movida a una ubicación diferente y la misma será reiniciada.
Una vez que ha finalizado la configuración de la primera máquina, nos aparece un mensaje de advertencia:

Availability set warning

Básicamente lo que significa es que no podemos tener una sola máquina en un availability set, lo cual es totalmente lógico.

Accedemos a la configuración de la segunda máquina y seleccionamos el set que acabamos de configurar. Guardamos los cambios y esperamos a que finalice la operación.

Si volvemos al apartado INSTANCES del cloud service, comprobaremos que la máquina VM 1 está en el Update Domain 0, Fault Domain 0 y la máquina VM 2 en el Update Domain 1 Fault Domain 1.

Availability set added

Espero que sea de utilidad.

¡Saludos!