Equilibrar el tráfico entre servidores web utilizando IP CEF en equipos de red

La tarea consistía en implementar una solución tolerante a fallas para dos servidores web y, si es posible, implementar el equilibrio de carga entre servidores web, ya que a veces una base de datos no podía hacer frente a todas las solicitudes. No fue posible comprar equipo especial, en relación con el cual se inventó el siguiente esquema. Quizás la idea no sea original, pero en Internet no encontré nada parecido. Nuestra topología es la siguiente:

Mi imagen
Hay un enrutador Cisco que trae servidores web a Internet. Dos servidores web en Centos 7 con nginx. Las direcciones IP del primer y segundo servidor web son 192.168.20.176/24 y 192.168.20.177/24, respectivamente. Para implementar el plan, los servidores web deben establecer la misma dirección IP secundaria. Puede ser cualquier dirección IP privada que no se use en su red. Seleccioné 192.168.120.175 y lo registré con la dirección IP secundaria de la interfaz eth0 principal de los servidores web. En Centos, esto se hace creando el archivo eth0: 0 en el directorio / etc / sysconfig / network-scripts /. Contenido del archivo:

TYPE="Ethernet" DEVICE=eth0:0 BOOTPROTO="static" IPADDR=192.168.120.175 NETMASK=255.255.255.255 ONBOOT="yes" 

Es importante tener en cuenta que se usa la máscara 255.255.255.255 y esto evita cualquier conflicto de IP, ya que los servidores web no la usarán para generar tráfico. Por así decirlo, tendremos interfaces Loopback en servidores web.

Después de eso, el enrutador puede implementar el equilibrio de carga mediante enrutamiento estático. Esta tecnología se implementa utilizando IP Cef en los enrutadores Cisco. Enlace aquí . Otros vendedores pueden tener ciertos matices.

En Cisco, la distribución de hilos puede ser de dos maneras:

  • Por destino (predeterminado). Necesitamos esta opción Todos los paquetes de una transmisión se enviarán a uno de los dos servidores. El principio de funcionamiento es que el hash se calcula por las direcciones IP de origen y de destino, y dependiendo de este hash, se selecciona la primera ruta (servidor) o la segunda. A continuación, modificaremos ligeramente este comportamiento.
  • Por paquete. Esta opción no nos conviene, ya que el equilibrio se producirá en los paquetes. En términos generales, el primer paquete en la primera ruta, el segundo paquete en el segundo.

Prescribimos dos rutas con la ayuda de los comandos:

 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.176 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.177 

Por lo tanto, ambas rutas se instalarán en la tabla de enrutamiento y la distribución de carga se realizará a lo largo de ellas:

Mi imagen

También verificamos si el método de equilibrio está seleccionado correctamente:

Mi imagen

La dirección IP de origen cambiará y la IP de destino siempre se dejará sola. Esto puede afectar la uniformidad de equilibrio, dada la NAT. Para la optimización, puede considerar el puerto de origen, que será aleatoriamente diferente, dependiendo de la sesión del cliente. Para hacer esto, use el siguiente comando:

 ip cef load-sharing algorithm include-ports source 

También debe configurar NAT estática para redirigir las solicitudes web a la dirección 192.168.120.175:

 ip nat inside source static tcp 192.168.120.175 80 interface GigabitEthernet0/1 80 

¿Qué obtenemos? Las solicitudes de los usuarios de Internet irán a nuestro enrutador, que las distribuirá entre nuestros servidores por flujos, dependiendo del puerto de origen en TCP. Cuando abre una nueva sesión, el cliente puede acceder al nuevo servidor.

¿Qué sucede si uno de los servidores falla? La ruta que condujo a este servidor se eliminará de la tabla de enrutamiento. Para optimizar este proceso, puede usar IP SLA. Monitoree el estado de los servidores haciendo ping cada 10 segundos:

 ip sla 10 icmp-echo 192.168.20.176 frequency 10 ip sla schedule 10 life forever start-time now ip sla 20 icmp-echo 192.168.20.177 frequency 10 ip sla schedule 20 life forever start-time now 

Luego, agregue monitoreo a las rutas apropiadas:

 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.176 track 10 ip route 192.168.120.175 255.255.255.255 GigabitEthernet0/0 192.168.20.177 track 20 

IP SLA en los enrutadores Cisco también permite el monitoreo mediante solicitudes HTTP GET, lo que ayudará a determinar el bloqueo del servidor web no solo por su ausencia en la red, sino también cuando el servicio web está inactivo.

Por lo tanto, para construir dicho esquema no se requiere equipo adicional ni ningún software para servidores web. Todo lo que necesita es un enrutador con la capacidad de equilibrar el tráfico.

Source: https://habr.com/ru/post/es418915/


All Articles