Cómo usar Custom Load Balance y Affinity en Windows Azure #windowsazure

Introducción

Windows Azure tiene la característica de balanceador de carga incluido dentro del servicio, no es un cobro extra como en otras soluciones de Nube. Este servicio de balanceo está disponible tanto para aplicaciones Cloud Services (PaaS) como para servicios que corren en máquinas virtuales (Iaas).

El balanceador de Azure tiene el criterio de distribución de carga llamado Round Robin y no soporta sticky session, hasta ahora. Esto produce un reto para las compañías que tienen aplicaciones que no son State Less.

En ese contexto, y no como la primera opción a recomendar, podemos hacer un Walkaround utilizando nuestro propio sistema de balanceo basado en Aplication Request Routing (ARR) de Internet Information Server (IIS). Con esto podemos implementar un escenario donde tenemos ARR corriendo en máquinas virtuales, que balancean la carga hacia servidores Web que se encuentren en otro Cloud Service con la opción de afinidad.

Este es un escenario muy potente porque estamos tomando el control del balanceador, agregando la capacidad de afinidad de sesiones y conectado IaaS con PaaS dentro del mismo sistema. . Aquí, una pieza clave para unir los dos mundos (IaaS con PaaS) son las redes virtuales.El escenario que vamos a implementar se muestra en la figura 1.

escenario de demo

Este articulo lo divido en dos partes, para que sea más simple su lectura. La primera parte configura el primer ARR y hace pruebas de balanceo junto con afinidad.

En la segunda parte vamos a completar el escenario de la figura 1.

Paso a paso para implementar ARR con balanceador y afinidad

Primero vamos a implementar un escenario más sencillo que nos permita entender cómo se implementa y configura ARR en Windows Azure. La idea es solo crear un ARR y que este balancee tráfico a dos sitios web de terceros para luego agregarle afinidad. El escenario de prueba inicial lo podemos ver en la figura 2.

Escenario de prueba

1.      Crear una Red Virtual

En la figura 1 se muestra el escenario que buscamos armar en este artículo. Para lograrlo debemos comunicar directamente el Cloud Service que contiene las máquinas virtuales con el que contiene las aplicaciones Web. Esto es conectar IaaS con PaaS, una de las maravillas que nos permite hacer Azure.

La unión des diferentes Cloud Services se logra a través del uso de una red virtual. La red virtual debe ser creada primero, para así estar disponible al momento de crear las máquinas virtuales y aplicaciones Web.

Para crear una red virtual, en el portal se selecciona la opción New, Networks y Custom Create como muestra la figura 3.

i1

Luego, ingresamos el nombre de la red y el grupo de afinidad. Es un requisito tener un grupo de afinidad para tener una red virtual.

i2

El siguiente paso en el asistente es la creación y asignación del espacio de direccionamiento. Para asignar direcciones tenemos dos opciones de nomenclatura, COUNT y CIDR. CDIR es la clásica de los administradores de red, que definen máscaras y con eso determinan la cantidad de direcciones IP del segmento. Por otra parte, COUNT es el método para desarrolladores donde defines el número de direcciones IP que necesitas en el segmento de manera directa y más simpe.

Para nuestro escenario vamos a definir una sub red para los balanceadores (máquinas virtuales con ARR) y otro para las aplicaciones Web (PaaS)

i3

Con esto ya tenemos definida nuestra virtual la cual será utilizada en los próximos pasos.

2.      Crear un Servidor Windows Server 2012

Vamos a crear un servidor con Windows Server 2012 en una Máquina virtual de Windows Azure. Para ello, desde el portal se selecciona la opción de crear una máquina virtual desde la galería. Seleccionamos la imagen de Windows Server 2012 Datacenter y avanzamos en el asistente de creación.

i4

Le asignamos el nombre de ARR1 a la VM y definimos el usuario administrador. La versión del realeas no es importante para nuestros objetivos porque básicamente solo necesitamos IIS.

i5

En el paso 3 debemos definir el DNS name, en este caso demoARRblog. Este es el DNS del Cloud Service y será el mismo que tendrá la segunda máquina virtual con ARR. Muy importante en este paso es seleccionar la red virtual que creamos en el primer paso y la sub net de balanceadores, como se muestra en la siguiente figura.

i6.0

Por ultimo nos preguntan por el Availability Set, para este demo no lo necesitamos, en producción obvio que sí, lo dejamos en blanco.

Con esto ya hemos creado nuestro primer servidor Virtual en la subnet de balanceadores. Una vez creada la VM, podemos ver en el Dashboard de la red virtual que aparece el recurso ya alocado en la red y sub red definidas.

i6.0.1

3.      Configuración de IIS en Windows Server

Lo primero que vamos ha hacer es modificar las configuraciones de seguridad del explorador para poder acceder a internet. Para los administradores seleccionamos OFF.

i7

Luego en Server Manager, agregamos el ROL de Web Server (IIS) y las herramientas de administración.

i8

A continuación en los servicios del rol agregamos los por defecto para luego confirmar la instalación.

i9

4.      Instalación de Aplication Request Routing (ARR)

Ahora, utilizando Internet Information Services (IIS) manager, vamos a instalar ARR. Para ello, al entrar al IIS Manager, nos aparece el siguiente dialogo donde nos preguntan si queremos conectarnos a la plataforma de componentes Web, le decimos que sí.

i12

Esto nos lleva al sitio Web donde podemos bajar e instalar gratuitamente Web Plaform Installer. Lo bajamos e instalamos en nuestro servidor virtual.

i13

Luego buscamos el Web Platform Installer 4.5 por ARR como se muestra en la siguiente figura. Lo agregamos aprontando el botón ADD y luego lo instalamos.

i15

El proceso de instalación termina con la siguiente pantalla de confirmación.

i18

5.      Publicar Puerto 80/http de la Máquina Virtual

Para poder acceder al servidor Web de nuestro servidor Virtual debemos exponer el servicio a través de un EndPoint. Existen los EndPoint externos e internos. Para que un usuario pueda acceder al nuestro servidor Web, tenemos que crear un EndPoint externo en el puerto 80.

Para hacer esto, vamos al portal de Azure y en la máquina virtual buscamos la pestaña que dice ENDPOINTS. Ahí apretamos agregar y se inicia el asistente para crear el EndPoint. Vamos a crear uno con las siguientes características

  1. Nombre: WWW
  2. Protocolo: TCP
  3. Puerto público: 80
  4. Puerto Privado: 80

i8.1

Ahora podemos conectarnos utilizando un Browser a nuestro servidor virtual.

i18.1

6.      Crear una Server Farm de pruebas con Aplication Request Routing (ARR)

En este punto ya tenemos el primer servidor virtual con ARR instalado y podemos crear ya la primera server FARM para poder probar las características de ARR. Una Server FARM es una granja de servidores que se comportan como un solo servidor lógico que está compuesto por varias instancias de servidores, físicos o virtuales.

El escenario de pruebas que usaremos se ilustra en la siguiente imagen. La idea es que el ARR1 sirva como balanceador de carga que dirige los requerimientos que se envían a http://demoarrblog.cloudapp.net a dos sitios web públicos, www.dell.com y www.amazon.com.

Escenario de prueba

Primero creamos un Server Farm. Para esto vamos a IIS Manager y vamos a ver que ahora aparece dentro del árbol de nuestro servidor una hoja que se llama Server Farm. Esto es lo que nos agregó la instalación de ARR.

i19

Si iniciamos el asistente de crear una nueva Server Farm, lo primero que nos pregunta es el nombre y si está estará Online. En nuestro caso, vamos a llamarla BalanceadorSitiosExternos y estará Online. Como siguiente paso vamos a agregar los servidores que componen la granja, 143.166.224.244 para DELL y 176.32.98.166 para Amazon.

i22.1

Cuando damos Finalizar al asistente, aparece el siguiente dialogo que nos pregunta si queremos que las reglas de ruteo se creen automáticamente. Le decimos que sí, ya que esas son las reglas que buscamos crear para redirigir los requerimientos hacia los dos sitios externos.

i23

Por último vamos ha configurar el método de distribución de carga. Para ello vamos a nuestra granja y seleccionamos Load Balance.

i26

Vamos a utilizar el criterio de distribución de carga llamada Weigted Round Robin, que distribuye los requerimientos de manera homogénea entre ambos sitios si los configuramos con el mismo peso relativo, como aparece en la siguiente imagen.

i27

Una vez que aplicamos los cambios, podemos cargar varias veces el sitio Web http://demoarrblog.cloudapp.net y vamos a ver el comportamiento del balanceador funcionado. Alternadamente nos muestra el contenido del sitio Web de DELL y Amanzon, en la URL del Cloud Service!

Podemos ver en las dos siguientes capturas de pantalla la prueba de ejecución.

i27.1i27.2

7.      Pruebas de Server Affinity con Aplication Request Routing (ARR)

La última prueba que vamos a realizar es la de afinidad (affinity). La afinidad es la capacidad de mantener al cliente final conectado siempre al mismo servidor de la granja de servidores. Por ejemplo, si un usuario entra en nuestro servicio y el balanceador lo envío la primera vez al sitio Web de Dell, la afinidad hace que todos los siguientes requerimientos de ese cliente sean dirigidos hacia ese servidor hasta que se cumpla un tiempo de inactividad o ese servidor se encuentre fuera de línea.

La opción de affinity se utiliza para que aplicaciones Web que no están preparadas para ser balanceadas porque no son state less. Cuando se trabaja en la nube, especialmente en PaaS, lo ideal es que nuestras aplicaciones Web sean State Less porque eso permite escalar sin ningún problema. El uso de ARR es un Walk Arround para las aplicaciones Web que no cumplen con esta característica de no tener estado.

Para configurar Server Affinity con Aplication Request Routing (ARR) vamos a la opción de Server Affinity de nuestra granja de servidores como muestra la figura.

i29

En esa opción seleccionamos Client Affinity y aplicamos el cambio. Esta característica se basa en el uso de cookies en el cliente, que permite al ARR conocer cuál fue el servidor de la granja que le asigno en el primer requerimiento de ese cliente y continúa enviándolo ahí.

i30

Una vez configurado podemos probar que el cliente siempre será enviado al mismo sevidor. En mi caso, con Explorer  cargue mi sitio y me envió al servidor de Dell. Todos los siguientes requerimientos con ese Browser van al mismo sitio de Dell.

i31

ara comprobar la afinidad, ahora utilizaré otro browser para cargar el sitio. Esto equivale a otro cliente, por lo que me envía a Amazon. Todos los recargar que hago me envían al mismo servidor.

i32

Próximos pasos

En esta primera parte hemos creado y configurado un servidor virtual con Aplication Request Routing (ARR). En el siguiente artículo voy a desarrollar el escenario completo, como se muestra en la figura 1, es decir una aplicación Web corriendo en PaaS, balanceada con ARR con mis propios criterios y con Server Affinity para crear afinidad entre el cliente y el servidor que lo atiende en la Server Farm.

Links relacionados

 

4 comentarios en “Cómo usar Custom Load Balance y Affinity en Windows Azure #windowsazure

  1. Pingback: Windows Azure Session Affinity en Java/Tomcat con HTTPS/SSL #windowsazure | ..:: Liarjo of Locksley ::..

  2. Pingback: Enterprise Video: Local cache para Azure Media Services #azure | ..:: Liarjo of Locksley ::..

Deja un comentario