Este tutorial muestra cómo configurar un almacenamiento de alta disponibilidad con dos servidores de almacenamiento (Fedora 12) que usan GlusterFS. Cada servidor de almacenamiento será un espejo del otro servidor de almacenamiento y los archivos se replicarán automáticamente en ambos servidores de almacenamiento. El sistema cliente (también Fedora 12) 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.
¡No emito ninguna garantía de que esto funcione para usted!
1 nota preliminar
En este tutorial utilizo tres sistemas, dos 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)
- cliente1.ejemplo.com:dirección IP 192.168.0.102 (cliente)
Los tres 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 contenga las siguientes líneas en los tres 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 por si los nombres de host se pueden resolver o no).
2 Configuración de los servidores GlusterFS
servidor1.ejemplo.com/servidor2.ejemplo.com:
El servidor GlusterFS está disponible como paquete para Fedora 12, por lo que podemos instalarlo de la siguiente manera:
yum install glusterfs-server
El comando
glusterfs --version
ahora debería mostrar la versión de GlusterFS que acaba de instalar (2.0.9 en este caso):
[[email protected] ~]# glusterfs --version
glusterfs 2.0.9 construido el 3 de ene 2010 00:12:49
Revisión del repositorio: v2.0.9
Copyright (c) 2006- 2009 Gluster Inc.
GlusterFS viene sin NINGUNA GARANTÍA.
Usted puede redistribuir copias de GlusterFS según los términos de la Licencia Pública General de GNU.
[[correo electrónico protegido] ~]#
A continuación, creamos algunos directorios:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
Ahora creamos el archivo de configuración del servidor GlusterFS /etc/glusterfs/glusterfsd.vol (hacemos una copia de seguridad del archivo original /etc/glusterfs/glusterfsd.vol primero) que define qué directorio se exportará (/data/export) y qué el cliente puede conectarse (192.168.0.102 =client1.example.com):
cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig
cat /dev/null> /etc/glusterfs/glusterfsd.vol
vi /etc/glusterfs/glusterfsd.vol
[...] 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 [...] |
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.102,192.168.0.103).
Luego creamos los enlaces de inicio del sistema para el servidor GlusterFS y lo iniciamos:
chkconfig --levels 35 glusterfsd en
/etc/init.d/glusterfsd start
3 Configuración del cliente GlusterFS
cliente1.ejemplo.com:
Hay un paquete rpm de cliente GlusterFS para Fedora 12, pero el problema es que obtendrá errores como df:'/mnt/glusterfs':el software provocó la interrupción de la conexión o df:'/mnt/glusterfs':el punto final de transporte no está conectado cuando intenta acceder al recurso compartido GlusterFS. Es por eso que creamos el cliente GlusterFS a partir de las fuentes para evitar estos problemas.
Antes de compilar el cliente GlusterFS, instalamos sus requisitos previos:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Luego descargamos las fuentes de GlusterFS 2.0.9 (¡tenga en cuenta que esta es la misma versión que está instalada en el servidor!) y compilamos GlusterFS de la siguiente manera:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configurar
Al final del comando ./configure, debería ver algo como esto:
[...]
Resumen de configuración de GlusterFS
==========================
FUSE cliente :yes
Infiniband verbs : yes
epoll IO multiplex : yes
Berkeley-DB : yes
libglusterfsclient : yes
argp-standalone : no
[[correo electrónico protegido] glusterfs-2.0.9]#
hacer &&hacer instalar
ldconfig
Compruebe la versión de GlusterFS después (debe ser 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 construido el 19 de feb 2010 19:20:46
Revisión del repositorio: v2.0.9
Copyright ( c) 2006-2009 Gluster Inc.
GlusterFS viene sin NINGUNA GARANTÍA EN ABSOLUTO.
Usted puede redistribuir copias de GlusterFS según los términos de la Licencia pública general de GNU.
[[correo electrónico protegido] glusterfs-2.0.9]#
Luego creamos 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.102 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
[[email protected] ~]# mount
/dev/mapper/vg_server3-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts en /dev/pts escriba devpts (rw,gid=5,mode=620)
tmpfs en /dev/shm escriba tmpfs (rw)
/dev/sda1 en /boot escriba ext4 (rw)
ninguno en /proc/sys/fs/binfmt_misc escriba binfmt_misc (rw)
sunrpc en /var/lib/nfs/rpc_pipefs escriba rpc_pipefs (rw)
/etc/glusterfs/glusterfs.vol en /mnt/glusterfs escriba fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... y...
df -h
[[email protected] ~]# df -h
Sistema de archivos Tamaño Usado Avail Use% Montado en
/dev/mapper/vg_server3-lv_root
29G 2.5G % / 10 TMPFS 248M 0 248M 0%/dev/shm
/dev/sda1 194m 23m 161m 13%/boot
/etc/glusterfs/glusterfs.vol
29g 2.5g 25g 10%/mnt/mnt/mnt/ glusterfs
[[correo electrónico protegido] ~]#
(server1.example.com y server2.example.com tienen cada uno 29 GB de espacio para el sistema de archivos GlusterFS, pero debido a que los datos están reflejados, el cliente no ve 58 GB (2 x 29 GB), sino solo 29 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 replicate type cluster/replicate subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate 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
Ahora revisemos el directorio /data/export en server1.example.com y server2.example.com. Los archivos test1 y test2 deben estar presentes en cada nodo:
servidor1.ejemplo.com/servidor2.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test1
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test2
[[email protected] ~]#
Ahora cerramos server1.example.com y agregamos/eliminamos algunos archivos en el recurso compartido GlusterFS en client1.example.com.
servidor1.ejemplo.com:
shutdown -h now
cliente1.ejemplo.com:
toque /mnt/glusterfs/test3
toque /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Los cambios deberían estar visibles en el directorio /data/export en server2.example.com:
servidor2.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test1
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test3
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test4
[[correo electrónico protegido] ~]#
Iniciemos server1.example.com nuevamente y echemos un vistazo al directorio /data/export:
servidor1.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test1
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test2
[[email protected] ~]#
Como puede ver, server1.example.com no ha notado los cambios que ocurrieron mientras estaba inactivo. Esto es fácil de arreglar, todo lo que tenemos que hacer es invocar un comando de lectura en el recurso compartido GlusterFS en client1.example.com, por ejemplo:
cliente1.ejemplo.com:
ls -l /mnt/glusterfs/
[[email protected] ~]# ls -l /mnt/glusterfs/
total 0
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test1
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test3
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test4
[[correo electrónico protegido] ~]#
Ahora eche un vistazo al directorio /data/export en server1.example.com nuevamente, y debería ver que los cambios se han replicado en ese nodo:
servidor1.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2010-02-22 16:50 test1
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test3
-rw-r--r-- 1 root root 0 2010-02-22 16:53 test4
[[correo electrónico protegido] ~]#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- Fedora:http://fedoraproject.org/
-
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 de alta disponibilidad con GlusterFS en CentOS 5.4:replicación automática de archivos (espejo) en dos servidores de almacenamiento
-
Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en CentOS 5.4
-
Distribución de cuatro nodos de almacenamiento con GlusterFS en CentOS 5.4
Almacenamiento de alta disponibilidad con GlusterFS en Debian 8:espejo en dos servidores de almacenamiento
Almacenamiento de alta disponibilidad con GlusterFS en Ubuntu 18.04 LTS
Distribución de cuatro nodos de almacenamiento con GlusterFS en Fedora 12
Creación de un servidor de almacenamiento independiente similar a NFS con GlusterFS en Fedora 12
Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en Fedora 12
Creación de un servidor de almacenamiento independiente similar a NFS con GlusterFS en Fedora 13
[...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0 |