Load Balance vs. Round Robin DNS


Federico Edelman Anaya nos ha mandado a la lista de correo este mensaje que más que eso es un artículo, está tan trabajado que creo que merece la pena que lo veais… no lo resuelve todo, pero eso es lo mejor, plantea preguntas interesantes.

Nota: si quereis mandar vuestros propios artículos o sugerirnos temas, enlaces, etc., podeis hacerlo. Recuerdo que hace poco alguien mandó algunas sugerencias. Yo personalmente no les hice caso porque no tenia tiempo y creo que pasó lo mismo con los demás autores/editores de Bulma porque al final no se ha publicado nada de eso O:-) pero si quereis insistir os prometo que esta vez estudiaremos detenidamente todas vuestras propuestas. Ya sabeis: en la columna izquierda, el enlace que dice “¿Sugerencias?” es todo vuestro 🙂

Load Balance vs. Round Robin DNS
——————————–

Introducción:
Este texto surgió a partir de una investigación que realicé para
encontrar algún software OpenSource que permitiera realizar Load Balance. Ya
que las alternativas comerciales como los BigIP de F5 son realmente costosas
y no iba a necesitar todos los features que F5 provee o muchos de ellos
pueden ser suplantados por el Packet Filter de OpenBSD. No quiero desviarme
de tema, ni quiero generar una disputa sobre lo que acabo de mencionar 🙂
simplemente quiero compartir la experiencia que llevé a cabo y que hoy me
permite balancear la carga del pool de unos cuantos servidores que
administro.

Las pruebas fueron realizadas para comprobar la efectividad del software
de Load Balance
OpenSource llamado “pen”. Se repitieron multiples veces las mismas pruebas a
fin de comprar las posibles variaciones de los resultados. No hubo
variaciones significativas por lo que se tomaron los resultados de las
pruebas últimas. Todas las pruebas fueron realizadas en una LAN local.

Hardware utilizado:

+ Web Server 1 (172.16.4.1): Pentium III 450 Mhz RAM 128 MB
(Linux Debian 2.2rev3 Kernel 2.4.13)
+ Web Server 2 (172.16.4.2): Sun Netra t1 440 Mhz RAM 256 MB
(Solaris 7 + 7 Recommended)
+ Stress Server (172.16.4.3): Pentium III 450 Mhz RAM 128 MB
(Linux Debian 2.2rev3 Kernel 2.4.13)

Software utilizado:

– Web Servers: apache 1.3.19 + php-4.0.6.
– DNS: Bind 8.2.3-REL-NOESW
– Stress Application: ab from apache
– Load Balance: pen-0.6.1

Pruebas:

Paso 1:
a- Se creó un Round Robin DNS “rr.dominio.com” que apuntará a las IP de
webserver1 y webserver2.
——– snip snip ———-
rr.dominio.com IN A 172.16.4.1
IN A 172.16.4.2
——– snip snip ———-

b- Se creó un entrada DNS “lb.dominio.com” para el Load Balance.
——– snip snip ———-
lb.dominio.com IN A 172.16.4.3
——– snip snip ———-

Paso 2: El Load Balance Server se ejecutó:
# ./pen -w pen.html -p pen.pid -l pen.log 8080 -r webserver1:80
webserver2:80

Paso 3: Se configuró un index.php en cada Web Server con el siguiente
contenido:

—— snip snip ——
<?
print “this is a test …”;
print “webserverX”;
>>
—— snip snip ——

Paso 4: Se ejecutó desde el Stress Server el siguiente comando:

a- Prueba de Round Robin:
# ./ab -n 1000 -c 100 “http://rr.dominio.com/index.php”

b- Prueba de Load Balance:
# ./ab -n 1000 -c 100 “http://lb.dominio.com:8080/index.php”

Resultados:
Los resultados de las pruebas fueron los siguientes:

a- Round Robin test:
——————- snip snip ——————–
Benchmarking rr.dominio.com (be patient)…

Server Software: Apache/1.3.19
Server Hostname: rr.dominio.com
Server Port: 80

Document Path: /index.php
Document Length: 22 bytes

Concurrency Level: 100
Time taken for tests: 4.268 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 283898 bytes
HTML transferred: 22000 bytes
Requests per second: 234.30
Transfer rate: 66.52 kb/s received

Connnection Times (ms)
min avg max
Connect: 0 1 15
Processing: 23 403 1110
Total: 23 404 1125
——————- snip snip ——————–

b- Load Balance test:
——————- snip snip ——————–
Benchmarking lb.dominio.com (be patient)…

Server Software: Apache/1.3.19
Server Hostname: lb.dominio.com
Server Port: 8080

Document Path: /index.php
Document Length: 22 bytes

Concurrency Level: 100
Time taken for tests: 2.502 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 238443 bytes
HTML transferred: 22000 bytes
Requests per second: 399.68
Transfer rate: 95.30 kb/s received

Connnection Times (ms)
min avg max
Connect: 0 2 43
Processing: 5 23 139
Total: 5 25 182
——————- snip snip ——————–

Conclusión:

– Se puede observar que el transfer rate es mayor en el Load Balance.
– Los Request per second fueron mayores en el Load Balance.
– La prueba fue realizada en menos tiempo para el Load Balance.
– Abrió más rapido las conexiones más rápido para el Round Robin, pero fue
más lento el procesamiento y el total.

El algoritmo de Round Robin traduce una IP para un nombre de dominio de un
conjunto de IPs. La asignación es secuencial otorgando la primera IP a la
primera consulta, la segunda IP a la segunda consulta, la tercer IP a la
tercer consulta y una vez concluidas la cantidad de IPs se vuelve a asignar
la primer IP a la consulta que le sigue, la segunda IP a la consulta
posterior y así sucesivamente repitiéndose el ciclo.

Sin embargo, Bind pareciera no respetar este mecanismo, ya que traduce las
IPs siguiendo otra metodología a la explicada en el parrafo anterior.
(Alguien que explique esta incógnita) 🙂

Esto supone que es por eso que conecta más rápido, ya que no tiene que pasar
por el TCP proxy (pen). Y probablemente los Web Server recibieran una
cantidad diferente de carga (no pareja), con lo cual a medida que aumentan
las conexiones concurrentes el servidor responde más lento.

En definitiva, mi conclusión es que el pen permite distribuir de manera
mucho más pareja la carga, y en caso de que alguno de los servidores o
servicio (en este caso HTTP) no estuvieran corriendo, nunca el pen
intentaría rutearles conexiones evitando que el usuario se encuentre con un
error de conexión evidente. Es por ésto que pienso que es altamente superior
el balanceo de carga mediante pen que mediante Round Robin DNS from Bind8.

En el tintero:
Lo que no conozco es cómo se comporta pen en cuanto a la seguridad. Si es
posible realizar spoofing, DoS attack, o cualquier otro tipo de ataques que
afecten el servicio.
Ojo!, por este motivo no estoy de acuerdo con que el Round Robin DNS de
Bind sea mejor, ya que Bind contiene numerosos bugs y agujeros de seguridad.
En todo caso tomaría como alternativa utilizar djbDNS
http://cr.yp.to/djbdns.html
Propongo realizar algún tipo de investigación de pen, tanto del código
como si alguien ha reportado algún tipo de problemas con su utilización. Por
mi parte, ya me encuentro investigándolo 🙂

References:
– http://siag.nu/pen/
– http://www.isc.org/products/BIND/

Federico Edelman Anaya
[email protected]
[email protected]
System Administrator / Network Administrator

Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1217 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.