DNS Load Balancing

El servicio DNS es ampliamente conocido por todos los que nos dedicamos a las TIC. Este servicio simplemente trata de resolver los nombres de dominio y traducirlos a direccionamiento IP, facilitando el acceso a los recursos a través de su nombre en lugar de tener que recordar la IP. Por tanto, estamos hablando de un servicio muy importante que si no está accesible muchos usuarios pueden llegar a pensar que no tienen acceso a Internet.

Sin embargo, un servicio tan “simple”, y a la vez tan importante, como el DNS no sólo realiza funciones de traducción de nombre a IP, sino que también tiene otras cualidades como resolución inversa de DNS, muy útil para la detección de servidores de Spam, y balanceo de carga. Esta última característica nos permite distribuir la carga de nuestros servidores e incluso realizar Geobalanceo basándonos en la dirección IP origen de las solicitudes.

Para distribuir la capacidad de los servidores será necesario definir en el fichero de la zona DNS tantos registros tipo A como servidores a balancear. Por ejemplo, podemos ver a continuación que el servicio FTP tiene tres nodos mientras que el servicio WWW tiene dos nodos.


Una vez que el usuario realice la petición DNS sobre el servicio balanceado, el servidor DNS devolverá tantos registros como haya definido en la zona. Y mediante el atributo rrset-order implementará un método u otro de balanceo de carga, pudiendo utilizar:
  • Fixed: Los registros son devueltos en el orden que están definidos en la zona.
  • Random: Los registros son devueltos de manera aleatoria.
  • Ciclic: Los registros son devueltos utilizando el algoritmo Round Robin.
Esta funcionalidad es fácil de ver y comprobar si realizamos peticiones DNS mediante nslookup a por ejemplo www.google.es. A continuación podemos ver cómo www.google.es nos devuelve cuatro direcciones IP para acceder a su buscador web, y si realizamos la misma operación varias veces podremos ver cómo el orden de las respuestas puede variar:


Una vez recibida la respuesta DNS, el sistema operativo del usuario elegirá una IP de entre las disponibles para acceder al servicio web. Algunos sistemas operativos elegirán la primera IP, mientras que otros como Windows dependerá de si tienen la pila IPv6 instalada, además de la máscara del cliente. En cualquier caso, si el recurso solicitado es una página web, la mayoría de los navegadores actuales son capaces de detectar de si el recurso es alcanzable, si no lo está utilizará la siguiente IP de la lista entregada por el servidor DNS.

Mientras que para realizar Geobalanceo deberemos utilizar la función Split Horizon, donde la respuesta dependerá de la dirección IP origen de la solicitud DNS, es decir, podemos tener un servidor web en Los Ángeles y otro en Nueva York de tal manera que los usuarios de Los Ángeles siempre accederán al servidor de Los Ángeles y los usuarios de Nueva York al servidor de Nueva York. Y si el servidor de Los Ángeles se encuentra inaccesible, el servidor de DNS comenzará a resolver con la dirección IP de Nueva York:


Ahora muchos estaréis pensando ¿para qué comprar un balanceador de carga si podemos realizar las mismas funciones con el DNS? Un balanceador de carga, además de distribuir la carga de los servidores es capaz de proporcionar alta disponibilidad ya que los usuarios siempre accederán a la misma dirección IP y no se enterarán si uno de los nodos cae. Mientras que en una solución de balanceo de carga por DNS, el navegador tiene que darse cuenta que el servicio está inaccesible para posteriormente utilizar otra IP, además cuantas más IPs tenga disponible el usuario más posibilidades hay de que una de ellas falle. Por otro lado, con una solución de balanceo de carga basado en el DNS es necesario bajar el TTL a 0 para que el resto de servidores DNS no cacheen las peticiones y por tanto el número de peticiones y la carga hacia tu servidor de DNS será mucho mayor, además otro problema del cacheo lo podemos encontrar en los navegadores de los clientes ya que por ejemplo Internet Explorer mantiene la resolución de nombres durante 30 minutos.

En definitiva, con un balanceador de carga tenemos mayor control sobre la carga que queremos aplicar a cada uno de los nodos, además de poder realizar funciones de health check para comprobar si uno de los nodos no se encuentra disponible y así dejar de enviarle peticiones. Esta última característica de health check no está disponible con el balanceo de carga basado en DNS y si uno de los nodos no está accesible será necesario de manera manual eliminar la entrada del servidor DNS, a no ser que utilices DNS Failover & System Monitoring que utiliza las técnicas de Global Server Load Balancing para balancear y monitorizar los servicios.

Por último, muchos pueden estar pensando, ¿cómo compañías como Google utilizan balanceo de carga basado en DNS? Realmente ellos utilizan este sistema para repartir la carga pero no para proporcionar alta disponibilidad, es decir, los usuarios finales realizan peticiones sobre un cluster balanceado como podemos ver en la siguiente imagen, proporcionando alta disponibilidad y balanceo de carga:

 
Un saludo amigos.

Commentaires