Dec 24, 2008

Alta Disponibilidad y Balanceo de Carga en Linux

A lo largo de varios artículos, voy a describir cómo configurar un sistema de Alta Disponibilidad y Balanceo de Carga bajo máquinas pertenecientes a la familia GNU/Linux. El concepto de Alta Disponibilidad se refiere al hecho de garantizar la continuidad de un determinado servicio independientemente de si ocurre algún tipo de fallo en el sistema. Y con Balanceo de Carga nos estamos refiriendo a la acción de repartir de forma equitativa el conjunto global de peticiones que recibe dicho servicio.

Esta clase de infraestructura es utilizada comúnmente por cualquier compañía que posee un elevado tráfico de datos y necesita ofrecer un conjunto de servicios con unas garantías mínimas de fiabilidad. Imaginemos por un momento la cantidad de peticiones que puede recibir Google a lo largo de un minuto, y pensemos también que conlleva dicha petición: procesarla a través de un servidor web, acceder a una base de datos, realizar una o varias consultas, devolver una serie de resultados, etc. En resumen, una única máquina sería incapaz de realizar todo este proceso individualmente debido al enorme caudal de conexiones y tareas involucradas.

¿Qué es lo que se hace entonces? Acudir al viejo lema de "divide y vencerás". Por un lado se tendrán varias máquinas que exclusivamente se encargarán de atender las conexiones. A continuación, esas peticiones se repartirán (Balanceo de Carga) a distintos servidores web en función de su carga de trabajo. Y por último, estos servidores realizarán las consultas apropiadas a una base de datos distribuida y ubicada en diferentes nodos. Y todo ello garantizando la continuidad del servicio (Alta Disponibilidad), es decir, si alguno de los elementos de la cadena falla, el sistema global seguiría funcionando correctamente y este hecho sería imperceptible para el usuario.



En el esquema de red que se va a desarrollar, se va a configurar un sistema de Alta Disponibilidad mediante Heartbeat, y Balanceo de Carga a través de de ldirectord. La máquina HA1 será el nodo activo, encargado de recibir las peticiones a través de la dirección IP virtual 192.168.1.20 y repartirlas a los dos servidores, LB1 y LB2, empleando para ello la otra dirección IP virtual, 10.0.0.20. En caso de caída de HA1 (se apaga la máquina, se reinicia, pierde el link en su interfaz de red, etc), HA2 levantará las dos direcciones virtuales en sus interfaces de red, pasando en este momento a ser el nodo activo. Si HA1 se vuelve a recuperar, HA2 pasará a ser nuevamente el nodo pasivo (quitará las direcciones virtuales de sus interfaces de red).

Para la base de datos, se utilizará un sistema MySQL Cluster en los nodos LB1 y LB2, siendo HA1 y HA2 los nodos de administración del cluster. Los nodos de almacenamiento serán LB1 y LB2, los cuales tendrán una base de datos compartida y replicada en ambas máquinas, de tal forma que lo que se escriba en una, también se trasladará a la otra. Para aumentar el rendimiento del sistema, MySQL Cluster almacenará la base de datos en memoria.

El proceso encargado de la administración del cluster MySQL residirá en HA1 (nodo activo). En caso de caída de HA1, HA2 levantará dicho demonio de administración. Si se cae uno de los dos nodos de almacenamiento, cuando se vuelva a recuperar sincronizará automáticamente el contenido de su base de datos con la del otro nodo que seguía levantado.

En los dos nodos traseros (LB1 y LB2) también se configurará un servicio web (Apache2) y FTP (vsftpd). En consecuencia, será necesario establecer un área de datos compartida, de forma que los directorios utilizados por Apache y vsftpd sean idénticos en ambas máquinas. Tenemos que pensar que estamos ante un sistema totalmente transparente de cara al usuario: HA1 repartirá peticiones que podrán ser tratadas indistintamente por cualquiera de los dos nodos traseros, es decir, el espacio de almacenamiento de ambos servicios (web y FTP) deberá ser común para ambas máquinas, con lo que si una de ellas graba un dato dentro de este espacio, la otra tenga acceso instantáneo al mismo.

Para configurar todo este entramado, se montará un directorio común en los dos nodos traseros de tipo RAID1 (espejo) mediante GlusterFS, de manera que todo lo que se escriba en uno, se verá automáticamente reflejado en el otro, y viceversa.

De cara a monitorizar periódicamente el estado de los servicios configurados se utilizará el demonio mon. Si alguno de dichos servicios cae, mon podrá tomar distintas medidas así como enviar alertas por email.

También será necesario dotar de una cierta protección a la infraestructura que se va a levantar. Para proteger los puertos del sistema que queden abiertos hacia el exterior, se utilizará la herramienta iptables, de tal forma que se establecerá como política por defecto para todos los paquetes que lleguen a las máquinas (cadena INPUT), la opción de denegar, y se dejarán abiertos aquellos puertos utilizados por los distintos servicios.

Y por último, para que los dos nodos frontales puedan redirigir paquetes hacia los nodos traseros (habilitar el flujo de datos entre los distintos interfaces de red), activaremos el ip_forward en HA1 y HA2. Y para que el sistema funcione correctamente, todos los nodos deberán estar sincronizados horariamente. Para ello cada 60 minutos, se sincronizará la hora de cada máquina mediante un servidor horario externo.

Dec 17, 2008

Rendimiento del Dell Latitude E4200

Continuado con el análisis del portátil Dell Latitude E4200, se van a realizar una serie de pruebas de rendimiento basadas en las herramientas de benchmark expuestas en el artículo anterior.

Estas pruebas consistirán básicamente en medir el rendimiento de la CPU, acceso a disco, ancho de banda y latencias de la memoria RAM y caché. Para un mejor análisis de los datos, la mejor opción será compararlos con los resultados ofrecidos por otro modelo con características distintas: por ejemplo el PC de sobremesa que utilizo en mi casa.

Por lo tanto, vamos a comenzar exponiendo las características hardware de ambos equipos:

Dell Latitude E4200

  • Sistema operativo: Kubuntu 8.10
  • Procesador: Mobile DualCore Intel Core 2 Duo U9400, 1576 MHz (8 x 197)
  • Placa base: Dell Latitude E4200
  • Chipset placa base: Intel Cantiga GS45
  • Memoria: 3024 MB (DD3-1066 DDR3 SDRAM)
  • Tarjeta gráfica: Mobile Intel(R) 4 Series Express Chipset Family
  • Disco duro: Samsung SSD Thin uSATA 6 (59 GB, IDE)

PC casa

  • Sistema operativo: Kubuntu 8.10
  • Procesador: DualCore Intel Core 2 Duo E8400, 3000 Mhz (9 x 333)
  • Placa base: Gigabyte GA-P35-DS3L
  • Chipset placa base: Intel Bearlake P35
  • Memoria: 2x2 GB DDR2-800 DDR2 SDRAM
  • Tarjeta gráfica: NVIDIA GeForce 9600 GT (512 MB)
  • Disco duro: ST3500320AS (500 GB, 7200 RPM, SATA-II)

A continuación pueden verse los resultados ofrecidos por las pruebas:

Como puede observarse en base a los datos anteriores, los resultados ofrecidos por el Dell Latitude E4200 son muy buenos, ya que estamos comparando a un ordenador de sobremesa con unas grandes prestaciones, contra un pequeño portátil que utiliza un procesador de bajo consumo.

Destacar también los tiempos de acceso al disco SSD, que como puede verse, supera con creces la velocidad de escritura de un disco duro convencional.

Dec 16, 2008

Herramientas de benchmark en Linux

Benchmark es una palabra procedente de la lengua inglesa que puede traducirse como "comparativa". El benchmark hace referencia a un conjunto de técnicas que persiguen el objetivo de medir el rendimiento de un sistema hardware o software, o ambos a la vez.

El rendimiento de un sistema se puede medir en base a los resultados de funcionamiento ofrecidos por varios de sus componentes: memoria RAM, memoria caché, disco duro, procesador, tarjeta gráfica, etc. A continuación se van a presentar una serie de herramientas de software libre que nos van a ayudar a obtener estos indicadores en sistemas operativos pertenecientes a la familia GNU/Linux.

Lmbench

Lmbench es un conjunto de scripts que permiten desarrollar distintos tipos de análisis y medidas:

  • Ancho de banda: copia, lectura y escritura en memoria, pipes y TCP.
  • Latencias: cambios de contexto, conexiones TCP/UDP, creación y borrado de archivos, creación de procesos, tratamiento de señales, llamadas al sistema y acceso a memoria.

Una vez instalada la aplicación en la máquina a testear (están disponibles tanto los fuentes como los paquetes instalables para cualquier tipo de repositorio), se creará un directorio con un conjunto de archivos binarios encargados de realizar las medidas comentadas:

# ls -l /usr/lib/lmbench/bin/i686-pc-linux-gnu/
total 3332
-rwxr-xr-x 1 root root 30264 2008-09-21 14:32 bw_file_rd
-rwxr-xr-x 1 root root 34344 2008-09-21 14:32 bw_mem
-rwxr-xr-x 1 root root 30272 2008-09-21 14:32 bw_mmap_rd
-rwxr-xr-x 1 root root 30252 2008-09-21 14:32 bw_pipe
-rwxr-xr-x 1 root root 30296 2008-09-21 14:32 bw_tcp
-rwxr-xr-x 1 root root 30256 2008-09-21 14:32 bw_unix
-rwxr-xr-x 1 root root 153240 2008-09-21 14:32 cache
-rwxr-xr-x 1 root root 30260 2008-09-21 14:32 disk
...

Podremos utilizar cada uno de estos binarios de forma individual para realizar una medida concreta, o se podrá emplear el comando lmbench-run a través del cual, un asistente nos guiará en la configuración de las distintas pruebas de benchmark, las ejecutará y nos presentará un informe del transcurso de las mismas (este comando hará uso de cada uno de los binarios anteriormente citados, cuyo formato y especificación pueden ser consultados a través del man).

Por ejemplo, para comprobar la velocidad de lectura de la memoria RAM ejecutaríamos el siguiente comando:

/usr/lib/lmbench/bin/i686-pc-linux-gnu# ./bw_mem 256m rd
268.44 3913.68

En el ejemplo anterior le hemos dicho a lmbench que lea 256 MB de memoria RAM. Como resultado nos dice que ha leído 268.44 MB, y el ancho de banda correspondiente ha sido de 3913.68 MB/s.

Hardinfo

Hardinfo es una utilidad que proporciona información sobre un determinado sistema operativo, así como del hardware que lo alberga. Además, es capaz de realizar distintos tipos de benchmarks sobre la propia CPU:

  • CPU Zlib: compresión de 64 MB de datos.
  • CPU Fibonacci: cálculo del número 42 de Fibonacci.
  • CPU MD5: obtener el MD5 de un fichero de 312 MB.
  • CPU SHA1: obtener el SHA1 de un fichero de 312 MB.
  • CPU Blowfish: cifrado de un fichero mediante el algoritmo Blowfish.

Dd

Dd es una herramienta integrada en los sistemas Linux que permite el copiado bit a bit, independientemente del sistema de archivos origen y destino. Esta utilidad te muestra la velocidad de lectura o escritura con la que se ha realizado la operación. Por lo tanto, podrá ser empleada para medir la velocidad de acceso al disco duro.

  • Escritura: copia de XXXX · YYYY bytes desde el dispositivo origen /dev/zero al fichero /tmp/output.

     dd if=/dev/zero of=/tmp/output bs=XXXX count=YYYY

  • Lectura: lectura de XXXX · YYYY bytes desde el disco /dev/sda al dispositivo /dev/null.

     dd if=/dev/sda of=/dev/null bs=XXXX count=YYYY

Recordar que /dev/zero es un archivo especial que cuando se lee de él, provee caracteres NULL, es decir, su tiempo de lectura es prácticamente nulo, o dicho de otra forma, su acceso posee un ancho de banda que tiende a infinito. De esta forma al aplicar el primer comando, el único tiempo de cómputo se invertirá en la escritura de los datos.

El otro dispositivo especial utilizado es /dev/null, que tiene la peculiaridad de descartar toda la información volcada en él de forma instantánea (latencia prácticamente igual a cero). De esta forma al aplicar el segundo comando, el único tiempo de cómputo se invertirá en la lectura de los datos.

Para las pruebas de benchmark para el disco duro, emplearemos dos valores para el bloque de datos a copiar (bs), 8 KB y 1 MB, repitiéndose esta transferencia (count) 16384 y 128 veces respectivamente, para un flujo total de datos de 128 MB.

Dec 12, 2008

Emulación virtual de CD/DVD

Hoy en día se están poniendo muy de moda los ultraportátiles, ordenadores caracterizados por sus pequeñas dimensiones y sus componentes de bajo coste, haciéndolos mucho más accesibles que los portátiles tradicionales.

Esta clase de computadores tiene el inconveniente de no traer incorporado un lector de CDs o DVDs. Debido a que la mayor parte de las aplicaciones ofrecidas para los sistemas operativos pertenecientes a la familia Microsoft Windows vienen a través de este formato de almacenamiento, no nos quedan muchas opciones de cara a su instalación. Una de ellas podría ser el comprar un lector externo que se conectase a través del puerto USB, pero otra opción mucho más económica sería la de utilizar las Daemon Tools. Daemon Tools es un software que permite la emulación de imágenes procedentes de CDs o DVDs.

Vamos a suponer que tenemos una aplicación en formato DVD y queremos instalarla en el Windows XP de nuestro portátil, el cual no dispone de lector. Lo primero que habría que hacer sería pedirle a alguien que extrajera del DVD, una imagen en formato ISO. Para ello se puede emplear por ejemplo la aplicación k3b.

Para crear la imagen seleccionaríamos dentro del menú Herramientas, la opción de Copiar DVD... De esta forma se extraería el contenido del DVD y se empaquetaría en una ISO (a continuación puede verse el cuadro de control).


La imagen será depositada en la carpeta /tmp/, aunque podremos modificar el destino a través de la pestaña Imagen.

Una vez que tengamos instaladas las Daemon Tools en Windows XP, dispondremos de un icono correspondiente a este programa en la parte inferior derecha del Escritorio. Pulsando con el botón derecho del ratón sobre dicho icono, aparecerá el menú flotante de las Daemon Tools. Dentro de este menú, escogeremos la opción CD/DVD-ROM Virtual, Dispositivo 0: [ D: ] Vacío, Montar imagen. En consecuencia, se mostrará un control que nos permitirá elegir la imagen que se quiere montar.


A partir de este momento, si vamos a la carpeta Mi PC, sección Dispositivos con almacenamiento extraíble, podremos ver que se habrá creado una nueva unidad virtual D: que a efectos prácticos, vendrá a ser como si tuviéramos un lector de DVDs físico.

Para desmontar la imagen habrá que seleccionar dentro del menú emergente, CD/DVD-ROM Virtual, Dispositivo 0: [ D: ] Vacío, Desmontar imagen.

Para utilizar una ISO en GNU/Linux no hace falta utilizar ninguna clase de aplicación, se puede montar directamente la imagen en el directorio que queramos:

# mkdir /media/iso

# mount -t iso9660 -o loop archivo.iso /media/iso

Para desmontar la imagen, se puede emplear el siguiente comando:

# umount /media/iso

Dec 5, 2008

Instalar Kubuntu desde una memoria USB

Hay muchas formas de instalar Linux sin necesidad de tener que quemar un CD o un DVD. Una de ellas es a través de una memoria USB autoarrancable. Los requisitos mínimos son que la memoria tenga la suficiente capacidad para albergar la imagen y que el equipo donde queramos utilizarla permita el arranque desde su interfaz USB.

Existe un paquete denominado usb-creator, el cual permite crear un pendrive autoarrancable con el LiveCD de la distribución dentro. Usb-creator surgió con el objetivo de evitar la necesidad de tener que emplear una unidad óptica de cara a la instalación de Ubuntu, y para poder ofrecer una instalación mucho más rápida y cómoda. Actualmente está disponible para Ubuntu y todas sus distribuciones derivadas: Kubuntu, Edubuntu, Xubuntu, etc.

En mi caso voy a utilizar una memoria de 1 GB y una ISO Kubuntu 8.10. Para instalar la aplicación usb-creator emplearemos la siguiente orden:

# aptitude install usb-creator

Una vez instalada, accederemos al programa a través del botón de Inicio, Preferencias, Create a USB startup disk. Dentro de la aplicación, tendremos que seleccionar la ISO que vamos a utilizar a través del botón Other y escoger el dispositivo USB en donde será volcada la imagen. Un mensaje informativo nos indicará si la memoria tiene espacio suficiente para poder realizar la operación (/dev/sdb1 has enough free space for Kubuntu 8.10).


Y ya por último y antes de lanzar el proceso mediante el botón Make Startup Disk, habrá que elegir a través de la opción Stored in reserved extra space, el tamaño que queramos dejar dentro de nuestra memoria como disco virtual de almacenamiento. Esto último es necesario debido a que la memoria, en lugar de utilizarse para la instalación de la distribución en el disco duro físico del ordenador, puede ser también empleada como LiveCD, es decir, que nos permita arrancar temporalmente desde la memoria el sistema operativo y uilizar ese espacio reservado (128 MB en nuestro caso) para guardar los cambios del sistema, como por ejemplo la instalación de programas, archivos creados, modificaciones en las características del sistema, etc.

El proceso de instalación copiará los archivos de la ISO en la memoria USB y hará que ésta sea autoarrancable. Una vez finalizado y para poder utilizarla, deberemos configurar la BIOS del equipo anfitrión para que utilice el interfaz USB como primer dispositivo de arranque.


El sistema que acabamos de crear nos permitirá realizar acciones como:

  • Probar Kubuntu sin alterar su equipo
  • Instalar Kubuntu
  • Verificar el CD en busca de defectos
  • Análisis de la memoria
  • Arrancar desde el primer disco duro

Dec 1, 2008

Dell Latitude E4200

La semana pasada me llegó mi última y flamante adquisición, un portátil Dell Latitude E4200:


Las principales características de este ordenador son las siguientes:

  • Pantalla: LED WXGA (1.280 x 800) UltraSharpTM Premium de 12,1".
  • Procesador: Intel Core 2 Duo SU9400 (1.4GHz, 800MHz, 3MB).
  • Tarjeta gráfica: Intel ® 4500MHD.
  • Disco duro: 64 GB SSD.
  • Memoria: 3072 MB (1x2048 + 1x1024 en placa) 800MHz DDR3 de doble canal.
  • Bluetooth: Dell Wireless 365 Bluetooth.
  • Wireless: Intel WiFi Link 5100 (802.11 a/b/g/n 1X2) 1/2 MiniCard con etiqueta Centrino.
  • Batería: 4 celdas 28W/HR LI-ION.
  • Peso: 1 kg.
  • Ancho, profundidad y altura: 291 mm (11,4"), 204 mm (8,0") y 19,95 mm (0,79").
  • Ranuras: Expresscard 34, SD/MMC.
  • Puertos: IEEE - 1394, conector de estación de base, VGA, RJ-45, USB 2.0 (x1) con PowerShare USB, eSATA/USB (x1), auriculares/altavoz, micrófono y Smartcard.
  • Lector de tarjetas inteligentes.
  • Lector de huellas digitales.
  • TPM (Trusted Platform Module).
  • Dell Latitude ON.

Lo que más llama la atención de este portátil es su reducido peso (1 kg), ya que para tener una pantalla de 12,1" (con una muy buena resolución, 1280 x 800 píxeles) pesa mucho menos que cualquiera de los ultraportátiles actuales. También destacaría su elegante acabado, formado por un chasis de aleación de magnesio terminado con bisagras de metal.

La batería la escogí de 4 celdas, ya que la de 6 sobresale. Pese a ello, su duración aproximada es de unas tres horas y media, debido principalmente al bajo consumo del procesador (Procesadores Intel® CoreTM 2 Duo de voltaje ultra bajo - ULV -) y del disco duro de estado sólido (SSD).

Otra de las ventajas del disco SSD es que se trata de un componente insonoro que apenas genera calor, ya que a diferencia de un disco duro convencional donde sus cabezales están continuamente girando, nos encontramos prácticamente ante una memoria de tipo flash. Esto convierte al Latitude E4200 en un dispositivo con unos niveles de ruido mucho más que aceptables.

Otro punto a su favor es el reducido tamaño del cargador, que como puede observarse en la imagen que adjunto en el artículo, es del tamaño de una cajetilla de tabaco.

Junto con el Windows XP Professional que Dell te obliga a comprar, he instalado una Kubuntu 8.10. He medido los tiempos de arranque (hasta la pantalla de login) y apagado de ambos sistemas operativos, y he obtenido los siguientes resultados:

  • Kubuntu 8.10: arranque 27 sg y apagado 12 sg.
  • Windows XP Professional SP3: arranque 29 sg y apagado 6 sg.

Con respecto a los componentes externos, decir que presenta un teclado ergonómico y al que enseguida te acostumbras, ya que ocupa prácticamente el total del ancho del portátil. El touchpad (ratón táctil) aunque a priori puede llegar a parecer pequeño, enseguida se convierte en uno de los elementos más prácticos del equipo.

El portátil también dispone de un lector biométrico de huellas dactilares, que junto con el módulo TPM (Trusted Platform Module), conforman un tándem muy importante con respecto a términos de seguridad se refiere. El TPM o módulo de plataforma segura, es un chip que almacena información crítica del usuario, como por ejemplo contraseñas, claves de encriptación o incluso huellas dactilares.

Y ya por último, el sistema Dell Latitude ON es una tecnología que permite acceder de forma inmediata, a un conjunto de funciones básicas para el usuario: navegación web, lectura de correo electrónico, acceso a archivos, etc. Esta arquitectura está desarrollada sobre un procesador Intel ARM de bajo voltaje y una memoria flash, elementos que permiten hacer correr una distribución SUSE Linux Enterprise Desktop 10 moldeada por Dell (software que utilizará el usuario como sistema de arranque instantáneo).

Tanto el módulo TPM, el sistema Latitude ON y las pruebas de rendimiento del equipo, serán expuestas en posteriores entradas del blog.

¿Este portátil no tiene ninguna desventaja? Sí, pero son pocas y se cuentan con los dedos de una mano:

  • Su elevado precio (se trata de un ordenador reciente, se puso a la venta en Septiembre de 2008).
  • Sólo está disponible para empresas y autónomos.
  • Dell te obliga a adquirir una licencia de alguno de los sistemas operativos de Microsoft (Windows o Vista).
  • Debido a que los discos SSD están empezando como aquel que dice "a ver la luz", son todavía de pequeña capacidad y excesivamente caros.

A continuación dejo una serie de fotos del equipo.