Como montar un sistema de ficheros distribuido

Como montar un sistema de ficheros distribuido

En determinados proyectos he necesitado montar un sistema de almacenamiento distribuido. Entre estos sistemas nos encontramos con drbd, ceph o glusterfs.

En este artículo montaremos este sistema de almacenamiento distribuido con glusterfs.

Esquema del proyecto

esquema

Requerimientos

Como se puede ver en la imagen, utilizaremos 3 servidores con 2 tarjetas de red cada uno. Una de las tarjetas la utilizaremos para la comunicación de la red local, mientras que la otra la utilizaremos en exclusiva para la replicación de glusterfs.

En cada uno de los servidores tendremos 2 discos duros. El primero (/dev/sda) lo utilizaremos para el sistema operativo, y el segundo (/dev/sdb) para los datos que queremos replicar.

NOTA: gluster almacena información en el directorio /var/lib/glusterd. Esta información se crea dinámicamente, por lo que si en algún momento glusterd no puede crear estos ficheros nos podemos encontrar con un comportamiento no deseado. Es necesario activar un sistema de monitorización para el disco duro para evitarlo.

El sistema operativo es CentOS 7 minimal con las actualizaciones de seguridad aplicadas. He seleccionado la opción minimal para la instalación para no tener software innecesario. También se puede preparar este entorno con otras distribuciones, pero en este caso he elegido CentOS pensando en futuras entradas que publicaré.

Configuraciones previas

  • selinux: configuraremos selinux para que registre los eventos que puedan ocurrir. Podemos realizar este cambio ejecutando:
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
  • resolución de nombres: es necesario que los nombres de servidores se puedan resolver, ya sea a través de DNS como del fichero /etc/hosts. Es recomendable utilizar un servidor DNS, pero en este artículo utilizaremos el fichero hosts para simplificar.
  • programas básicos:  aunque no sea imprescindible instalaremos los siguientes programas ejecutando:
yum install -y net-tools ntpdate ntp screen rsync telnet vim wget iftop
  • ntp: cualquier servicio que requiera comunicación con varios servidores es imprescindible que la hora sea la misma en todos los servidores implicados. Este caso no es distinto, por lo que activaremos el servicio NTP ejecutando:
systemctl start ntpd && systemctl enable ntpd

Preparacion disco

Necesitamos preparar el disco que utilizaremos para almacenar los datos distribuidos. Como vemos en el esquema, el disco que utilizaremos es /dev/sdb1. Lo prepararemos ejecutando:

parted -s /dev/sdb mklabel msdos
ncyl=$(parted /dev/sdb unit cyl print  | sed -n 's/.*: \([0-9]*\)cyl/\1/p')
parted -a optimal /dev/sdb mkpart primary 0cyl ${ncyl}cyl

Una vez creada la partición la formatearemos con el sistema de ficheros xfs:

mkfs.xfs -i size=512 /dev/sdb1

Y finalmente creamos el directorio en el que montaremos esta partición y prepararemos el fstab:

mkdir -p /gluster
echo '/dev/sdb1 /gluster xfs defaults 1 2' >> /etc/fstab
mount -a && mount

Instalación

Una vez preparados los servidores, vamos a instalar los programas necesarios. Realizaremos la instalación en todos los nodos del cluster ejecutando los siguientes comando en cada uno de los nodos:

yum install -y epel-release
yum update
yum install -y centos-release-gluster38
yum install -y glusterfs-server

Finalmente prepararemos el servicio para que arranque automáticamente con el servidor y lo activamos

systemctl enable glusterd
service glusterd start

y verificamos que está funcionando correctamente

service glusterd status

Configuración

Seguidamente configuraremos el servicio y crearemos los volúmenes que utilizaremos para la réplica. Los siguientes comandos los ejecutaremos solamente en el primer nodo:

gluster peer probe gnode2.eslinux.org
gluster peer probe gnode3.eslinux.org

En todos los nodos crearemos la carpeta en la que montaremos los volúmenes

mkdir -p /gluster/export/brick

y finalmente creamos el volumen. Los siguientes comandos solo lo ejecutaremos en el primer nodo

gluster volume create export replica 3 arbiter 1 gnode1.eslinux.org:/gluster/export/brick gnode2.eslinux.org:/gluster/export/brick gnode3.eslinux.org:/gluster/export/brick
gluster volume start export

Desde cualquier nodo verificamos que el volumen se ha creado correctamente ejecutando

gluster volume info

Pruebas

Ya tenemos el servicio configurado y funcionando pero antes de finalizar la instalación verificaremos que la información se replica en todos los nodos. Para ello ejecutamos en cualquier nodo:

mount -t glusterfs gnode1.eslinux.org:/export /mnt
for i in `seq -w 1 20`; do cp -rp /var/log/messages /mnt/copy-test-$i; done

Desde los otros nodos verificamos que los ficheros también existen

ls -lA /data/export/brick/

Conclusiones

Como habéis podido comprobar, la instalación y configuración de este sistema de ficheros distribuido es muy sencilla, pero hay mucho por revisar y aprender. Es necesario mantener, optimizar y monitorizar todo el sistema, y para ello será necesario invertir tiempo.

En futuras entradas del blog utilizaremos este sistema de ficheros con ovirt, un potente sistema de virtualización open source que nos ofrece funcionalidades avanzadas como las que podemos encontrar en vmware.

Hasta la próxima!

Un comentario sobre “Como montar un sistema de ficheros distribuido

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *