Tag Archives: centos

Almacenamiento Distribuido Sobre Cuatro Nodos con GlusterFS 3.5 y CentOS 6.5

Hoy vamos a construir un clúster de almacenamiento con GlusterFS y CentOS utilizando cuatro nodos para ficheros y datos de usuarios. El tamaño de la compartición será la suma de lo que aporte cada nodo individualmente. GlusterFS es un sistema de ficheros clusterizado capaz de escalar hasta varios peta-bytes.

Vamos a necesitar cuatro máquinas para los servidores y una que hará de cliente. Todas con CentOS. Todas deben resolver el nombre de las demás, si no es posible hacerlo mediante DNS utilizamos el fichero /etc/hosts de la siguiente manera.

192.168.1.100   server1.example.com     server1
192.168.1.101   server2.example.com     server2
192.168.1.102   server3.example.com     server3
192.168.1.103   server4.example.com     server4
192.168.1.104   client1.example.com     client1

Antes de empezar vamos a desabilitar SELinux y, como estamos dentro de la red local, el firewall.

Para deshabilitar SELinux editamos el fichero /etc/sysconfig/selinux y cambiamos la siguiente línea.

[...]
SELINUX=disabled
[...]

Para deshabilitar el cortafuegos simplemente lo quitamos del autoarranque.

# chkconfig iptables off
# chkconfig ip6tables off

Comenzamos instalando GlusterFS en los nodos

Instalando GlusterFS en los nodos

Habilitando el repositorio

Tenemos que crear un nuevo fichero de repositorio dentro de /etc/yum.repos.d con nombre glusterfs.repo

# vim /etc/yum.repos.d/glusterfs.repo

Añadimos

[glusterfs-epel]
name=GlusterFS is a clustered file-system capable of scaling to several petabytes.
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/$basearch/
enabled=1
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key

[glusterfs-noarch-epel]
name=GlusterFS is a clustered file-system capable of scaling to several petabytes.
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/noarch
enabled=1
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key

[glusterfs-source-epel]
name=GlusterFS is a clustered file-system capable of scaling to several petabytes. - Source
baseurl=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/epel-$releasever/SRPMS
enabled=0
skip_if_unavailable=1
gpgcheck=1
gpgkey=http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key

Añadir la firma

A continuación se añade la firma del repositorio al depósito de claves

# yum --import http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/pub.key

Ya podemos usar el gestor de paquetes para instalar el software

Instalando el servidor GlusterFS

Desde la terminal instalamos los paquetes necesarios

# yum install glusterfs-server

Una vez ha terminado de instalar paquetes podemos comprobar que está correcto escribiendo.

# glusterfsd --version

Debemos ver lo siguiente.

glusterfs 3.5.1 built on Jun 24 2014 15:09:28
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. 
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

Antes de continuar debemos arrancar el demonio haciendo lo siguiente.

# /etc/init.d/glusterd start

Dejamos el servicio habilitado para el próximo reinicio

# chkconfig glusterd on

Seguimos con la configuración.

Creando la compartición

Ya tenemos el servidor instalado, vamos a configurara una compartición. Los siguientes pasos sólo los haremos en server1 ya que la configuración se replica entre los nodos que conforman el cluster. Primero debemos crear el pool de almacenamiento. Desde la consola del primer servidor escribimos.

# gluster peer probe server2.example.com
Probe successful
# gluster peer probe server3.example.com
Probe successful
# gluster peer probe server4.example.com
Probe successful

Podemos comprobar que se ha construido satisfactoriamente.

# gluster peer status
Number of Peers: 3

Hostname: server2.example.com
Uuid: da79c994-eaf1-4c1c-a136-f8b273fb0c98
State: Peer in Cluster (Connected)

Hostname: server3.example.com
Uuid: 3e79bd9f-a4d5-4373-88e1-40f12861dcdd
State: Peer in Cluster (Connected)

Hostname: server4.example.com
Uuid: c6215943-00f3-492f-9b69-3aa534c1d8f3
State: Peer in Cluster (Connected)

Ahora creamos la compartición distribuida que llamaremos testvol. Seguimos en server1

# gluster volume create testvol stripe 4 transport tcp server1.example.com:/data server2.example.com:/data server3.example.com:/data server4.example.com:/data force
Creation of volume testvol has been successful. Please start the volume to access data.

Añadimos el parámetro force si el directorio que comparten los nodos está en la raiz del sistema de ficheros.

Iniciamos el volumen

# gluster volume start testvol
Starting volume testvol has been unsuccessful

Si comprobamos las conexiones veremos como está levantado el servicio.

# netstat -tap | grep glusterfs
tcp        0      0 *:24009                 *:*                     LISTEN      1110/glusterfsd
tcp        0      0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1110/glusterfsd

Vamos a añadir una capa de seguridad permitiendo conexiones unicamente desde nuestra red local, para ello hacemos.

# gluster volume set testvol auth.allow 192.168.1.*

Y ahora si comprobamos el estado del volumen.

# gluster volume info

Volume Name: testvol
Type: Stripe
Volume ID: f922da05-737d-4fb5-83cc-e50d6782b90c
Status: Started
Number of Bricks: 1 x 4 = 4
Transport-type: tcp
Bricks:
Brick1: server1.example.com:/data
Brick2: server2.example.com:/data
Brick3: server3.example.com:/data
Brick4: server4.example.com:/data
Options Reconfigured:
auth.allow: 192.168.1.*

Configuración de los clientes

Estos pasos debemos llevarlos a cabo por cada cliente que queramos que pueda montar la compartición. Empezamos instalando el cliente de GlusterFS.

Hay que habilitar el repositorio como hicimos con los servidores.

# yum install glusterfs-client

Creamos un punto de montaje para la compartición.

# mkdir /mnt/glusterfs

Montamos.

mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

Podemos ver que está montado haciendo.

# mount 

/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)

También

# df -hT

Filesystem                   Type            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root ext4            6,7G  796M  5,5G  13% /
tmpfs                        tmpfs           250M     0  250M   0% /dev/shm
/dev/sda1                    ext4            485M   31M  429M   7% /boot
server1.example.com:/testvol fuse.glusterfs   20G  2,4G   17G  13% /mnt/glusterfs

Hacemos los cambios permanentes añadiendo la siguiente línea al fichero /etc/fstab

server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0

Fuente

He seguido los pasos de este artículo para adaptarlo a CentOS y la última versión de GlusterFS

Cluster de Almacenamiento con GlusterFS 3 y CentOS 5.6

En el artículo de hoy vamos a montar un cluster de almacenamiento con dos servidores CentOS. Para la implementación del cluster vamos a usar GlusterFS, que es un sistema de ficheros en espacio de usuarios (FUSE). Sigue la arquitectura clásica de cliente-servidor y puede escalar hasta varios PetaBytes.

Introducción.

Para este tutorial vamos a utilizar dos servidores:

  • server1 192.168.2.100
  • server2 192.168.2.101

Y un cliente:

  • client1 192.168.2.102

Todos los componentes deben poder resolver los nombres de los demás, si no se puede por DNS debes editar el fichero /etc/hosts:

# /etc/hosts
192.168.2.100   server1
192.168.2.101   server2
192.168.2.102   client1

Configuración de los servidores.

Antes de empezar con GlusterFS, vamos a preparar el sistema añadiendo las herramientas de desarrollo y librerías. En cada uno de los servidores ejecutamos:

# yum groupinstall 'Development Tools'
# yum groupinstall 'Development Libraries'
# yum install libibverbs-devel fuse-devel

Descargamos el software y lo compilamos:

# mkdir sandbox
# cd sandbox
# wget http://download.gluster.com/pub/gluster/glusterfs/3.0/LATEST/glusterfs-3.0.8.tar.gz
# tar zxvf glusterfs-3.0.8.tar.gz
# cd glusterfs-3.0.8
# ./configure

Al finalizar deberemos ver esto:

GlusterFS configure summary
===========================
FUSE client        : yes
Infiniband verbs   : yes
epoll IO multiplex : yes
libglusterfsclient : yes
argp-standalone    : no
fusermount         : no

Entonces compilamos e instalamos.

# make && make install

Enlazamos con las librerías dinámicas.

# ldconfig

Podemos ahora comprobar que se ha instalado correctamente.

# glusterfs --version

glusterfs 3.0.8 built on May 13 2011 20:20:55
Repository revision: v3.0.8
Copyright (c) 2006-2009 Gluster Inc. 
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.

Vamos ahora a crear una estructura de directorio desde el que exportar el volumen. En este tutorial queremos compartir /home por lo que vamos a montar una porción de disco sobre el directorio que exportamos con Gluster para más adelante montar en el cliente en /home.

Creamos los siguientes directorios.

# mkdir -p /data/{exports,export-ns} /etc/glusterfs

En /etc/glusterfs/glusterfsd.vol añadimos el fichero de configuración para nuestro volumen.

volume posix
  type storage/posix
  option directory /data/exports
end-volume

volume locks
  type features/locks
  subvolumes posix
end-volume

volume brick
  type performance/io-threads
  option thread-count 8
  subvolumes locks
end-volume

volume server
  type protocol/server
  option transport-type tcp/server
  option auth.addr.brick.allow 192.168.2.*
  subvolumes brick
end-volume

Para aumentar la seguridad, sólo se permiten las direcciones listadas en la línea option auth.addr.brick.allow, admite comodines y varias direcciones separadas por comas. En este ejemplo hemos dado acceso a todo el rango 192.168.2.0/24.

Como hemos compilado sin pasar ninguna opción previa al configure, vamos a crear un enlace simbólico para que el sistema encuentre el binario.

# ln -s /usr/local/sbin/glusterfsd /sbin/glusterfsd

Ya podemos arrancar el demonio y configurar su nivel de arranque.

# chkconfig --levels 35 glusterfsd on
# /etc/init.d/glusterfsd start
Starting glusterfsd:                           [  OK  ]

Ahora vamos a añadir una partición en /etc/fstab la cual montaremos en /data/exports

# vim /etc/fstab
/dev/sda3     /data/exports     ext3     defaults     0 0

En cada servidor se hace esto, es lo que ofreceremos a los clientes a través de Gluster.

Configuración de los clientes.

Pasamos ahora a la configuración de los clientes, empezamos instalando las dependencias de compilación y librerías para acabar montando el volumen Gluster en /home. Estos pasos hay que hacerlos en cada cliente.

# yum groupinstall 'Development Tools'
# yum groupinstall 'Development Libraries'
# yum install libibverbs-devel fuse-devel

Ahora cargamos el módulo fuse que se encargará de hacer de interface con el Kernel.

# modprobe fuse

Configuramos el sistema para que cargue el módulo con cada arranque.

# echo "modprobe fuse" >> /etc/rc.modules
# chmod +x /etc/rc.modules

En cada cliente descargamos e instalamos el software. Tal y como hemos hecho antes.

# mkdir sandbox
# cd sandbox
# wget http://download.gluster.com/pub/gluster/glusterfs/3.0/LATEST/glusterfs-3.0.8.tar.gz
# tar zxvf glusterfs-3.0.8.tar.gz
# cd glusterfs-3.0.8
# ./configure

Al finalizar deberemos ver esto:

GlusterFS configure summary
===========================
FUSE client        : yes
Infiniband verbs   : yes
epoll IO multiplex : yes
libglusterfsclient : yes
argp-standalone    : no
fusermount         : no

Entonces compilamos e instalamos.

# make && make install

Enlazamos con las librerías dinámicas.

# ldconfig

Podemos ahora comprobar que se ha instalado correctamente.

# glusterfs --version

glusterfs 3.0.8 built on May 13 2011 20:20:55
Repository revision: v3.0.8
Copyright (c) 2006-2009 Gluster Inc. 
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.

Creamos el directorio de configuración de GlusterFS.

# mkdir /etc/glusterfs

Añadimos lo siguiente al fichero glusterfs.vol

vim /etc/glusterfs/glusterfs.vol

volume remote1
  type protocol/client
  option transport-type tcp/client
  option remote-host server1
  option remote-subvolume brick
end-volume

volume remote2
  type protocol/client
  option transport-type tcp/client
  option remote-host server2
  option remote-subvolume brick
end-volume

volume stripe
  type cluster/stripe
  option block-size 1MB
  subvolumes remote1 remote2
end-volume

volume writebehind
  type performance/write-behind
  option window-size 1MB
  subvolumes stripe
end-volume

volume cache
  type performance/io-cache
  option cache-size 512MB
  subvolumes writebehind
end-volume

Y ya podemos montar el volumen en /home:

 # glusterfs -f /etc/glusterfs/glusterfs.vol /home

Podemos consultar que está montado ejecutando mount:

# mount

glusterfs#/etc/glusterfs/glusterfs.vol on /home type fuse (rw,allow_other,default_permissions,max_read=131072)

También ver el espacio disponible con df:

# df -hT

S.ficheros    Tipo  Tamaño Usado  Disp Uso% Montado en
/dev/sda1     ext3    2,9G  1,7G  1,1G  63% /
tmpfs        tmpfs    125M     0  125M   0% /dev/shm
glusterfs#/etc/glusterfs/glusterfs.vol
              fuse    6,5G  143M  6,1G   3% /home

Para hacer el montaje permanente, añadimos la siguiente línea a /etc/fstab

/etc/glusterfs/glusterfs.vol  /home             glusterfs          defaults,_netdev  0  0

Fallos.

Si has llegado hasta aquí significa que todo ha ido bien, si has encontrado algún problema los ficheros de logs de Gluster se encuentra en:

/usr/local/var/log/glusterfs/

Revisa que todas las máquinas resuelven los nombres, que la línea auth.addr.brick.allow está bien configurada y que has escrito correctamente los nombres de los directorios. Estos son problemas comunes.

Por ejemplo, si algún cliente no está autorizado a montar el volumen, pasará esto:

# glusterfs -f /etc/glusterfs/glusterfs.vol /home
# mount 

/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
glusterfs#/etc/glusterfs/glusterfs.vol on /home type fuse (rw,allow_other,default_permissions,max_read=131072)

# df -hT

S.ficheros    Tipo  Tamaño Usado  Disp Uso% Montado en
/dev/sda1     ext3    2,9G  1,7G  1,1G  63% /
tmpfs        tmpfs    125M     0  125M   0% /dev/shm
/dev/sda3     ext3    6,5G  143M  6,1G   3% /data/exports
df: «/home»: Argumento inválido

Vemos que se ha producido un error que no es muy descriptivo del problema real que está ocurriendo ya que sí ha montado el volumen.

Conclusión.

Este sistema proporciona escalabilidad y tolerancia. El echo de exportar un directorio nos permite montar en ese directorio el disco físico un volumen LVM, un RAID, combinaciones de ambos, sistemas NAS o DAS y así montar nuestro propio DropBox! 😉

Nuevo Clúster de Cálculo

Pues sí, es lo que tiene el dinero público, que hay que gastarlo por eso invertimos mucho en la infraestructura del clúster del departamento, esperamos que más personal docente e investigador se animen y podamos algún día tener uno mucho más grande, de momento las máquinas que conforman el nuevo clúster son tres Intel Core i7 con 24GB de RAM cada una. He hecho unas fotillos para inmortalizar el acontecimiento.

Lo que me encontré esta mañana al llegar al despacho.

Llegada

Llegada

Estaba “acurrucado” en su caja.

En la caja

En la caja


En la caja 2

En la caja 2

La vista frontal.

Frontal

Frontal

Y así es por detrás, doble ventilador y una tarjeta de red PCI-e de dos bocas.

Trasero

Trasero

Abro siempre la máquina para verificar que está todo como a mi me gusta, por si se ha soltado algún cable durante el transporte y esas cosas. Ajusté los cable SATA para dejarlos como a mi me gustan y conté que, efectivamente, había 24GB de RAM en seis módulos de 4GB cada uno.

Inside

Inside

Ya montados y arrancando, cuando esté todo listo pasaran al armario RACK, no los vamos a dejar ahí en medio…

En la mesa

En la mesa


Booting

Booting

Le instalamos CentOS que nos da muy buenos resultados de performance y estabilidad.

Instalando

Instalando

Y foto friki para la posteridad.

FrikiFoto

FrikiFoto

Esperemos que nos dure muchos cálculos de elementos finitos.

Update:

Entre el miércoles y el jueves terminé de montar y configurar todos los equipos y así es como han quedado.

Todos Juntos

Todos Juntos


En el armario

En el armario

Algunas Fotos en el Despacho

Mi buen amigo @gonzaloMMD, se fue de viaje a Paris y ha preparado una entrada con unas fotos chulísimas de la capital alemana francesa (“acias” wikipedia!) xDDD. Yo más humilde, posteo unas pocas “fotillos” del despacho.

Estas dos corresponden a la migración que hicimos del cluster de OpenSUSE a CentOS. Se ven los 6 nodos esclavos, aunque la estructura está cambiando, y tendré que actualizar esta entrada.

Nodos Cluster Front

Nodos Cluster Front


Nodos Cluster Back

Nodos Cluster Back

Este será el nuevo master del cluster, el i7 con 16GB de RAM, con sus 5 discos duros.

Master Cluster

Master Cluster


Discos Master Cluster

Discos Master Cluster

Y esta es mi mesa, como siempre, llena de papeles y chismes.

Mi Mesa

Autentica mesa sysadmin

Servidor de LiveCD & Instalaciones

El tema de moda es el de Cloud Computing y existen muchas soluciones de despliegue de máquinas en una red de manera automatizada, en este post hablaremos de una de ellas y que lleva con GNU/Linux muchos años. Para ahorrarnos royos largos y aburridos copiamos de Wikipedia

PXE hace referencia al entorno de ejecución de prearranque (Preboot eXecution Environment). Es un entorno para arrancar e instalar el sistema operativo en ordenadores a través de una red, de manera independiente de los dispositivos de almacenamiento de datos disponibles (como discos duros) o de los sistemas operativos instalados.

La versatilidad de contar con un servidor de esta clase en la red son prácticamente ilimitadas, para mi red virtual, la monte sobre VirtualBox como un servidor, se encarga de dar IP (DHCP), Archivos (lftp, proftp) y sistemas operativos tanto en LiveCD como lanzando la instalación.

Read more »