GNU/Linux >> Tutoriales Linux >  >> Debian

Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en Debian Lenny

Este tutorial muestra cómo combinar cuatro servidores de almacenamiento individuales (que ejecutan Debian Lenny) en un gran servidor de almacenamiento (almacenamiento distribuido) con GlusterFS. El sistema cliente (también Debian Lenny) podrá acceder al almacenamiento como si fuera un sistema de archivos local. GlusterFS es un sistema de archivos en clúster capaz de escalar a varios peta-bytes. Agrega varios bloques de almacenamiento sobre la interconexión Infiniband RDMA o TCP/IP en un gran sistema de archivos de red paralelo. Los bloques de almacenamiento se pueden fabricar con cualquier hardware básico, como servidores x86-64 con SATA-II RAID e Infiniband HBA.

Tenga en cuenta que este tipo de almacenamiento (almacenamiento distribuido) no proporciona funciones de alta disponibilidad, como sería el caso del almacenamiento replicado.

¡No emito ninguna garantía de que esto funcione para usted!

1 nota preliminar

En este tutorial utilizo cinco sistemas, cuatro servidores y un cliente:

  • servidor1.ejemplo.com:dirección IP 192.168.0.100 (servidor)
  • servidor2.ejemplo.com:dirección IP 192.168.0.101 (servidor)
  • servidor3.ejemplo.com:dirección IP 192.168.0.102 (servidor)
  • servidor4.ejemplo.com:dirección IP 192.168.0.103 (servidor)
  • cliente1.ejemplo.com:dirección IP 192.168.0.104 (cliente)

Los cinco sistemas deberían poder resolver los nombres de host de los otros sistemas. Si esto no se puede hacer a través de DNS, debe editar el archivo /etc/hosts para que tenga el siguiente aspecto en los cinco sistemas:

vi /etc/hosts

(También es posible usar direcciones IP en lugar de nombres de host en la siguiente configuración. Si prefiere usar direcciones IP, no tiene que preocuparse si los nombres de host se pueden resolver o no).

2 Configuración de los servidores GlusterFS

servidor1.ejemplo.com/servidor2.ejemplo.com/servidor3.ejemplo.com/servidor4.ejemplo.com:

GlusterFS no está disponible como paquete Debian para Debian Lenny, por lo tanto, tenemos que construirlo nosotros mismos. Primero instalamos los requisitos previos:

aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev

Luego, descargamos la última versión de GlusterFS de http://www.gluster.org/download.php y la construimos de la siguiente manera:

cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null

server1:/tmp/glusterfs-2.0.1# ./configure --prefix=/usr > /dev/null

GlusterFS configure summary
===========================
FUSE cliente        : no
Infiniband verbos   : no
epoll IO multiplex : sí
Berkeley-DB        :yes
libglusterfsclient : yes
mod_glusterfs      : no ()
argp-standalone    : no

server1:/tmp/glusterfs-2.0.1#

hacer &&hacer instalar
ldconfig

El comando

glusterfs --version

ahora debería mostrar la versión de GlusterFS que acaba de compilar (2.0.1 en este caso):

server1:/tmp/glusterfs-2.0.1# glusterfs --version
glusterfs 2.0.1 creado el 29 de mayo de 2009 17:23:10
Revisión del repositorio:5c1d9108c1529a1155963cb1911f8870a674ab5b
Copyright (c) 2006 -2009 Z RESEARCH Inc.
GlusterFS viene SIN GARANTÍA EN ABSOLUTO.
Usted puede redistribuir copias de GlusterFS bajo los términos de la Licencia Pública General GNU.
servidor1:/tmp/glusterfs-2.0.1#

A continuación, creamos algunos directorios:

mkdir /data/
mkdir /data/export
mkdir /data/export-ns
mkdir /etc/glusterfs

Ahora creamos el archivo de configuración del servidor GlusterFS /etc/glusterfs/glusterfsd.vol que define qué directorio se exportará (/data/export) y qué cliente puede conectarse (192.168.0.104 =client1.example.com):

vi /etc/glusterfs/glusterfsd.vol
127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
192.168.0.101   server2.example.com     server2
192.168.0.102   server3.example.com     server3
192.168.0.103   server4.example.com     server4
192.168.0.104   client1.example.com     client1

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Tenga en cuenta que es posible utilizar comodines para las direcciones IP (como 192.168.*) y que puede especificar varias direcciones IP separadas por comas (por ejemplo, 192.168.0.104, 192.168.0.105).

Luego creamos los enlaces de inicio del sistema para el script de inicio glusterfsd...

update-rc.d glusterfsd defaults

... e inicie glusterfsd:

/etc/init.d/glusterfsd start

3 Configuración del cliente GlusterFS

cliente1.ejemplo.com:

En el cliente, necesitamos instalar fuse y GlusterFS. En lugar de instalar el paquete libfuse2 desde el repositorio de Debian, instalamos una versión parcheada con mejor soporte para GlusterFS.

Primero volvemos a instalar los prerrequisitos:

aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev

Luego construimos fuse de la siguiente manera (puede encontrar la última versión de fuse parcheada en ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/):

cd /tmp
wget ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/fuse-2.7.4glfs11.tar.gz
tar -zxvf fuse-2.7.4glfs11.tar. gz
cd fuse-2.7.4glfs11
./configure
hacer &&hacer instalar

Luego construimos GlusterFS (igual que en el servidor)...

cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null

hacer &&hacer instalar
ldconfig
glusterfs --version

... y crea los siguientes dos directorios:

mkdir /mnt/glusterfs
mkdir /etc/glusterfs

A continuación creamos el archivo /etc/glusterfs/glusterfs.vol:

vi /etc/glusterfs/glusterfs.vol
volume posix
  type storage/posix
  option directory /data/export
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
  option auth.addr.brick.allow 192.168.0.104
  subvolumes brick
end-volume

¡Asegúrese de utilizar los nombres de host del servidor o las direcciones IP correctos en las líneas de host remoto de opciones!

¡Eso es todo! Ahora podemos montar el sistema de archivos GlusterFS en /mnt/glusterfs con uno de los siguientes dos comandos:

glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

o

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

Ahora debería ver el nuevo recurso compartido en los resultados de...

mount

cliente1:/tmp/glusterfs-2.0.1# mount
/dev/sda1 en / escriba ext3 (rw,errors=remount-ro)
tmpfs en /lib/init/rw escriba tmpfs (rw, nosuid,mode=0755)
proc en /proc tipo proc (rw,noexec,nosuid,nodev)
sysfs en /sys tipo sysfs (rw,noexec,nosuid,nodev)
udev en /dev escriba tmpfs (rw,mode=0755)
tmpfs en /dev/shm escriba tmpfs (rw,nosuid,nodev)
devpts en /dev/pts escriba devpts (rw,noexec,nosuid,gid =5,modo=620)
fusible en /sys/fs/fuse/conexiones tipo fusectl (rw)
/etc/glusterfs/glusterfs.vol en /mnt/glusterfs tipo fuse.glusterfs (rw, max_read=131072,allow_other,default_permissions)
cliente1:/tmp/glusterfs-2.0.1#

... y...

df -h

Client1:/tmp/Glusterfs-2.0.1# df -h
Tamaño del sistema de archivos utilizado disponible use%montado en
/dev/sda1 29g 935m 27g 4%/
TMPFS 126M 0 126M 0% /lib/init/rw
udev 10m 80k 10m 1%/dev
tmpfs 126m 0 126m 0%/dev/shm
/etc/glusterfs/glusterfs.vol
105g 3.4 G   96G   4 % /mnt/glusterfs
cliente1:/tmp/glusterfs-2.0.1#

(server1.example.com, server2.example.com, server3.example.com y server4.example.com tienen cada uno aproximadamente 26 GB de espacio para el sistema de archivos GlusterFS, por lo que el recurso compartido resultante tiene un tamaño de aproximadamente 4 x 26 GB ( 105 GB).)

En lugar de montar el recurso compartido GlusterFS manualmente en el cliente, puede modificar /etc/fstab para que el recurso compartido se monte automáticamente cuando se inicie el cliente.

Abra /etc/fstab y agregue la siguiente línea:

vi /etc/fstab  
volume remote1
  type protocol/client
  option transport-type tcp
  option remote-host server1.example.com
  option remote-subvolume brick
end-volume

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

volume remote3
  type protocol/client
  option transport-type tcp
  option remote-host server3.example.com
  option remote-subvolume brick
end-volume

volume remote4
  type protocol/client
  option transport-type tcp
  option remote-host server4.example.com
  option remote-subvolume brick
end-volume

volume distribute
  type cluster/distribute
  subvolumes remote1 remote2 remote3 remote4
end-volume

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

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

Para probar si su /etc/fstab modificado está funcionando, reinicie el cliente:

reboot 

Después del reinicio, debería encontrar el recurso compartido en las salidas de...

df -h

... y...

mount

4 Pruebas

Ahora vamos a crear algunos archivos de prueba en el recurso compartido GlusterFS:

cliente1.ejemplo.com:

toque /mnt/glusterfs/test1
toque /mnt/glusterfs/test2
toque /mnt/glusterfs/test3
toque /mnt/glusterfs/test4
toque /mnt/glusterfs/ test5
toque /mnt/glusterfs/test6

Ahora revisemos el directorio /data/export en server1.example.com, server2.example.com, server3.example.com y server4.example.com. Notará que cada nodo de almacenamiento contiene solo una parte de los archivos/directorios que componen el recurso compartido GlusterFS en el cliente:

servidor1.ejemplo.com:

ls -l /data/export 

servidor1:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:04 test1
-rw-r--r-- 1 root root 0 2009-06-02 18:05 test2
-rw-r--r-- 1 root root 0 2009-06-02 18:06 prueba5
servidor1:/tmp/glusterfs-2.0.1#

servidor2.ejemplo.com:

ls -l /data/export 

servidor2:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:06 test4
servidor2:/tmp/glusterfs-2.0.1#

servidor3.ejemplo.com:

ls -l /data/export 

servidor3:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:07 test6
servidor3:/tmp/glusterfs-2.0.1#

servidor4.ejemplo.com:

ls -l /data/export 

server4:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:06 test3
servidor4:/tmp/glusterfs-2.0.1#

5 Enlaces

  • GlusterFS:http://www.gluster.org/
  • Debian:http://www.debian.org/

Debian
  1. Almacenamiento de alta disponibilidad con GlusterFS en Debian 8:espejo en dos servidores de almacenamiento

  2. Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10

  3. Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10

  4. Distribución en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10

  5. Almacenamiento de alta disponibilidad con GlusterFS en Debian Lenny:replicación automática de archivos en dos servidores de almacenamiento

Almacenamiento de alta disponibilidad con GlusterFS 3.0.x en Debian Squeeze:replicación automática de archivos en dos servidores de almacenamiento

Almacenamiento de alta disponibilidad con GlusterFS 3.2.x en Debian Wheezy:replicación automática de archivos (espejo) en dos servidores de almacenamiento

Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS 3.2.x en CentOS 6.3

Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS en Fedora 12

Distribución de cuatro nodos de almacenamiento con GlusterFS en Fedora 12

Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en Fedora 12

    [...]
    /etc/glusterfs/glusterfs.vol  /mnt/glusterfs  glusterfs  defaults  0  0