Oct 26, 2009

Pruebas de rendimiento sobre sistemas de almacenamiento compartido

A lo largo de varios artículos se van a analizar distintas arquitecturas de almacenamiento compartido en red, con el objetivo de evaluar sus rendimientos en base a distintos tipos de operaciones: lectura, escritura, latencias, creación de ficheros, búsquedas, etc. Para ello se utilizarán varias herramientas de benchmarking que se tienen en Linux para tal fin: cp, IOZone y Bonnie++.

Un sistema de almacenamiento compartido es una arquitectura formada por un área de datos a la que podrán acceder de manera concurrente múltiples procesos, teniendo en cuenta que dicho espacio deberá estar correctamente protegido por alguna clase de mecanismo que arbitre su acceso, todo ello con el objetivo de evitar posibles casos de corrupción de datos.

La forma tradicional de acceso compartido suele diseñarse en base a un sistema de ficheros ext3 exportado a través de un servicio NFS. Ext3 no es un sistema de archivos válido para compartir datos, ya que no está diseñado para arbitrar bloqueos entre accesos, y en consecuencia, se podrían dar situaciones de corrupción de datos en caso de que varias máquinas montasen paralelamente el mismo sistema de archivos.

Por lo tanto lo que se hace es exportar dicho sistema a través de NFS, el cual sí que proporciona control de acceso, permitiendo de esta forma que varios nodos puedan acceder concurrentemente al mismo área de almacenamiento sin ningún tipo de problema.

Otra de las alternativas pasa por la utilización de sistemas de ficheros (GFS, OCFS, etc.) especialmente diseñados para que varias máquinas puedan acceder simultáneamente a ellos, y sea el propio sistema de archivos el que ofrezca los mecanismos necesarios para arbitrar las operaciones de entrada/salida.

Esta clase de sistemas de archivos podrá exportarse mediante NFS, o bien a través de otras clases de tecnologías (GNBD, iSCSI, etc.) que permitan exportar los dispositivos de bloque directamente en crudo, sin necesidad de tener que montar previamente un sistema de ficheros.

Los sistemas de almacenamiento compartido en red que van a ser analizados en los próximos artículos con el objetivo de evaluar su rendimiento serán los siguientes:

Básicamente se utilizarán dos sistemas de archivos distintos, GFS2 y ext3, los cuales serán accedidos a través de diferentes tecnologías (GNBD, iSCSI y NFS), todas ellas empleando redes TCP/IP de tipo Ethernet.


El espacio de almacenamiento compartido residirá en el nodo centos01, el cual será el encargado de exportarlo a los otros dos nodos restantes que conforman el sistema de almacenamiento en red: centos02 y centos03.

GFS2 (Global File System 2) es un sistema de ficheros nativo creado por Red Hat y distribuido bajo licencia GNU, que puede ser utilizado de forma local (como por ejemplo ext3) o en cluster, de manera que varios nodos puedan estar trabajando simultáneamente sobre él sin peligro a que se corrompan los datos. El tamaño máximo de almacenamiento soportado es de 8 EB.

Ext3 (third EXtended Filesystem) es un sistema de ficheros basado en journaling, en donde se emplean registros temporales o journals antes de realizar el grabado de los datos en los bloques, todo ello con el objetivo de asegurar la integridad de la información. El tamaño máximo de almacenamiento que soporta ext3 es de 32 TB.

GNBD (Global Network Block Device) proporciona acceso a almacenamiento de bloques sobre una red Ethernet. GNBD es una solución totalmente software que permite compartir de forma directa un dispositivo de bloque a través de una LAN.

iSCSI (Internet Small Computer Systems Interface) permite la interconexión directa entre dispositivos de almacenamiento y computadores, encapsulando para ello el protocolo SCSI (familia de protocolos para comunicaciones con dispositivos de entrada/salida, especialmente dispositivos de almacenamiento) a través de una red TCP/IP. iSCSI puede utilizar tarjetas hardware dedicadas o emplear iniciadores iSCSI junto con targets (objetivos) SCSI para establecer la conectividad a través de tarjetas Ethernet.

NFS (Network File System) es un protocolo perteneciente al nivel de aplicación utilizado para crear sistemas de ficheros distribuidos, el cual permite que varios nodos puedan acceder de forma simultánea a distintos archivos remotos. Todas las operaciones de escritura son síncronas, es decir, la tarea se da por finalizada cuando realmente se ha terminado de escribir el último byte.

Los tres nodos empleados se corresponderán con sendas máquinas virtualizadas a través de una VMware ESX Server 3.5. El sistema operativo de cada uno de los equipos será una distribución Linux de tipo CentOS, concretamente la versión estable 5.3 de 64 bits.

Las características hardware asignadas a cada máquina virtual serán las mismas para todas ellas, pudiéndose observar en la siguiente tabla:


El nodo centos01 contará con un disco duro adicional de 64 GB sobre el cual se realizarán las pruebas de rendimiento, y estará compartido para las máquinas centos02 y centos03 a través de una red TCP/IP.

Y ya por último, decir también que todas las áreas de almacenamiento de los tres sistemas residirán en la misma LUN (Logical Unit Number), estando ésta ubicada en un datastore de NetApp (conjunto de discos duros externos accedidos a través de fibra óptica).

2 comments:

  1. Maestro!, es muy interesante el resultado pruebas que realizará, estaré pendiente de sus posts ;=). Aconsejo añadir uso de VDBENCH y SWAT junto a las herramientas de Bechmarking, usadas por Storage Performance Council, y lógicamente multiplataforma.

    ReplyDelete
  2. Hola Gran Maestro!!

    Pues no conocía esas utilidades... apuntadas quedan!

    Esta semana descubrí otra herramienta que tiene muy buena pinta, se llama Phoronix Test Suite (http://www.phoronix-test-suite.com/).

    Además la gente que la desarrolla se dedica a hacer benchmarks a todo lo que se menea: http://www.phoronix.com/scan.php?page=phoronix_articles

    ReplyDelete