En un post anterior vimos un pequeño ejemplo de un balanceo de carga web con el módulo mod_proxy_server de Apache. Esta vez vamos a ver también balanceo en un sentido más amplio (es decir, sin ceñirnos a un entorno en concreto, como podría ser el web). Al contrario, LVS (Linux Virtual Server) nos va a servir para balancear muchos tipos de servicio. El mismo gráfico que usamos para definir los clientes, el frontend y los backends del mod_proxy_server de Apache serviría, pero como la configuración no es tan sencilla como en el caso de mod_proxy_server (dónde definíamos los nodos del balanceador como urls), veamos una imagen de lo que vamos a montar. En el gráfico se muestran los elementos imprescindibles que necesitaremos para la infraestructura unidos por lineas negras, mientras que los opcionales (aunque recomendables y que aquí usaremos) son los unidos por lineas discontinuas naranjas. Así pues, será necesario disponer de una máquina que hará de LVS DIRECTOR y otra (como mínimo una) que hará de REALSERVER (REALSERVER1). Usaré un portátil para lo primero y un sobremesa para lo segundo. Además, una tercera máquina hará las funciones de REALSERVER2 para poder ver realmente la tarea de balanceo; un ROUTER ADSL será el gateway (GW) del LVS DIRECTOR, permitiendo ofrecer el servicio balanceado públicamente, y un smartphone me hará las veces de cliente, pudiendo usarse bien para realizar los requests web desde dentro de la propia LAN o bien desde Internet (pero en cualquier caso siempre a través del router, dado que es el GW del LVS DIRECTOR). En cuanto a la estructura de red del gráfico es importante hacer notar que como usaremos la modalidad NAT de LVS (LVS NAT), vamos a trabajar con 2 rangos de red: 192.168.2.x (donde se halla la Virtual Interface (VIF) del LVS DIRECTOR o frontend, donde éste recibirá las pecitiones que reenviará a los REALSERVERS, nodos o backends) y 192.168.1.x (para la estructura interna del balanceo o comunicación entre LVS DIRECTOR y REALSERVERS). Asimismo, comentar que si bien es recomendable que el LVS DIRECTOR disponga de 2 interfaces de red físicos, no es imprescindible. En este ejemplo y a modo de prueba usaremos únicamente un interfaz de red con 2 direcciones ip (eth0 y eth0.110, a la que llaman VIF). Instalación, configuración y prueba
apt-get install ipvsadm echo "1" > /proc/sys/net/ipv4/ip_forward # (O editar /etc/sysctl.conf, net.ipv4.ip_forward = 1 y sysctl -p) cat /proc/sys/net/ipv4/ip_forward echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects cat /proc/sys/net/ipv4/conf/all/send_redirects echo "0" > /proc/sys/net/ipv4/conf/default/send_redirects cat /proc/sys/net/ipv4/conf/default/send_redirects echo "0" > /proc/sys/net/ipv4/conf/eth0/send_redirects cat /proc/sys/net/ipv4/conf/eth0/send_redirects ifconfig eth0 192.168.1.9 broadcast 192.168.1.255 netmask 255.255.255.0 ifconfig eth0:110 192.168.2.110 broadcast 192.168.2.255 netmask 255.255.255.0 # VIF route add default gw 192.168.2.1 netmask 0.0.0.0 metric 1 apt-get install apache2 echo "Realserver1" > /var/www/index.html ifconfig eth0 192.168.1.11 broadcast 192.168.1.255 netmask 255.255.255.0 route add default gw 192.168.1.9 ping 192.168.1.9 # Ve el GW? Seguimos... ping 192.168.2.110 # Ve el VIF? Seguimos... apt-get install apache2 echo "Realserver2" > /var/www/index.html ifconfig eth0 192.168.1.12 broadcast 192.168.1.255 netmask 255.255.255.0 route add default gw 192.168.1.9 ping 192.168.1.9 # Ve el GW? Seguimos... ping 192.168.2.110 # Ve el VIF? Seguimos... ipvsadm -C ipvsadm -A -t 192.168.2.110:80 -s rr ipvsadm -a -t 192.168.2.110:80 -r 192.168.1.11:80 -m -w 1 ipvsadm -a -t 192.168.2.110:80 -r 192.168.1.12:80 -m -w 1 ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP plas.local:http rr -> 192.168.1.11:http Masq 1 0 0 -> 192.168.1.12:http Masq 1 0 0 Y básicamente sería esto: achievement unlocked! Notas adicionales
Referencias http://www.ultramonkey.org/papers/lvs_tutorial/html/ http://www.austintek.com/#LVS-HOWTOs Comentarios (0) |