Cómo instalar y configurar GlusterFS en Ubuntu 22.04
GlusterFS es un almacenamiento distribuido gratuito, de código abierto y definido por software, desarrollado por Gluster Inc, y posteriormente por Redhat. Proporciona interfaces para el almacenamiento de objetos, bloques y archivos, y se utiliza para cargas de trabajo de gran intensidad de datos, como el almacenamiento en la nube, la CDN y el streaming multimedia. Puede escalarse de forma modular para almacenar varios petabytes de datos. Soporta múltiples protocolos como NFS, SMB, CIFS, HTTP y FTP. Es perfectamente adecuado para diversos casos de uso que requieren el manejo de grandes cantidades de datos.
En este tutorial, aprenderemos a configurar un Volumen GlusterFS Replicado en Ubuntu 22.04.
Requisitos
- Dos servidores que ejecuten Ubuntu 22.04 con un disco duro externo de 2 GB en cada uno.
- Se configura una dirección IP estática 192.168.10.10 en el nodo1 y 192.168.10.11 en el nodo2.
- Se ha configurado una contraseña de root en ambos servidores.
Cómo empezar
Antes de empezar, se recomienda actualizar todos los paquetes del sistema en ambos servidores. Puedes actualizarlos ejecutando el siguiente comando en ambos servidores.
apt-get update -y apt-get upgrade -y
Una vez actualizados todos los paquetes del sistema, reinícialos para aplicar los cambios.
A continuación, también tendrás que editar el archivo /etc/hosts en ambos servidores y configurar la resolución de nombres de host para que cada servidor pueda comunicarse con el otro por nombre de host. Puedes hacerlo con el siguiente comando:
nano /etc/hosts
Añade las siguientes líneas:
192.168.10.10 node1 192.168.10.11 node2
Guarda y cierra el archivo cuando hayas terminado.
Instalar el servidor GlusterFS
Por defecto, GlusterFS está disponible en el repositorio por defecto de Ubuntu 22.04. Puedes instalarlo en ambos servidores utilizando el siguiente comando.
apt-get install glusterfs-server -y
Una vez instalado el paquete GlusterFS, inicia el servicio GlusterFS y habilítalo para que se inicie al arrancar con el siguiente comando:
systemctl start glusterd systemctl enable glusterd
También puedes comprobar el estado del servicio GlusterFS con el siguiente comando:
systemctl status glusterd
Deberías ver la siguiente salida:
? glusterd.service - GlusterFS, a clustered file-system server Loaded: loaded (/lib/systemd/system/glusterd.service; disabled; vendor preset: enabled) Active: active (running) since Sat 2022-11-05 04:10:13 UTC; 7s ago Docs: man:glusterd(8) Process: 92014 ExecStart=/usr/sbin/glusterd -p /var/run/glusterd.pid --log-level $LOG_LEVEL $GLUSTERD_OPTIONS (code=exited, status=0/SUCC> Main PID: 92015 (glusterd) Tasks: 9 (limit: 4579) Memory: 7.1M CPU: 2.260s CGroup: /system.slice/glusterd.service ??92015 /usr/sbin/glusterd -p /var/run/glusterd.pid --log-level INFO Nov 05 04:10:11 ubuntu2204 systemd[1]: Starting GlusterFS, a clustered file-system server... Nov 05 04:10:13 ubuntu2204 systemd[1]: Started GlusterFS, a clustered file-system server.
Cuando hayas terminado, puedes pasar al siguiente paso.
Crear almacenamiento GlusterFS
Para crear un almacenamiento GlusterFS, necesitarás un disco duro externo en ambos servidores. También necesitarás crear una partición en un disco duro externo(/dev/sdb) en ambos servidores.
Para crear una nueva partición en /dev/sdb, ejecuta el siguiente comando:
fdisk /dev/sdb
Deberías ver la siguiente salida:
Welcome to fdisk (util-linux 2.31.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x06091fe8. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-4194303, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-4194303, default 4194303): Created a new partition 1 of type 'Linux' and of size 2 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
A continuación, formatea la partición con el siguiente comando:
mkfs.xfs /dev/sdb1
Deberías ver el siguiente resultado:
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=131008 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0 data = bsize=4096 blocks=524032, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
A continuación, crea un directorio para el almacenamiento GlusterFS en ambos servidores con el siguiente comando:
mkdir /glustervolume
A continuación, monta el disco /dev/sdb1 en un directorio /glustervolume.
mount.xfs /dev/sdb1 /glustervolume
A continuación, edita el archivo /etc/fstab y haz que el montaje sea persistente tras el reinicio:
nano /etc/fstab
Añade la siguiente línea:
/dev/sdb1 /glustervolume xfs defaults 0 0
Guarda y cierra el archivo y ejecuta el siguiente comando para aplicar los cambios:
mount -a
Ahora puedes comprobar el directorio montado con el siguiente comando:
df -h
Deberías ver la siguiente salida:
Filesystem Size Used Avail Use% Mounted on tmpfs 393M 1.1M 392M 1% /run /dev/sda2 79G 8.6G 67G 12% / tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 393M 4.0K 393M 1% /run/user/0 /dev/sdb1 2.0G 35M 2.0G 2% /glustervolume
Configurar volumen GlusterFS
En primer lugar, tendrás que crear un pool de almacenamiento de confianza añadiendo el nodo2 al nodo1. Para ello, ejecuta el siguiente comando en el nodo1:
gluster peer probe node2
Puedes verificar el pool de almacenamiento añadido con el siguiente comando:
gluster pool list
Deberías obtener la siguiente salida:
UUID Hostname State 52245177-ce2e-4217-8da5-2ee7a33dcf46 node2 Connected b6da6e83-b1ea-46de-8904-1c5345b1c229 localhost Connected
A continuación, crea un directorio brick en ambos nodos con el siguiente comando:
mkdir /glustervolume/vol1
A continuación, crea un volumen llamado vol1 con dos réplicas:
gluster volume create vol1 replica 2 node1:/glustervolume/vol1 node2:/glustervolume/vol1
A continuación, inicia el volumen con el siguiente comando:
gluster volume start vol1
Puedes comprobar el estado del volumen creado con el siguiente comando:
gluster volume status
Deberías obtener la siguiente salida:
Status of volume: vol1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/glustervolume/vol1 49152 0 Y 7198 Brick node2:/glustervolume/vol1 49152 0 Y 13214 Self-heal Daemon on localhost N/A N/A Y 6121 Self-heal Daemon on node2 N/A N/A Y 12768 Task Status of Volume vol1 ------------------------------------------------------------------------------ There are no active volume tasks
Ahora puedes comprobar la información sobre el volumen creado utilizando el siguiente comando:
gluster volume info vol1
Deberías obtener la siguiente salida:
Volume Name: vol1 Type: Replicate Volume ID: a1023sd6d-81rt-12a2-bc4e-a4gd156c5331 Status: Started Snapshot Count: 0 Number of Bricks: 1 x 2 = 2 Transport-type: tcp Bricks: Brick1: node1:/glustervolume/vol1 Brick2: node2:/glustervolume/vol1 Options Reconfigured: transport.address-family: inet nfs.disable: on performance.client-io-threads: off
A continuación, monta el volumen creado en el directorio /opt en ambos nodos editando el archivo /etc/fstab para que tu volumen esté disponible cuando arranque el servidor.
nano /etc/fstab
Añade la siguiente línea:
localhost:/vol1 /opt glusterfs defaults,_netdev 0 0
Guarda y cierra el archivo cuando hayas terminado. A continuación, ejecuta el siguiente comando para aplicar los cambios:
mount -a
Probar Replicación
Tu servidor GlusterFS ya está instalado y configurado. Ahora, es el momento de probar la replicación entre ambos nodos.
En primer lugar, crea dos archivos en el nodo1:
touch /opt/test1 /opt/test2
Ahora, ve al nodo2 y ejecuta el siguiente comando:
ls -l /opt/
Deberías ver los mismos archivos que has creado en el nodo1:
total 0 -rw-r--r-- 1 root root 0 Nov 7 13:42 file1 -rw-r--r-- 1 root root 0 Nov 7 13:42 file2
Ahora, detén el servicio GlusterFS en el nodo2 con el siguiente comando:
service glusterd stop
A continuación, ve al nodo1 y comprueba el estado de los pares:
gluster peer status
Deberías ver que el nodo2 se ha desconectado:
Number of Peers: 1 Hostname: node2 Uuid: a134f146-1220-3avd-d3f6-1c2554a87sa1 State: Peer in Cluster (Disconnected)
También puedes comprobar el estado del volumen con el siguiente comando:
gluster volume status
Deberías ver la siguiente salida:
Status of volume: vol1 Gluster process TCP Port RDMA Port Online Pid ------------------------------------------------------------------------------ Brick node1:/glustervolume/vol1 49152 0 Y 7987 Self-heal Daemon on localhost N/A N/A Y 8010 Task Status of Volume vol1 ------------------------------------------------------------------------------ There are no active volume tasks
A continuación, crea otros dos archivos en el nodo1:
touch /opt/test3 /opt/test4
Ahora, ve al nodo2 e inicia el servicio GlusterFS con el siguiente comando:
service glusterd start
Ahora, comprueba el directorio /opt en el nodo2:
ls -l /opt/
Deberías ver que todos los archivos del nodo1 se han replicado y ahora están disponibles.
total 0 -rw-r--r-- 1 root root 0 Nov 7 13:42 test1 -rw-r--r-- 1 root root 0 Nov 7 13:42 test2 -rw-r--r-- 1 root root 0 Nov 7 13:44 test3 -rw-r--r-- 1 root root 0 Nov 7 13:44 test4
Conclusión
Enhorabuena! has instalado y configurado con éxito un servidor Glusterfs replicado de dos nodos en un servidor Ubuntu 22.04. Para más información, lee la página de documentación de GlusterFS. No dudes en preguntarme si tienes alguna duda.