Este artículo es la continuación de la Parte 1 y será tomado como base para este.
3- Operaciones básicas y de control del volumen gluster
El artículo anterior se limitó solo a la creación del volumen, pero hay muchos otros elementos a tener en cuenta, como agregar discos, sustituir discos rotos…
3.1- Agregando discos a un volumen distribuido replicado
Al expandir el volumen distribuido-replicado, se debe de agregar una cantidad de discos que sea un múltiplo del recuento de réplicas. Por ejemplo, para expandir un volumen replicado distribuido con un recuento de réplicas de 2, se deben agregar discos en múltiplos de 2 (como 4, 6, 8, etc.).
Lo más lógico es colocar estos discos no en los mismos nodos, sino distribuidos. En este caso se van a agregar dos discos, uno a gluster1 y otro a gluster2.
Primeramente se le da formato al disco y se crea una partición, en este caso específico el disco que se va a montar será el ubicado en /dev/sdd tanto en gluster1 como en gluster2:
dev='/dev/sdd' && \ printf "o\nn\np\n1\n\n\nw\n" | fdisk "$dev" && \ mkfs.xfs -i size=512 "${dev}1"
Se creael directorio en donde se va a montar el disco, se agrega el punto de montaje persistente y se aplica el montaje:
mkdir -p /data/glusterfs/vol1/brick2 && \ echo "/dev/sdd1 /data/glusterfs/vol1/brick2 xfs defaults 0 0 " >> /etc/fstab && \ mount -a
Se puede comprbar que se haya montado correctamente con
df -hT | grep glusterfs
Se crea la carpeta de montaje del volumen, pues recordando no se puede montar el volumen gluster en el mismo punto de montaje del disco:
mkdir -p /data/glusterfs/vol1/brick2/data
Ahora toca agregar los discos al volumen ya existente, en el caso presente el volumen existente tiene como nombre (vol1) siguiendo:
# El comando sigue el formato de: # gluster volume add-brick [volname] [new-bricks] gluster volume add-brick vol1 gluster1:/data/glusterfs/vol1/brick2/data gluster2:/data/glusterfs/vol1/brick2/data volume add-brick: success
Para comprobar la correcta aplicación del cambio solo basta con checkear la info del disco. Como se aprecia ahora el volumen cuenta con 8 discos, en vez de 6:
gluster volume info vol1 […….] Brick7: gluster1:/data/glusterfs/vol1/brick2/data Brick8: gluster2:/data/glusterfs/vol1/brick2/data […….]
Y se puede listar los volúmenes montados para verificar que, en efecto, el volumen creció de tamaño (anteriormente el volumen contaba con 3GB, ahora cuenta con 4Gb, pues al agregar dos discos de 1GB, al estar replicada la información, solo será utilizable 1GB más):
df -h | grep gluster /dev/sdb1 1017M 140M 878M 14% /data/glusterfs/vol1/brick0 /dev/sdc1 1017M 235M 783M 24% /data/glusterfs/vol1/brick1 gluster1:/vol1 4.0G 595M 3.4G 15% /var/lib/datastores/gluster_mount /dev/sdd1 1017M 40M 978M 4% /data/glusterfs/vol1/brick2
Ya los nuevos discos fueron reconocidos, pero hay que hacer un rebalance para que la información pueda ser guardada en los discos nuevos:
# gluster volumen rebalance [volname] fix-layout start gluster volume rebalance vol1 fix-layout start volume rebalance: vol1: success: Rebalance on vol1 has been started successfully. Use rebalance status command to check status of the rebalance process. ID: 1180aa8c-5198-49cb-beeb-5741f7058efc
Tener en cuenta que el comando ejecutado anteriormente realiza un rebalance solo en el nodo en el que se agregó el disco, esto es útil se los discos se agregaron en un mismo nodo. Para hacer un rebalance general hay que correr otro comando:
gluster volume rebalance vol1 start volume rebalance: vol1: success: Rebalance on vol1 has been started successfully. Use rebalance status command to check status of the rebalance process. ID: 6130b5d5-a5a4-49d4-bf0e-02f9ddcc9645
Se puede checkear el estado del rebalance con:
gluster volume rebalance vol1 status Node Rebalanced-files size scanned failures skipped status run time in h:m:s --------- ----------- ----------- ----------- ----------- ----------- ------------ -------------- gluster2 0 0Bytes 9 2 0 completed 0:00:00 gluster3 2 66Bytes 10 0 0 completed 0:00:02 localhost 0 0Bytes 6 0 0 completed 0:00:01 volume rebalance: vol1: success
NOTA: En el ejemplo presente se trabaja en un ambiente ultra controlado, pero en producción (en caso de ser requerido) debe hacerse con extrema precaución y evitando horarios de máxima actividad por parte de los clientes pues puede ser un proceso que demore.
3.2- Reemplazando discos rotos de un volumen distribuido replicado
Puede darse el caso de que exista un disco con problemas, que resulte inutilizable, el siguiente procedimiento se realiza en estos casos en los que hay que reemplazar algún disco.
Para simular un caso real, se copió información al volumen:
ls -lah /var/lib/datastores/gluster_mount/ total 2.5G drwxrwxr-x 7 root root 4.0K Nov 3 04:56 . drwxr-xr-x 4 root root 4.0K Nov 3 02:03 .. drwxr-xr-x 2 root root 4.0K Nov 3 03:02 lock drwxr-xr-x 2 root root 4.0K Nov 3 02:03 share -rw-rw-r-- 1 user user 219M Nov 3 04:48 'The.Office.S07E01.Nepotism.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 193M Nov 3 04:49 'The.Office.S07E02.Counseling.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 181M Nov 3 04:50 'The.Office.S07E03.Andys.Play.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 191M Nov 3 04:51 'The.Office.S07E04.Sex.Ed.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 194M Nov 3 04:52 'The.Office.S07E05.The.Sting.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 209M Nov 3 04:53 'The.Office.S07E06.Costume.Contest.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 237M Nov 3 04:54 'The.Office.S07E07.Christening.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 175M Nov 3 04:55 'The.Office.S07E08.Viewing.Party.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 226M Nov 3 04:56 'The.Office.S07E09.WUPHF.com.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 1 user user 217M Nov 3 04:58 'The.Office.S07E10.China.720p.BrRip.x264-[MULVAcoded].mkv' -rw-r--r-- 1 root root 396M Nov 2 18:06 'your home router SUCKS use pfSense instead.mp4'
Para comprobar el estado del volumen, como se puede apreciar hay información en el volumen:
df -h | grep gluster /dev/sdb1 1017M 140M 878M 14% /data/glusterfs/vol1/brick0 /dev/sdc1 1017M 528M 490M 52% /data/glusterfs/vol1/brick1 gluster1:/vol1 4.0G 2.6G 1.5G 65% /var/lib/datastores/gluster_mount /dev/sdd1 1017M 610M 408M 60% /data/glusterfs/vol1/brick2
En este ejemplo se asumirá que el disco roto es sdc de gluster1.
En el comando anterior ya detectamos su punto de montaje (/data/glusterfs/vol1/brick1) y se puede ver que tiene un 52% del espacio ocupado, ahora se necesita saber el nodo en el que se encuentra y qué número de disco es:
gluster volume info […..] Brick2: gluster2:/data/glusterfs/vol1/brick0/data Brick3: gluster1:/data/glusterfs/vol1/brick1/data Brick4: gluster3:/data/glusterfs/vol1/brick0/data […..]
Como se aprecia es el disco 3 (Brick3). Ya con todos los datos en mente se busca el PID del disco:
gluster volume status Status of volume: vol1 Gluster process TCP Port RDMA Port Online Pid […….] data 49152 0 Y 1133 Brick gluster1:/data/glusterfs/vol1/brick1/ data 49153 0 Y 1157 Brick gluster3:/data/glusterfs/vol1/brick0/ data 49154 0 Y 1736 […….]
Como vemos el su PID es 1157. Ahora toca detener el proceso:
kill -15 1157
Se comprueba nuevamente el estado del volumen y se checkea el estado de dicho disco:
gluster volume status […..] data 49152 0 Y 1133 Brick gluster1:/data/glusterfs/vol1/brick1/ data N/A N/A N N/A Brick gluster3:/data/glusterfs/vol1/brick0/ data 49154 0 Y 1736 […..]
Como se aprecia ya el disco no tiene asociado ningún PID. Se procede a desmontar el disco:
umount /data/glusterfs/vol1/brick1/
Se comenta en la línea referente al disco en /etc/fstab:
nano /etc/fstab # […..] /dev/sdb1 /data/glusterfs/vol1/brick0 xfs defaults 0 0 #/dev/sdc1 /data/glusterfs/vol1/brick1 xfs defaults 0 0 gluster1:/vol1 /var/lib/datastores/gluster_mount glusterfs defaults,_netdev 0 0 […..]
Se comprueba con df –hT que el disco se encuentre realmente desmontado.
La salida del comando ll indica la relación de los discos del sistema operativo (sda, sdb, sdc, …) con las ranuras en el servidor (1,2,3, …). El número después de la palabra «ata/sas» es la ranura del servidor donde está instalado el disco (en este caso no se muestra, pues es un servidor virtualizado):
ll /dev/sdb brw-rw---- 1 root disk 8, 16 Nov 3 02:56 /dev/sdb
Si el servidor admite la tecnología «Hot Swap«, el disco afectado se puede quitar sin apagar el servidor. De lo contrario, el servidor debe apagarse para realizar el reemplazo. En el caso de este laboratorio virtual hay que apagar la VM, retirar el disco y poner uno nuevo.
Una vez cambiado el disco, se tendrá que hacer el proceso de darle formato y crearle su partición. Primeramente se busca que letra le asigno el OS, en este caso fue sdc nuevamente, y luego:
dev='/dev/sdc' && \ printf "o\nn\np\n1\n\n\nw\n" | fdisk "$dev" && \ mkfs.xfs -i size=512 "${dev}1"
Crear un nuevo punto de montaje para el disco. No se puede utilizar el punto de montaje utilizado por el disco roto.
Se crea el directorio en donde se va a montar el disco, se agrega el punto de montaje persistente y se aplica el montaje
mkdir -p /data/glusterfs/vol1/brick4 && \ echo "/dev/sdc1 /data/glusterfs/vol1/brick4 xfs defaults 0 0 " >> /etc/fstab && \ mount -a
Se comrpueba que se haya montado correctamente con df -hT | grep glusterfs.
Crear la carpeta data:
mkdir /data/glusterfs/vol1/brick4/data
Ahora resta hacer que glusterfs reemplace el disco, el comando general será:
#gluster volume replace-brick [volname] [node]:/broken/disk/mount/point/data [node]:/new/disk/mount/point/data commit force gluster volume replace-brick vol1 gluster1:/data/glusterfs/vol1/brick1/data gluster1:/data/glusterfs/vol1/brick4/data commit force volume replace-brick: success: replace-brick commit force operation successful
Se checkea que la operación haya sido exitosa:
gluster volume status [……] Brick gluster2:/data/glusterfs/vol1/brick0/ data 49152 0 Y 1133 Brick gluster1:/data/glusterfs/vol1/brick4/ data 49154 0 Y 4494 Brick gluster3:/data/glusterfs/vol1/brick0/ data 49154 0 Y 1736 [……]
Se borra el punto de montaje del disco reemplazado:
rm -rf /data/glusterfs/vol1/brick1
Se comprueba que el espacio ocupado del disco nuevo para ver si gluster replico los archivos:
df -hT | grep gluster /dev/sdd1 xfs 1017M 610M 408M 60% /data/glusterfs/vol1/brick2 /dev/sdb1 xfs 1017M 541M 477M 54% /data/glusterfs/vol1/brick0 gluster1:/vol1 fuse.glusterfs 4.0G 2.6G 1.5G 65% /var/lib/datastores/gluster_mount /dev/sdc1 xfs 1017M 528M 490M 52% /data/glusterfs/vol1/brick4
Como se puede apreciar el disco ya tiene el 52% del espacio ocupado, el mismo espacio que tenía anterior a su “rotura”!!!
3.3- Sustituyendo la información de un nodo roto a un nodo completamente nuevo
Todo el laboratorio se ha conformado de tal manera (distribuido replicado) en la que si se pierde un nodo perteneciente al pool de gluster los otros dos puedan continuar trabajando en perfecto estado. En esta sección se va a simular la pérdida total del nodo gluster3, se asumirá que tanto el nodo como todo son discos son inaccesibles.
Se puede comprobar el estado de un nodo perteneciente al pool corriendo desde gluster1:
gluster peer status Number of Peers: 2 Hostname: gluster2 Uuid: 231fadcc-23e9-4146-8dbf-4868e5474c00 State: Peer in Cluster (Connected) Hostname: gluster3 Uuid: 89a516af-1a12-4a5a-8378-2da4238f0b6d State: Peer in Cluster (Disconnected)
La nueva VM asumirá el rol de gluster4, con un nuevo IP (en este caso será 192.168.43.53). Contará con la misma cantidad de discos que el nodo roto (gluster3 contaba con 2 discos pertenecientes al clúster gluster). Para dejarla lista, antes de hacer nada relacionado con el gluster, se recomienda hacer un update y upgrade, e instalar la paquetería necesaria.
Configuración de /etc/hosts en gluster4 agregando las líneas:
echo "" >> /etc/hosts && \ echo "# Gluster1" >> /etc/hosts && \ echo "127.0.0.1 gluster4.sysadmin.cu gluster4" >> /etc/hosts && \ echo "192.168.43.50 gluster1.sysadmin.cu gluster1" >> /etc/hosts && \ echo "192.168.43.51 gluster2.sysadmin.cu gluster2" >> /etc/hosts && \ echo "gluster4" > /etc/hostname && \ echo "gluster4" > /proc/sys/kernel/hostname && \ bash
Añadir el repositorio:
# Para Ubuntu: add-apt-repository ppa:gluster/glusterfs-9 && \ apt update # Para Debian wget -O - https://download.gluster.org/pub/gluster/glusterfs/9/rsa.pub | apt-key add -
Instalar y comprobar la version:
apt install glusterfs-server -y && \ gluster --version glusterfs 9.4 Repository revision: git://git.gluster.org/glusterfs.git Copyright (c) 2006-2016 Red Hat, Inc. <https://www.gluster.org/> GlusterFS comes with ABSOLUTELY NO WARRANTY. [.....]
Una vez instalados deberemos de habilitar el servicio que se creó con la instalación (en ambos servidores), su nombre es glusterd, el siguiente comando además de habilitarlo lo inicia sin esperar al siguiente reinicio del sistema:
systemctl enable --now glusterd
Para el brick0 y brick1:
dev='/dev/sdb' && \ printf "o\nn\np\n1\n\n\nw\n" | fdisk "$dev" && \ mkfs.xfs -i size=512 "${dev}1" && \ dev='/dev/sdc' && \ printf "o\nn\np\n1\n\n\nw\n" | fdisk "$dev" && \ mkfs.xfs -i size=512 "${dev}1"
Ahora toca crear el directorio donde se va a montar el disco. Se recomienda la siguiente sintaxis:
# mkdir -p /data/glusterfs/[volname]/brick[id] mkdir -p /data/glusterfs/vol1/brick0 && \ mkdir -p /data/glusterfs/vol1/brick1
Agregar el punto de montaje de forma persistente:
# echo "/dev/sd[disk_label]1 /data/glusterfs/vol1/brick0 xfs defaults 0 0 " >> /etc/fstab echo "/dev/sdb1 /data/glusterfs/vol1/brick0 xfs defaults 0 0 " >> /etc/fstab && \ echo "/dev/sdc1 /data/glusterfs/vol1/brick1 xfs defaults 0 0 " >> /etc/fstab && \ mount -a
Verificar si se realizaron correctamente los puntos de montaje:
df -hT | grep glusterfs
Debe devolver lo siguiente:
/dev/sdb1 xfs 5.0G 68M 5.0G 2% /data/glusterfs/vol1/brick0 /dev/sdc1 xfs 5.0G 68M 5.0G 2% /data/glusterfs/vol1/brick1
Crear directorio data en el punto de montaje de cada brick en cada servidor gluster4:
# mkdir /data/glusterfs/volname/brick[id]/data mkdir -p /data/glusterfs/vol1/brick0/data && \ mkdir -p /data/glusterfs/vol1/brick1/data
Usando uno de los restantes servidores (gluster1 o gluster2), agregar al nuevo server al clustergluster:
gluster peer probe gluster4 peer probe: success
Comprobamos que se haya agregado al pool:
gluster peer status [.....] Hostname: gluster3 Uuid: 89a516af-1a12-4a5a-8378-2da4238f0b6d State: Peer in Cluster (Disconnected) Hostname: gluster4 Uuid: 0691bbf8-a4c5-4317-ba81-5c29f2985239 State: Peer in Cluster (Connected) [.....]
Ahora se necesita reemplazar los discos erróneos (los pertenecientes al nodo caído), para ello necesitamos saber cuáles son esos discos:
gluster volume info vol1 [……..] Bricks: Brick1: gluster1:/data/glusterfs/vol1/brick0/data Brick2: gluster2:/data/glusterfs/vol1/brick0/data Brick3: gluster1:/data/glusterfs/vol1/brick4/data Brick4: gluster3:/data/glusterfs/vol1/brick0/data Brick5: gluster2:/data/glusterfs/vol1/brick1/data Brick6: gluster3:/data/glusterfs/vol1/brick1/data Brick7: gluster1:/data/glusterfs/vol1/brick2/data [……..]
Como se puede apreciar, los discos pertenecientes a gluster3 son los Brick4 y Brick6. Esta información se puede contrastar usando gluster volumen status vol1.
Con el conocimiento de los discos rotos y sus puntos de montaje en el cluster, ya se puede proceder a reemplazarlos:
# gluster volume replace-brick [VOLNAME] [hostname_server_roto]:/punto/de/montaje/data [hostname_server_nuevo]: /punto/de/montaje/data commit force gluster volume replace-brick vol1 gluster3:/data/glusterfs/vol1/brick0/data gluster4:/data/glusterfs/vol1/brick0/data commit force volume replace-brick: success: replace-brick commit force operation successful gluster volume replace-brick vol1 gluster3:/data/glusterfs/vol1/brick1/data gluster4:/data/glusterfs/vol1/brick1/data commit force volume replace-brick: success: replace-brick commit force operation successful
Una vez agregados correctamente, se puede comprobar el estado del volumen:
gluster volume status vol1 […….] Brick gluster1:/data/glusterfs/vol1/brick4/ data 49153 0 Y 1453 Brick gluster4:/data/glusterfs/vol1/brick0/ data 49152 0 Y 1333 Brick gluster2:/data/glusterfs/vol1/brick1/ data 49153 0 Y 1168 Brick gluster4:/data/glusterfs/vol1/brick1/ data 49153 0 Y 1396 […….]
Como se puede apreciar, los discos pertenecientes al gluster4 tomaron la misma posición que tenían los discos de gluster3.
Si se lista el contenido de los discos, se puede ver que la replicación de los datos que existían anteriormente ya se están replicando:
ls -lah /data/glusterfs/vol1/brick1/data/ total 151M drwxrwxr-x 7 root root 4.0K Nov 3 17:02 . drwxr-xr-x 3 root root 18 Nov 3 16:46 .. drw------- 262 root root 8.0K Nov 3 17:03 .glusterfs drwxr-xr-x 2 root root 6 Nov 3 17:02 .glusterfs-anonymous-inode-583322ce-2c9d-4bf8-8a74-99f483d986bf drwxr-xr-x 2 root root 41 Nov 3 03:02 lock drwxr-xr-x 3 root root 4.0K Nov 2 18:13 .shard drwxr-xr-x 2 root root 6 Nov 3 02:03 share -rw-rw-r-- 2 user user 50M Nov 3 04:42 'The.Office.S07E01.Nepotism.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 2 user user 50M Nov 3 04:43 'The.Office.S07E03.Andys.Play.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 2 user user 50M Nov 3 04:45 'The.Office.S07E07.Christening.720p.BrRip.x264-[MULVAcoded].mkv' ls -lah /data/glusterfs/vol1/brick0/data/ total 151M drwxrwxr-x 7 root root 4.0K Nov 3 17:01 . drwxr-xr-x 3 root root 18 Nov 3 16:46 .. drw------- 262 root root 8.0K Nov 3 17:02 .glusterfs drwxr-xr-x 2 root root 6 Nov 3 17:01 .glusterfs-anonymous-inode-583322ce-2c9d-4bf8-8a74-99f483d986bf drwxr-xr-x 2 root root 6 Nov 3 03:02 lock drwxr-xr-x 3 root root 4.0K Nov 2 18:13 .shard drwxr-xr-x 2 root root 6 Nov 3 02:03 share -rw-rw-r-- 2 user user 50M Nov 3 04:42 'The.Office.S07E02.Counseling.720p.BrRip.x264-[MULVAcoded].mkv' -rw-rw-r-- 2 user user 50M Nov 3 04:46 'The.Office.S07E10.China.720p.BrRip.x264-[MULVAcoded].mkv' -rw-r--r-- 2 root root 50M Nov 2 18:06 'your home router SUCKS use pfSense instead.mp4'
Para forzar la replicación se puede hacer:
gluster volume heal vol1 full Launching heal operation to perform full self heal on volume vol1 has been successful Use heal info commands to check status.
Y se puede comprobar el estado de la misma:
gluster volume heal vol1 info [.......] Brick gluster4:/data/glusterfs/vol1/brick0/data Status: Connected Number of entries: 0 Brick gluster4:/data/glusterfs/vol1/brick1/data Status: Connected Number of entries: 0 [.......]
En el caso de este laboratorio se esta corriendo un volumen distribuido, por lo tanto hay que correr:
volume rebalance vol1 fix-layout start volume rebalance: vol1: success: Rebalance on vol1 has been started successfully. Use rebalance status command to check status of the rebalance process. ID: 2210b284-88f5-4f13-818f-db65a3f1724a gluster volume rebalance vol1 status Node status run time in h:m:s --------- ----------- ------------ gluster1.sysadmin.cu fix-layout completed 0:0:1 gluster2 fix-layout completed 0:0:0 localhost completed 0:0:1 volume rebalance: vol1: success
Una vez terminado el proceso, solo resta darle de baja al nodo roto del pool, desde gluster1 se corre:
gluster peer detach gluster3 All clients mounted through the peer which is getting detached need to be remounted using one of the other active peers in the trusted storage pool to ensure client gets notification on any changes done on the gluster configuration and if the same has been done do you want to proceed? (y/n) y peer detach: success
Y se comprueba que se haya eliminado:
gluster peer status Number of Peers: 2 Hostname: gluster2 Uuid: 231fadcc-23e9-4146-8dbf-4868e5474c00 State: Peer in Cluster (Connected) Hostname: gluster4 Uuid: 0691bbf8-a4c5-4317-ba81-5c29f2985239 State: Peer in Cluster (Connected)
Y de esta forma se concluyen los articulos de GlusterFS
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Autores:
- Frank Morales
- Franco Díaz
Mozilla/5.0 (Android 11; Mobile; rv:97.0) Gecko/97.0 Firefox/97.0
Muy buen tutorial. ¿Se pueden usar discos de diferentes tamaños?
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
Sip, pero si se pone en la configuración de Distribuido Replicado sólo verás el volumen con el tamaño del disco más pequeño.