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
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”
Thanks alot – your answer solved all my problems after several days stugiglrng