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
Enregistrer un commentaire