1 Andago 2006 1 1 Alta Disponibilidad y Balanceo de Carga en Linux --------- Andago Ingeniería S.L. Javier Turégano Molina
2 Andago 2006 2 2 Indice INDICE Introducción Heartbeat IPVS Keepalived DRBD Preguntas
3 Andago 2006 3 3 Introducción Un cluster de alta disponibilidad es un conjunto de dos o más máquinas, que se caracterizan porque el fallo en una de las máquinas no hace detenerse el servicio que ofrecen en conjunto. Si se produce un fallo del hardware o de las aplicaciones de alguna de las máquinas del cluster, el software de alta disponibilidad es capaz de rearrancar automáticamente los servicios que han fallado en cualquiera de las otras máquinas del cluster. Esta capacidad de recuperación automática de servicios nos garantiza la integridad de la información, ya que no hay pérdida de datos, y además evita molestias a los usuarios, que no tienen por qué notar que se ha producido un problema.
4 Andago 2006 4 4 Introducción Otra capacidad deseable en un cluster de servicio es la de balanceo de carga. Esto nos permite compartir las tareas de servicio entre varios nodos de forma transparente para el usuario, redirigiendo las peticiones entre ellos y atendiendolas en paralelo. Esto nos permite un crecimiento de tipo horizontal, añadiendo nuevos nodos al servicio en caso de que sean necesarios. Al igual que en el caso de la alta disponibilidad habremos de vigilar el caso de que algún nodo quede fuera de servicio y mantenerlo fuera del balanceo hasta que vuelva a estar operativo.
5 Andago 2006 5 5 Introducción Otro de los elementos importantes a la hora de diseñar un cluster es la posibilidad de compartición de datos entre los nodos. Dependiendo del tipo de aplicaciones que vayamos a utilizar podremos utilizar las caraceristicas de un sistema de base de datos o un almacenamiento compartido. Una de las alternativas más usuales para el almacenamiento compartido es el uso de dispositivos conectables a varios nodos (como cabinas SCSI o SANs de fibra óptica). Otra más económica es utilizar el propio almacenamiento de los nodos de forma compartida entre ellos.
6 Andago 2006 6 6 Introducción En Linux disponemos de todas las herramientas para poder crear nuestro propio cluster de servicio con éxito. Vamos a ver algunas de ellas: -Alta disponibilidad: Heartbeat - Balanceo de carga: IPVS + Keepalived - Almacenamiento compartido: DRBD Por último se presentarán algunos casos de éxito llevados a cabo por Andago donde se han utilizado estas técnologias.
7 Andago 2006 7 7 HEARTBEAT :: HEARTBEAT :: http://www.linux-ha.org/HeartbeatProgram
8 Andago 2006 8 8 HEARTBEAT Heartbeat es uno de los componentes principales del proyecto Linux-HA (Linux Hight Availability). Es altamente portable, y funciona sobre cualquier plataforma Linux y también sobre FreeBSD y Solaris. Nos ofrece detección de nodos caidos, comunicación y gestión de cluster en un solo proceso.
9 Andago 2006 9 9 ¿Cómo funciona Heartbeat? Como su propio nombre indica Heartbeat utiliza un sistema de latidos para que los nodos chequeen si el resto de nodos están en funcionamiento. Es muy recomendable utilizar uno o varios recursos dedicados para la comprobación del estado de los otros nodos. Podemos utilizar una tarjeta de red dedicada y un cable serie- serie para asegurar la redundancia y que el fallo en el medio de transmisión del latido no nos haga equivocarnos.
10 Andago 2006 10 ¿Cómo funciona Heartbeat? La primera tarea es asignar una serie de recursos a cada nodo del cluster. Estos pueden incluir: Dirección IP de servicio Servidores activos Maestro de almacenamiento Estas tareas o paquetes de tareas se ejecutarán en el nodo predefinido inicialmente. En caso de fallo otro elemento del cluster será el encargado de ejecutar sus tareas. Así el servicio continua ininterrumpido.
11 Andago 2006 11 Heartbeat (Activo - Pasivo) ALTA DISPONIBILIDAD ACTIVO-PASIVO Una configuración de alta disponibilidad es de modo Activo- Pasivo, cuando un servidor realiza las tareas de servicio mientras disponemos otro servidor de respaldo en caso de fallo.
12 Andago 2006 12 Heartbeat (Activo - Pasivo) Web Z Z Z IP
13 Andago 2006 13 Heartbeat (Activo – Pasivo Multiservicio) ALTA DISPONIBILIDAD ACTIVO-PASIVO MULTISERVICIO También podemos tener una configuración en que todos los nodos están activos con una determinada tarea, pero en caso de que uno de los nodos falle, el resto pueden asumir sus tareas.
14 Andago 2006 14 Heartbeat (Activo – Pasivo Multiservicio) Web Smtp BDD Web Smtp
15 Andago 2006 15 Heartbeat (Failover) Cuando el nodo que falló vuelve a estar activo podemos definir dos modos de actuación: Autofailback on: El nodo original recuperará sus servicios. Autofailback off: El poseedor actual de los servicios los mantendrá hasta que se produzca un reinicio o caida del mismo.
16 Andago 2006 16 Hearbeat (Autofailback on) Web Smtp BDD Web Smtp
17 Andago 2006 17 Configuración de Heartbeat Hearbeat se configura a través de dos ficheros de configuración principales: /etc/ha.d/ha.cf – En el que se encuentra la configuración general de heartbeat. /etc/ha.d/haresources – Donde se definen que servicios corresponden a qué nodos dentro del cluster. Este fichero ha de ser igual en todos los nodos del cluster.
18 Andago 2006 18 Configuración de Heartbeat /etc/ha.d/ha.cf logfile /var/log/ha-log logfacility local0 keepalive 2 warntime 3 deadtime 12 initdead 30 auto_failback off udpport 694 bcast eth1 ping 192.168.17.2 192.168.17.1 node constantinopla node alejandria respawn hacluster /usr/lib/heartbeat/ipfail
19 Andago 2006 19 Configuración de Heartbeat Ejemplo Activo – Pasivo /etc/ha.d/haresources constantinopla 192.168.1.1 apache postfix alejandria Ejemplo Activo – Pasivo Multiservicio /etc/ha.d/haresources constantinopla 192.168.1.1 apache postfix alejandria 192.168.1.2 mysql
20 Andago 2006 20 IPVS :: IPVS (IP Virtual Server) :: http://www.linuxvirtualserver.org/software/ipvs.html IPVS implementa balanceo de carga a nivel de la capa de transporte dentro del kernel de Linux (layer4-switching). IPVS corriendo en un servidor al frente de un cluster de servidores actua como un balanceador de carga. Puede redirigir conexiones a servicios TCP/UDP a los servidores reales, y así hacer parecer que estos servicios de varios servidores como un único servicio virtual para una IP.
21 Andago 2006 21 IPVS
22 Andago 2006 22 IPVS - Caracteristicas Caracteristicas: ● Soporte para protocolos UDP y TCP ● Tres métodos de reenvio de paquetes: ● NAT ● Tunneling ● Direct Routing ● Ocho algoritmos de balanceo de carga: ● Round robin, weighted round robin, least-connec-tion, weighted least-connection, locality-based least-connection, locality-based least-connection with replication, destination-hashing, and source- hashing
23 Andago 2006 23 IPVS Versiones: La versión estable actual es ipvs 1.2.1 y está incluida de serie en los kernel de linux a partir de la versión 2.6.10. Para los kernels 2.4 también tenemos disponible la versión de ipvs 1.0.12 a partir del kernel 2.4.28. Aparte del módulo del kernel disponemos de una aplicación en línea de comandos para administrarlo: ipvsadm
24 Andago 2006 24 Ejemplo - IPVS Ejemplo: Vamos a configurar un balanceador con IPVS para que distribuya el tráfico que reciba por el puerto 80 a 5 servidores reales. El método de redirección utilizado en este ejemplo será Forwarding, con el que enmascararemos cada uno de los 5 servidores con la ip del balanceador con IPVS.
25 Andago 2006 25 Ejemplo - IPVS Añadimos un servicio virtual para 207.175.44.110: $ ipvsadm -A -t 207.175.44.110:80 -s rr Añadimos los servidores al servicio virtual: $ ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m $ ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m $ ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m $ ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m $ ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m
26 Andago 2006 26 Ejemplo - IPVS Como estamos utilizando masquerading habremos de activar la opción de masquerading del kernel utilizando /proc: $ echo "1" > /proc/sys/net/ipv4/ip_forward Podemos listar las rutas definidas y activas para nuestro IPVS utilizando: $ ipvsadm -l Ipvsadm también nos va a permitir modificar en cualquier momento los servicios y servidores utilizados. Por ejemplo puede sernos útil para mantemiento de los equipos servidores.
27 Andago 2006 27 Failover en IPVS Ahora supongamos que uno de los servidores que tenemos asignado a nuestro servicio web cae. Cada vez que IPVS reenvie una de las peticiones hacia ese servidor, esta no podrá ser atendida, creando un fallo en el servicio de forma intermitente. Para solucionarlo podemos utilizar: Keepalived
28 Andago 2006 28 Keepalived :: KEEPALIVED :: http://www.keepalived.org/
29 Andago 2006 29 Keepalived El objetivo principal de Keepalived es añadir una utilidad fuerte y robusta de recuperación ante fallos en el proyecto de Linux Virtual Server. Está escrito en C y nos provee de un sistema de chequeos multicapa sobre la pila TCP/IP. Nos permite trabajar en 3 capas: 3, 4 y 5/7.
30 Andago 2006 30 Keepalived Keepalived actua como un demonio que nos permite chequear el estado del pool de servidores Cuando uno de los servidores del grupo cae, Keepalived informa al kernel através de una llamada setsockopt para eliminar de la topologia de LVS la entrada correspondiente para ese servidor. Igualmente cuando el servicio en ese servidor vuelve a estar disponible vuelve a añadir la entrada y este vuelve a estar disponible para dar servicio al exterior.
31 Andago 2006 31 Esquema Keepalived
32 Andago 2006 32 Keepalived
33 Andago 2006 33 Configuración de Keepalived /etc/keepalived/keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 192.168.18.2 smtp_connect_timeout 30 lvs_id BALANCEADOR1_LVS }
34 Andago 2006 34 Configuración de Keepalived vrrp_instance VI_EXTERNA { state MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 150 advert_int 1 smtp_alert authentication { auth_type PASS auth_pass example } virtual_ipaddress { 192.168.17.115} }
35 Andago 2006 35 Configuración de Keepalived virtual_server 192.168.17.115 110 { delay_loop 6 lb_algo wlc lb_kind NAT nat_mask 255.255.255.0 protocol TCP real_server 192.168.5.1 110 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 110 } } real_server 192.168.5.2 110 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 110 } } }
36 Andago 2006 36 DRBD :: DRBD :: http://www.drbd.org/ Drbd es un dispositivo de bloques que está diseñado para construir "clusters" de alta disponibilidad. Se realiza por medio de una copia idéntica de todo un dispositivo de bloques através de una red (dedicada). Lo podemos ver como un RAID-1 en red.
37 Andago 2006 37 DRBD Drbd toma los datos, los escribe en el disco local y los envía al otro "host". En el otro "host", éste pone los datos en el disco. Ahora sólo tenemos que combinar nuestro almacenamiento conpartido con un servicio de pertenencia a un "cluster", que puede ser heartbeat, y algún tipo de aplicación que trabaje en un nivel más alto que un dispositivo de bloques. Puede servirnos cómo una alternativa más barata que un hardware compartido como pueden ser buses SCSI compatidos o Canales de Fibra.
38 Andago 2006 38 ¿Cómo funciona DRBD? Cada dispositivo (drbd provee más de uno de estos dispositivos) tiene un estado, que puede ser 'primario' or 'secundario'. En el nodo en el que se encuentra el dispositivo primario la aplicación debe correr y acceder al dispositivo (/dev/nbX). Cada operación de escritura es enviada al 'dispositivo de bloques de más bajo nivel' local y al nodo con el dispositivo en estado 'secundario'. El dispositivo secundario simplemente escribe los datos en su dispositivo de bloques de más bajo nivel. Las operaciones de lectura son llevadas a cabo siempre localmente.
39 Andago 2006 39 ¿Cómo funciona DRBD? Si el nodo primario falla, heartbeat pasa el dispositivo secundario al estado primario e inicia la aplicación ahí. (Si estamos usando drbd con un sistema de archivos "sin journaling" esto implica lanzar fsck). Si el nodo que ha fallado se restablece, entra a funcionar como un nuevo nodo secundario y tiene que sincronizar su contenido con el nodo primario. Esto, por supuesto, debería ocurrir sin provocar ninguna interrupción del servicio.
40 Andago 2006 40 Inicializando DRBD Cargamos el módulo: $ modprobe drbd Inicializamos: $ drbdadm up all Comprobamos el estado inicial: $ cat /proc/drbd' Version: 0.7.0 svn $Rev: 1442 $ (api:74/proto:74) 0: cs:Connected st:Secondary/Secondary ld:Inconsistent ns:0 nr:0 dw:0 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0
41 Andago 2006 41 Maestro DRBD Ambos nodos son secundarios y están en estado inconsistente, es el momento de elegir un nodo maestro, así que en él ejecutamos: root@maestro:~$ drbdadm -- --do-what-I-say primary all Usamos --do-what-I-say para forzar la replicación en el exclavo machacando posibles datos. Comienza la replicación: root@maestro:~$ cat /proc/drbd 0: cs:SyncSource st:Primary/Secondary ld:Consistent ns:12940824 nr:0 dw:87492 dr:13690591 al:109 bm:1668 lo:1000 pe:1876 ua:1000 ap:0 [========>...........] sync'ed: 44.4% (15858/28487)M finish: 0:09:20 speed: 28,933 (25,160) K/sec
42 Andago 2006 42 Maestro DRBD Ahora podemos crear un sistema de ficheros sobre el dispositivo y está listo para ser usado, por ejemplo: root@maestro:~$ mkreiserfs /dev/drbd0 root@maestro:~$ mount /dev/drbd0 /mnt/datos root@maestro:~$ touch /mnt/datos/prueba
43 Andago 2006 43 Por último podriamos comprobar que en el nodo exclavo tenemos los mismos datos pasando este a maestro: root@maestro:~$ umount /mnt/datos root@maestro:~$ drbdadm secondary all root@exclavo:~$ drbdadm primary all root@exclavo:~$ mount /dev/drbd0 /mnt/datos root@exclavo:~$ ls -la /mnt/datos total 8 drwxr-xr-x 2 root root 4096 2006-04-19 23:35. drwxr-xr-x 65 root root 4096 2006-04-19 23:35.. -rw-r--r-- 1 root root 0 2006-04-19 23:35 prueba
44 Andago 2006 44 Heartbeat + DRBD HEARTBEAT + DRBD Podemos utilizar fácilmente drbd dentro de un cluster utilizando heartbeat ya que este viene completamente preparado para ello. Heartbeat se encargará del montaje del nodo maestro de drbd y de en caso de caida de este de que alguno de los nodos exclavos asuma el papel de maestro gracias a que ya tiene todos los datos replicados.
45 Andago 2006 45 Preguntas ¿?¿? ¿?¿? jturegano (at ) andago.com