En el mundo de la tecnología, siempre es crucial mantener los datos altamente disponibles para garantizar que sean accesibles para la aplicación o el usuario. Aquí se logra una alta disponibilidad mediante la distribución de los datos entre varios volúmenes/nodos.
Los usuarios/máquinas cliente pueden acceder al almacenamiento como almacenamiento local. Siempre que el usuario cree datos en el almacenamiento de Gluster, los datos se duplicarán/distribuirán a otros nodos de almacenamiento.
GlusterFS es un sistema de archivos de red escalable y de código abierto adecuado para cargas de trabajo con un uso intensivo de datos, como transmisión de medios, almacenamiento en la nube y CDN (red de entrega de contenido). GlusterFS fue desarrollado inicialmente por Gluster Inc y luego por Redhat, como resultado de la adquisición.
A continuación se encuentran las terminologías importantes que usamos a lo largo de este artículo.
Como se dijo anteriormente, el volumen es la colección de ladrillos, y la mayoría de las operaciones de glúteo, como la lectura y la escritura, ocurren en el volumen. GlusterFS admite diferentes tipos de volúmenes según los requisitos; adecuado para escalar el tamaño de almacenamiento o mejorar el rendimiento o para ambos.
En este artículo, configuraremos el volumen GlusterFS replicado en Ubuntu 16.04/Debian 8. Esta guía también debería funcionar en versiones anteriores de Ubuntu como Ubuntu 14.04/Ubuntu 12.04.
Este volumen proporciona una mejor confiabilidad de datos y redundancia de datos.
Aquí, vamos a configurar el volumen GlusterFS con dos réplicas. Asegúrese de tener dos sistemas de 64 bits (virtuales o físicos) con 1 GB de memoria y un disco duro de repuesto en cada sistema.
Nombre de host | Dirección IP | SO | Memoria | Disco | Propósito |
gluster1.itzgeek.local | 192.168.12.16 | Ubuntu 16.04 LTS | 1GB | /dev/sdb (5GB) | Nodo de almacenamiento 1 |
gluster2.itzgeek.local | 192.168.12.17 | Debian 8 | 1GB | /dev/sdb (5GB) | Nodo de almacenamiento 2 |
cliente.itzgeek.local | 192.168.12.8 | CentOS 7/Debian | NA | NA | Máquina cliente |
Para una demostración, estoy usando una distribución de Linux diferente para cada nodo de almacenamiento aquí. Le recomiendo que use una única distribución de Linux en todo el clúster, lo que le facilitará la resolución de los problemas que surjan en la producción. Configurar DNS:
Los componentes de GlusterFS usan DNS para las resoluciones de nombres, así que configure DNS o configure una entrada de hosts. Si no tiene un DNS en su entorno, modifique el archivo /etc/hosts y actualícelo según corresponda.
sudo vi /etc/hosts
192.168.12.16 gluster1.itzgeek.local gluster1
192.168.12.17 gluster2.itzgeek.local gluster2
192.168.12.20 client.itzgeek.local client
Añadir repositorio GlusterFS:
Antes de continuar con la instalación, debemos configurar el repositorio de GlusterFS en ambos nodos de almacenamiento. Siga las instrucciones para agregar el repositorio a su sistema.
Debian:
Instale el paquete de soporte para transacciones https.
sudo apt-get install -y lsb-release
sudo apt-get install -y apt-transport-https
Agregue la clave pública para el repositorio de GlusterFS.
wget -O - http://download.gluster.org/pub/gluster/glusterfs/LATEST/rsa.pub | sudo apt-key add -
echo deb https://download.gluster.org/pub/gluster/glusterfs/LATEST/Debian/$(lsb_release -sc)/apt $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/gluster.list
Ubuntu 16.04/14.04:
sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:gluster/glusterfs-3.8
Instalar GlusterFS:
Una vez que haya agregado el repositorio en sus sistemas, podemos continuar con la instalación de GlusterFS.
Actualice la memoria caché del repositorio.
sudo apt-get update
Instale el paquete GlusterFS usando el siguiente comando.
sudo apt-get install -y glusterfs-server
Inicie el servicio glusterfs-server en todos los nodos gluster.
sudo service glusterfs-server start
Verifique que el servicio glusterfs funcione correctamente.
raj@gluster1:~$ sudo service glusterfs-server status
● glusterfs-server.service - LSB: GlusterFS server
Loaded: loaded (/etc/init.d/glusterfs-server; bad; vendor preset: enabled)
Active: active (running) since Sat 2016-09-24 21:47:20 IST; 1min 6s ago
Docs: man:systemd-sysv-generator(8)
Process: 1570 ExecStop=/etc/init.d/glusterfs-server stop (code=exited, status=0/SUCCESS)
Process: 1664 ExecStart=/etc/init.d/glusterfs-server start (code=exited, status=0/SUCCESS)
Tasks: 7 (limit: 512)
Memory: 25.5M
CPU: 3.552s
CGroup: /system.slice/glusterfs-server.service
└─1673 /usr/sbin/glusterd -p /var/run/glusterd.pid
Sep 24 21:47:16 gluster1.itzgeek.local systemd[1]: Starting LSB: GlusterFS server...
Sep 24 21:47:16 gluster1.itzgeek.local glusterfs-server[1664]: * Starting glusterd service glusterd
Sep 24 21:47:20 gluster1.itzgeek.local glusterfs-server[1664]: ...done.
Sep 24 21:47:20 gluster1.itzgeek.local systemd[1]: Started LSB: GlusterFS server.
Configurar cortafuegos:
Deberá deshabilitar el firewall o configurar el firewall para permitir todas las conexiones dentro de un clúster.
sudo iptables -I INPUT -p all -s <ip-address> -j ACCEPT
Añadir almacenamiento:
Suponiendo que tiene un disco duro de repuesto en su máquina, /dev/sdb es el que usaré aquí para un ladrillo. Cree una única partición en el disco duro de repuesto que se muestra a continuación.
Deberá realizar los pasos a continuación en ambos nodos.
sudo fdisk /dev/sdb
Formatee la partición creada con el sistema de archivos de su elección.
sudo mkfs.ext4 /dev/sdb1
Monte el disco en un directorio llamado /data/gluster .
sudo mkdir -p /data/gluster
sudo mount /dev/sdb1 /data/gluster
Agregue una entrada a /etc/fstab para mantener el montaje persistente durante el reinicio.
echo "/dev/sdb1 /data/gluster ext4 defaults 0 0" | sudo tee --append /etc/fstab
Configurar GlusterFS en Ubuntu 16.04:
Antes de crear un volumen, debemos crear un grupo de almacenamiento de confianza agregando gluster2.itzgeek.local . Puede ejecutar los comandos de configuración de GlusterFS en cualquier servidor del clúster y ejecutará el mismo comando en todos los demás servidores.
Aquí ejecutaré todos los comandos de GlusterFS en gluster1.itzgeek.local nodo.
raj@gluster1:~$ sudo gluster peer probe gluster2.itzgeek.local
peer probe: success.
Verifique el estado del grupo de almacenamiento de confianza.
raj@gluster1:~$ sudo gluster peer status
Number of Peers: 1
Hostname: gluster2.itzgeek.local
Uuid: 51470928-dfa8-42e1-a221-d7bbcb8c13bd
State: Peer in Cluster (Connected)
Enumere el grupo de almacenamiento.
raj@gluster1:~$ sudo gluster pool list
UUID Hostname State
51470928-dfa8-42e1-a221-d7bbcb8c13bd gluster2.itzgeek.local Connected
dc7c1639-d21c-4adf-b28f-5150229e6980 localhost Connected
Configurar volumen de GlusterFS:
Cree un bloque (directorio) llamado “gvol0 ” en el sistema de archivos montado en ambos nodos.
sudo mkdir -p /data/gluster/gvol0
Dado que vamos a utilizar un volumen replicado, cree el volumen llamado "gvol0 ” con dos réplicas.
raj@gluster1:~$ sudo gluster volume create gvol0 replica 2 gluster1.itzgeek.local:/data/gluster/gvol0 gluster2.itzgeek.local:/data/gluster/gvol0
volume create: gvol0: success: please start the volume to access data
Inicia el volumen.
raj@gluster1:~$ sudo gluster volume start gvol0
volume start: gvol0: success
Verifique el estado del volumen creado.
raj@gluster1:~$ sudo gluster volume info gvol0
Volume Name: gvol0
Type: Replicate
Volume ID: ca102e4b-6cd1-4d9d-9c5a-03b882c76da0
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: gluster1.itzgeek.local:/data/gluster/gvol0
Brick2: gluster2.itzgeek.local:/data/gluster/gvol0
Options Reconfigured:
transport.address-family: inet
performance.readdir-ahead: on
nfs.disable: on
Configurar cliente GlusterFS:
Instalar glusterfs-client paquete para admitir el montaje de sistemas de archivos GlusterFS. Ejecute todos los comandos como raíz usuario.
$ su -
### CentOS / RHEL ###
yum install -y glusterfs-client
### Ubuntu / Debian ###
apt-get install -y glusterfs-client
Cree un directorio para montar el sistema de archivos GlusterFS.
mkdir -p /mnt/glusterfs
Ahora, monte el sistema de archivos GlusterFS en /mnt/glusterfs usando el siguiente comando.
mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt/glusterfs
También puedes usar gluster2.itzgeek.local en lugar de gluster1.itzgeek.com en el comando anterior.
Verifique el sistema de archivos GlusterFS montado.
[root@client ~]# df -hP /mnt/glusterfs
Filesystem Size Used Avail Use% Mounted on
gluster1.itzgeek.local:/gvol0 4.8G 11M 4.6G 1% /mnt/glusterfs
También puede usar el siguiente comando para verificar el sistema de archivos GlusterFS.
[root@client ~]# cat /proc/mounts
rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
devtmpfs /dev devtmpfs rw,seclabel,nosuid,size=490448k,nr_inodes=122612,mode=755 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /dev/shm tmpfs rw,seclabel,nosuid,nodev 0 0
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode=755 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,nosuid,nodev,noexec,relatime,devices 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/net_cls cgroup rw,nosuid,nodev,noexec,relatime,net_cls 0 0
configfs /sys/kernel/config configfs rw,relatime 0 0
/dev/mapper/centos-root / xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
selinuxfs /sys/fs/selinux selinuxfs rw,relatime 0 0
systemd-1 /proc/sys/fs/binfmt_misc autofs rw,relatime,fd=25,pgrp=1,timeout=300,minproto=5,maxproto=5,direct 0 0
hugetlbfs /dev/hugepages hugetlbfs rw,seclabel,relatime 0 0
debugfs /sys/kernel/debug debugfs rw,relatime 0 0
mqueue /dev/mqueue mqueue rw,seclabel,relatime 0 0
/dev/mapper/centos-home /home xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
/dev/sda1 /boot xfs rw,seclabel,relatime,attr2,inode64,noquota 0 0
tmpfs /run/user/0 tmpfs rw,seclabel,nosuid,nodev,relatime,size=100136k,mode=700 0 0
gluster1.itzgeek.local:/gvol0 /mnt/glusterfs fuse.glusterfs rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
Agregue la siguiente entrada a /etc/fstab para montar automáticamente durante el arranque del sistema.
gluster1.itzgeek.local:/gvol0 /mnt/glusterfs glusterfs defaults,_netdev 0 0
Pruebe la replicación y la alta disponibilidad de GlusterFS:
Lado del servidor GlusterFS:
Para verificar la replicación, monte el volumen GlusterFS creado en el mismo nodo de almacenamiento.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt
raj@gluster2:~$ sudo mount -t glusterfs gluster2.itzgeek.local:/gvol0 /mnt
Datos dentro de /mnt El directorio de ambos nodos siempre será el mismo (replicación).
Lado del cliente GlusterFS:
Vamos a crear algunos archivos en el sistema de archivos montado en client.itzgeek.local.
touch /mnt/glusterfs/file1
touch /mnt/glusterfs/file2
Verifique los archivos creados.
[root@client ~]# ll /mnt/glusterfs/
total 0
-rw-r--r--. 1 root root 0 Sep 26 11:22 file1
-rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Pruebe los dos nodos de GlusterFS para ver si tienen los mismos datos dentro de /mnt .
raj@gluster1:~$ ll /mnt/
total 12
drwxr-xr-x 4 root root 4096 Sep 26 20:52 ./
drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../
-rw-r--r-- 1 root root 0 Sep 26 20:52 file1
-rw-r--r-- 1 root root 0 Sep 26 20:52 file2
raj@gluster2:~$ ls -al /mnt/
total 12
drwxr-xr-x 4 root root 4096 Sep 26 06:30 .
drwxr-xr-x 23 root root 4096 Sep 24 08:39 ..
-rw-r--r-- 1 root root 0 Sep 26 2016 file1
-rw-r--r-- 1 root root 0 Sep 26 2016 file2
Como saben, hemos montado el volumen GlusterFS desde gluster1.itzgeek.local en cliente.itzgeek.local , ahora es el momento de probar la alta disponibilidad del volumen cerrando el nodo.
raj@gluster1:~$ sudo poweroff
Ahora pruebe la disponibilidad de los archivos, verá los archivos que creamos recientemente aunque el nodo esté inactivo.
[root@client ~]# ll /mnt/glusterfs/
total 0
-rw-r--r--. 1 root root 0 Sep 26 11:22 file1
-rw-r--r--. 1 root root 0 Sep 26 11:22 file2
Es posible que experimente lentitud al ejecutar comandos en el sistema de archivos GlusterFS montado debido al cambio de GlusterFS a gluster2.itzgeek.local cuando el client.itzgeek.local no se puede llegar a gluster1.itzgeek.local .
Cree algunos archivos más en el sistema de archivos GlusterFS para verificar la replicación.
touch /mnt/glusterfs/file3
touch /mnt/glusterfs/file4
Verifique el conteo de archivos.
[root@client ~]# ll /mnt/glusterfs/
total 0
-rw-r--r--. 1 root root 0 Sep 26 11:22 file1
-rw-r--r--. 1 root root 0 Sep 26 11:22 file2
-rw-r--r--. 1 root root 0 Sep 26 11:26 file3
-rw-r--r--. 1 root root 0 Sep 26 11:26 file4
Desde el gluster1 está inactivo, todos sus datos ahora están escritos en gluster2.itzgeek.local debido a la alta disponibilidad. Ahora encienda el nodo1 (gluster1.itzgeek.local ).
Compruebe el /mnt del gluster1.itzgeekk.local; debería ver los cuatro archivos en el directorio, esto confirma que la replicación funciona como se esperaba.
raj@gluster1:~$ sudo mount -t glusterfs gluster1.itzgeek.local:/gvol0 /mnt
[sudo] password for raj:
raj@gluster1:~$ ll /mnt/
total 12
drwxr-xr-x 4 root root 4096 Sep 26 20:59 ./
drwxr-xr-x 24 root root 4096 Sep 25 21:57 ../
-rw-r--r-- 1 root root 0 Sep 26 20:52 file1
-rw-r--r-- 1 root root 0 Sep 26 20:52 file2
-rw-r--r-- 1 root root 0 Sep 26 20:56 file3
-rw-r--r-- 1 root root 0 Sep 26 20:56 file4
Eso es todo.