sábado, 4 de febrero de 2017

GlusterFS en un conjunto de nodos cluster Orange Pi

Para nuestro cluster de laboratorio (basado en placas Orange Pi Plus 2E) vamos a montar un conjunto de nodos tal que tengamos un sistema de ficheros distribuido como alternativa al HDFS (de Hadoop) para nuestra plataforma de BigData.


Para este caso, montaremos el cada nodo un brick de GlusterFS tal que en los N-nodos tengamos un sistema de almacenamiento distribuido.

Para el almacenamiento, en este caso, hemos añadido un USB de calidad (un Kingston DataTraveler 3.1 de 64Gb) en cada uno de los nodos, el cual repartiremos sus 64Gb, en 16G locales y el resto en un brick por nodo para la red Gluster.

Instalación de software necesario
Como podreis recordad de las entradas previas, el sistema operativo es Armbian (basado en Debian) en cada uno de los nodos del cluster, por lo que vamos empezar a cargar los paquetes necesarios. Vamos a utilizar también el sistema LVM, de gestión de volúmenes lógicos para poder permitir a corto plazo aumentar los discos (Pendrives), tanto para su uso local como brick dentro del sistema glusterFS.

sudo aptitude install lvm2 xfsprogs glusterfs-server

Paramos el servicio.
sudo service glusterfs-server stop

Creación del pendrive como tipo LVM
Opción 1: Uso de fdisk
sudo fdisk /dev/sda
Opcion: g
Opcion: n
Opcion: t, 23
Opcion: w

Opción 2: Uso de parted
sudo parted -s -- /dev/sda mktable gpt
sudo parted -s -- /dev/sda mkpart primary 2048s 100%
sudo parted -s -- /dev/sda set 1 lvm on

Añadir LVM
sudo pvcreate /dev/sda1
sudo pvdisplay


sudo vgcreate vgpool /dev/sda1
sudo vgdisplay

Si quisiéramos utilizar todo el espacio del pendrive como brick, podemos lanzar la sentencia siguiente:
sudo lvcreate -l 100%VG -n gbrick1 vgpool

No obstante, vamos a repartir los 64Gb teóricos del pendrive de la siguiente manera, 16 locales y el resto al brick para su uso en GlusterFS.
sudo lvcreate -L 41G -n gbrick1 vgpool
sudo lvcreate -L 16G -n lvlocal vgpool

Para comprobar la distribución y que tenemos el volumen lógico como queremos, ejecutamos la siguiente instrucción:
sudo lvdisplay

Formateado
Debido a que en el kernel actual (3.4.113) de Armbian en su versión Legacy no tiene soporte de XFS (el sistema de ficheros recomendado para glusterFS)

sudo mkfs.xfs -i size=512 /dev/vgpool/gbrick1
o
sudo mkfs.ext4 /dev/vgpool/gbrick1

Mientras que para la parte del disco (pendrive) que usaremos como 100% local para varios usos, será:
sudo mkfs.ext4 /dev/vgpool/lvlocal

Chequeos varios
Un conjunto de pasos para chequear como lo estamos haciendo.
sudo lvscan
sudo vgscan
sudo pvscan
sudo lvs

Creación de carpetas persistentes e instrucciones finales.
sudo blkid -c /dev/null
sudo mkdir -p /var/lib/gvol0
sudo mount /dev/vgpool/gbrick1 /var/lib/gvol0 
sudo mkdir /media/local
sudo mount /dev/vgpool/lvlocal /media/local

Vamos a configurar los volúmenes para que en el arranque esten disponibles.
sudo nano /etc/fstab

Añadimos las lineas siguientes:
# USB_INFERIOR (LVM)
/dev/vgpool/gbrick1 /var/lib/gvol0 ext4 defaults,noatime,nodiratime 0 0
/dev/vgpool/lvlocal /media/local ext4 defaults,noatime,nodiratime 0 0

Pasos a realizar en cada uno de los nodos
Todos los pasos anteriores se debe hacer en cada nodo, tal que repartamos a local y gluster (brick) el/los pendrives que queramos añadir a la placa Orange Pi, y mediante el uso de volúmenes lógicos lo tendremos escalable por si vamos añadiendo más pendrives.

Para cada nodo, crearemos un brick con un número diferente, a fin de que sean facilmente diferenciables.
cd /var/lib/gvol0/

En CL01
sudo mkdir /var/lib/gvol0/brick1

En CL02
sudo mkdir /var/lib/gvol0/brick2

En CL03
sudo mkdir /var/lib/gvol0/brick3

Borrar LVM
Esto es sólo por si queremos empezar de cero otra vez, así que, sólo en caso necesario.
umount /var/lib/gvol0 
lvremove /dev/vgpool/gbrick1
vgremove vgpool
pvremove /dev/sda1

Iniciar glusterFS
Hasta lo que hemos leído en la presente entrada es la preparación de los discos (pendrives) y usar el gestor de LVM para fácilmente sea ampliable. Ahora es momento de GlusterFS y realizar el objetivo principal, tener un sistema de varios servidores (nodo) con un sistema de ficheros distribuido.

En cada uno de los nodos iniciamos el servicio.
sudo service glusterfs-server start

En CL01
sudo gluster peer probe cl02
sudo gluster peer probe cl03
sudo gluster peer status

En CL02
sudo gluster peer probe cl01
sudo gluster peer probe cl03
sudo gluster peer status

En CL03
sudo gluster peer probe cl01
sudo gluster peer probe cl02
sudo gluster peer status

Chequeamos por ejemplo en el primer nodo.
sudo gluster peer status
sudo gluster pool list

En el caso en cuestión para la plataforma BigData que estoy montando no existirán réplicas sino que será un volumen con el tamaño total de los bricks, ya que no nos interesa (por ahora) tener un sistema de réplicas de la información.

sudo gluster volume create gv0 transport tcp \
cl01:/var/lib/gvol0/brick1 \
cl02:/var/lib/gvol0/brick2

Configuración del volumen creado.
sudo gluster volume set gv0 auth.allow 192.168.1.*
sudo gluster volume set gv0 nfs.disable off
sudo gluster volume set gv0 nfs.addr-namelookup off
sudo gluster volume set gv0 nfs.export-volumes on
sudo gluster volume set gv0 nfs.rpc-auth-allow 192.168.1.*
sudo gluster volume start gv0 

Añadir un nuevo brick a GlusterFS
sudo gluster volume add-brick gv0 cl03:/var/lib/gvol0/brick3

Rebalanzar tras añadir un brick en Gluster FS
sudo gluster volume rebalance gv0 start

Información del volumen.
sudo gluster volume info gv0

Montar el volumen GlusterFS
Para montar el volumen en un nodo y poder utilizar el sistema de ficheros distribuido al completo, podemos realizarlo de varias maneras:

Suponemos que estamos en el primer nodo del cluster (CL01)

en /etc/fstab:
cl01:/gv0 /media/glusterfs glusterfs defaults,_netdev 0 0

o si queremos con detalle en el arranque.
cl01:/gv0 /media/glusterfs glusterfs defaults,_netdev,log-level=WARNING,log-file=/var/log/gluster.log 0 0

de forma manual:
sudo mkdir /media/glusterfs
sudo mount -t glusterfs cl01:/gv0 /media/glusterfs

Comprobamos que ya tenemos acceso
df -h /media/glusterfs/
Y también desde cualquier nodo o ordenador podemos montar el sistema GlusterFS para poder acceder a su contenido, como podemos ver en la siguiente captura

Así pues, sea un nodo gluster de la red cluster o cualquier nodo, se puede acceder al sistema de archivos distribuido.

Entradas relacionadas:



No hay comentarios: