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 -aSe puede comprbar que se haya montado correctamente con
df -hT | grep glusterfsSe 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/dataAhora 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: successPara 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/brick2Ya 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-5741f7058efcTener 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-02f9ddcc9645Se 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: successNOTA: 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/brick2En 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 1157Se 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/sdbSi 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 -aSe comrpueba que se haya montado correctamente con df -hT | grep glusterfs.
Crear la carpeta data:
mkdir /data/glusterfs/vol1/brick4/dataAhora 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 successfulSe 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/brick1Se 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/brick4Como 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 && \
bashAñ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 glusterdPara 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/brick1Agregar 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 -aVerificar si se realizaron correctamente los puntos de montaje:
df -hT | grep glusterfsDebe 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/brick1Crear 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/dataUsando uno de los restantes servidores (gluster1 o gluster2), agregar al nuevo server al clustergluster:
gluster peer probe gluster4
peer probe: successComprobamos 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 successfulUna 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: successUna 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: successY 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






No comments yet