sábado, 10 de abril de 2010

¿Cómo funciona el balanceo de carga?

El load balancing es una función del IOS, y está disponible en todas las plataformas de ruteo. Es parte del proceso de forwarding y se activa autmáticamente si la tabla de ruteo tiene trayectorias múltiples hacia el destino. Se basa en los protocolos estándar de ruteo, tales como RIP, RIPv2,EIGRP, IGRP, OSPF; o se deriva de las rutas estáticas y los mecanismos de reenvío de paquetes configurados. Le permite a un router usar múltiples caminos a un destino cuando reenvía paquetes.

Cuando un router conoce múltiples rutas a un destino por medio de procesos de ruteo, instala la ruta con la distancia administrativa más baja en la tabla de ruteo.
Distancias Administrativas por Default
Connected:           0
Static:                  1
eBGP:                 20
EIGRP (internal): 90
IGRP:               100
OSPF:              110
IS-IS:               115
RIP:                 120
EIGRP (external): 170
iBGP:               200
EIGRP summary route: 5

A veces el router debe seleccionar una ruta entre vairas que aprendió por el mismo proceso con la misma distancia administrativa. En ese caso, escoge cual tiene el menor costo hacia el destino. Cada proceso de ruteo calcula sus costos diferente y a veces se requiere manipularlos para lograr el balanceo.

Si el router recibe varias trayectorias con la misma distancia administrativa y costo hacia un destino, el balanceo de cargas puede ocurrir. El número de trayectorias usadas está limitado por el número de entradas que el protocolo de ruteo pone en la tabla de ruteo. Cuatro entradas en el default in IOS para la mayoría de los protocolos de ruteo, a excepción de BGP, donde el default es una entrada. El máximo a configurar es 6.

Los procesos de ruteo de IGRP e EIGRP también soportan trayectorias múltiples balanceo de cargas con costos distintos. Usamos el comando maximum-paths para determinar el número de rutas que puede ser instalado basado en el valor configurado en el protocolo. Si fijamos la tabla de ruteo a una entrada, se desactiva el balanceo de cargas. El proceso de balanceo entre trayectorias con costos distintos se llama varianza (variance)

Podemos usar el comando show ip route para encontrar rutas con costos iguales; en este ejemplo su salida tiene dos bloques, cada uno es una ruta. El asterisco corresponde a la ruta activa que es usada para tráfico nuevo, es decir, un único paquete o un flujo entero de datos, dependiendo del tipo de conmutación configurada.
  • Para el balanceo por process-switching, el balanceo de cargas está basado por paquete y el asterisco señala la interfase sobre la que se enviará el próximo paquete.
  • Para el balanceo por fast-switching, que es efectuado basado en los destino, el asterisco señala la interfase sobre la que se enviará el siguiente flujo de datos basados en su destino.
La posición del asterisco se mantiene rotando entre las trayectorias de costo igual cada vez que un paquete o flujo es enviado.
M2515-B# show ip route 1.0.0.0
Routing entry for 1.0.0.0/8
Known via "rip", distance 120, metric 1
Redistributing via rip
Advertised by rip (self originated)
Last update from 192.168.75.7 on Serial1, 00:00:00 ago
Routing Descriptor Blocks:
* 192.168.57.7, from 192.168.57.7, 00:00:18 ago, via Serial0
Route metric is 1, traffic share count is 1
192.168.75.7, from 192.168.75.7, 00:00:00 ago, via Serial1
Route metric is 1, traffic share count is 1

Podemos configurar el balanceo para que trabaje por destino o por paquete.
El balanceo por destino significa que el router distribuye los paquetes basado en la dirección de destino. Dadas dos trayectorias a la misma red, todos los paquetes para el destino1 en la red irán por la trayectoria1; todos los paquetes hacia el destino2 irán por la trayectoria2. Ésto preserva el orden de los paquetes, con el riesgo potencial de no hacer uso de los enlaces de manera desigual. Si un host recibe la mayoría del tráfico, todos los paquetes irán por ese enlace, lo que deja el ancho de banda de otros enlaces sin uso. Un número grande de direcciones de destino lleva a usos más equilibrados de los enlaces. Para lograr un mejor equilibrio, podemos usar el IOS para construir una entrada de caché de rutas para cada dirección de destino, en lugar de cada red de destino, como es el caso cuando sólo existe una trayectoria. De ahí que el tráfico para diferentes hosts dentro de la misma red de destino pueda usar diferentes trayectorias para llegar a su destino. La desventaja es que este proceso es altamente demandante para los routers de core backbone, ya que los requerimientos de proceso y memoria para mantener el caché son muy pesados.

El balanceo por paquete significa que el router envía un paquete a la red de destino1 por la trayectoria1, el siguiente paquete, que podría ser también para la red de destino1, será enviado por la trayectoria2, y así. Este método hace un uso más equilibrado de los enlaces, pero tiene el riesgo potencial de que los paquetes arriben en un orden distinto al que fueron enviados. EL IOS, excepto el 11.1CC, desactiva la aceleración de reenvío (forwarding acceleration) por caché de rutas cuando usamos el balanceo por paquete; porque la información del route cache incluye la interfase de salida. Para el balanceo por paquete, el proceso de reenvío (forwarding) determina la interfase de salida para cada paquete buscando en la tabla de ruteo y escogiendo la interfase menos usada. Así se asegura el uso equilibrado de los enlaces, pero es una tarea muy intensiva para el procesador que impacta sobre el desempeño general del forwarding. Esta forma de balanceo no es recomendable para interfases de alta velocidad.

El método a escoger, por destino o por paquete, depende del tipo de conmutación usada para los paquetes de IP. Por default en la mayoría de los routers Cisco, el fast switching está activo en la configuración de las interfases. Este es es un esquema de caché que efectúa el balanceo por destino. Para activar el balanceo por paquete, hay que activar el process switching (o desactivar el fast switching), con los comandos:
Router# config t
Router(config)# interface Ethernet 0
Router(config-if)# no ip route-cache
Router(config-if)# ^Z

Y ahora el CPU del router mira o procesa cada paquete y balancea en el número de rutas que hay en la tabla de ruteo para su destino. Aquí podría crashear un router pequeño porque el CPU hace todo le proceso. Para reactivar el fast switching:

Router# config t
Router(config)# interface Ethernet 0
Router(config-if)# ip route-cache
Router(config-if)# ^Z

Los procesos de switching más nuevos como CEF (Cisco Express Forwarding) te permiten hacer un balanceo por destino y por paquete más rápidamente; pero implica que usemos más recursos para mantener las entradas y adjacencias de CEF.

Cuando usamos CEF, podríamos preguntar, ¿quién hace el balanceo, CEF o el protocolo de ruteo usado?. La manera en que trabaja CEF es que hace la conmutación de paquetes basado en la tabla de ruteo que está siendo poblada por los protocolos de ruteo (como EIGRP). En resumen, CEF hace el balanceo una vez que se calcula la tabla del protocolo de ruteo.

Cisco.com

11 comentarios :

  1. Muy buena explicación, me dio entender varias cosas que no sabia.

    ResponderEliminar
  2. Muy buena explicación....
    Un Saludo desde Lima

    ResponderEliminar
  3. Gracias por el aporte..


    Una duda tengo un router 2801 y 2 enlaces DSL como podria balancearlo? es conveniente hacerlo por destino o por paquete???

    ResponderEliminar
  4. me djo gringo se daña el router? mejora la calidad de banda ancha?

    ResponderEliminar
  5. entonces el balanceo de cargar no aumenta el ancho de banda como me loa vian dicho antes

    ResponderEliminar
  6. Para que realmente funcione se debe agregar a cada interface:
    1.Para process-switching
    ip load-sharing per-packet
    2.Para fast-switching
    ip load-sharing per-destination

    ResponderEliminar
  7. amigo me gustaria saber entnoces como tendria que hacer el balanceo de cargar puesto que tengo un router con dos conexiones a internet y un switche en el cual tengo 4 vlans me gustaria mucho que me pudieras ayudar.

    ResponderEliminar
  8. megustaria que me recomiendes un ruter que tengan balanceo de cargas pero que las junte para aumentar mi velosidad
    gracias

    ResponderEliminar
  9. Si el balanceo ocupara Eigrp como se balancea la carga, esto es solo con RIP.

    ResponderEliminar
  10. buen dia.
    tengo la necesidad de enviar un paquete a dos destinos diferentes, es decir en la actualidad me llega un paquete a una ip publica + puerto y se la hace NAT para llevarlo a un servidor, pero necesito que cuando ese paquete me llegue el Nat se realice a dos destinos distintos... mi pregunta es, eso es posible de realizar?, tengo un router Mikrotik..
    muchas gracias!

    ResponderEliminar
    Respuestas
    1. Si es posible con un dispositivo de balanceo de cargas, por ejemplo un F5.
      En el caso de tu router, desconozco si tiene esas características, pero usualmente son configuraciones avanzadas que no todos manejan.
      también podrías usar un PAT del IOS de Cisco a un pool de IP en la inside.

      Eliminar