Supongamos que tenemos 2 aplicaciones aplicacion1 y aplicacion2 que tienen acceso a directorios homónimos dentro de un volumen gluster replicado llamado contenedor. A continuación vemos el volumen en cuestión:
[root@gluster-server-2 ~]# gluster vol info
Volume Name: contenedor
Type: Replicate
Volume ID: 3933514f-f5a4-4260-9d40-964c6cc44b59
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 172.16.47.15:/mnt/1
Brick2: 172.16.47.16:/mnt/1
[root@gluster-server-2 ~]#
El primer paso para utilizar quotas es habilitarlas en el volumen:
[root@gluster-server-2 ~]# gluster vol quota contenedor enable
Enabling quota has been successful
[root@gluster-server-2 ~]#
Verificamos que la operación se haya concretado correctamente:
[root@gluster-server-2 ~]# gluster vol info
Volume Name: contenedor
Type: Replicate
Volume ID: 3933514f-f5a4-4260-9d40-964c6cc44b59
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 172.16.47.15:/mnt/1
Brick2: 172.16.47.16:/mnt/1
Options Reconfigured:
features.quota: on
[root@gluster-server-2 ~]#
Ahora que las quotas están habilitadas podemos configurarlas. En este caso cofiguramos una quota de 1GB para el directorio aplicacion1 y 512MB para el directorio aplicacion2:
[root@gluster-server-2 ~]# gluster vol quota contenedor limit-usage /aplicacion1 1024MB
limit set on /aplicacion1
[root@gluster-server-2 ~]# gluster vol quota contenedor limit-usage /aplicacion2 512MB
limit set on /aplicacion2
[root@gluster-server-2 ~]#
Corroboramos que se hayan aplicado las quotas:
[root@gluster-server-2 ~]# gluster vol info
Volume Name: contenedor
Type: Replicate
Volume ID: 3933514f-f5a4-4260-9d40-964c6cc44b59
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: 172.16.47.15:/mnt/1
Brick2: 172.16.47.16:/mnt/1
Options Reconfigured:
features.limit-usage: /aplicacion1:1024MB,/aplicacion2:512MB
features.quota: on
[root@gluster-server-2 ~]#
Ahora probamos las cuotas escribiendo en los directorios desde el cliente que monta el volumen. El volumen lo montamos en /mnt:
[root@gluster-client ~]# mount
/dev/vda1 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
172.16.47.15:/contenedor on /mnt type fuse.glusterfs (rw,default_permissions,allow_other,max_read=131072)
[root@gluster-client ~]# ls /mnt/
aplicacion1 aplicacion2
[root@gluster-client ~]#
Primero escribimos en ambos directorios hasta poco antes del límite:
[root@gluster-client ~]# dd if=/dev/zero of=/mnt/aplicacion1/archivo_grande bs=1M count=1020
1020+0 records in
1020+0 records out
1069547520 bytes (1.1 GB) copied, 32.5717 s, 32.8 MB/s
[root@gluster-client ~]# dd if=/dev/zero of=/mnt/aplicacion2/archivo_grande bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 14.0041 s, 37.4 MB/s
[root@gluster-client ~]#
Vemos cuánto escribimos en cada directorio:
[root@gluster-client ~]# du -sch /mnt/*
1020M /mnt/aplicacion1
500M /mnt/aplicacion2
1.5G total
[root@gluster-client ~]#
De momento nos mantuvimos por debajo de los límites definidos en las cuotas, por eso no tuvimos problema alguno. Podemos verificar el estado de las cuotas fijadas de la siguiente manera:
[root@gluster-server-2 ~]# gluster vol quota contenedor list
path limit_set size
----------------------------------------------------------------------------------
/aplicacion1 1024MB 1020.0MB
/aplicacion2 512MB 500.0MB
[root@gluster-server-2 ~]#
Ahora ponemos a prueba el control escribiendo mas allá de lo permitido con un nuevo archivo:
[root@gluster-client ~]# dd if=/dev/zero of=/mnt/aplicacion1/archivo_chico bs=1M count=100
dd: escribiendo «/mnt/aplicacion1/archivo_chico»: Se ha excedido la cuota de disco
6+0 records in
5+0 records out
5898240 bytes (5.9 MB) copied, 0.141132 s, 41.8 MB/s
[root@gluster-client ~]# dd if=/dev/zero of=/mnt/aplicacion2/archivo_chico bs=1M count=100
dd: escribiendo «/mnt/aplicacion2/archivo_chico»: Se ha excedido la cuota de disco
dd: cerrando el fichero de salida «/mnt/aplicacion2/archivo_chico»: Se ha excedido la cuota de disco
[root@gluster-client ~]#
JA! No pudimos escribir demasiado, alcanzamos los límites fijados por las cuotas:
[root@gluster-client ~]# du -sch /mnt/*
1.1G /mnt/aplicacion1
513M /mnt/aplicacion2
1.6G total
[root@gluster-client ~]#
también lo podemos ver desde gluster:
[root@gluster-server-2 ~]# gluster vol quota contenedor list
path limit_set size
----------------------------------------------------------------------------------
/aplicacion1 1024MB 1.0GB
/aplicacion2 512MB 512.5MB
[root@gluster-server-2 ~]#
Una vez alcanzada la cuota ni siquiera se nos permite crear nuevos archivos o directorios:
[root@gluster-client ~]# touch /mnt/aplicacion1/a
touch: no se puede efectuar `touch' sobre «/mnt/aplicacion1/a»: Se ha excedido la cuota de disco
[root@gluster-client ~]# touch /mnt/aplicacion2/a
touch: no se puede efectuar `touch' sobre «/mnt/aplicacion2/a»: Se ha excedido la cuota de disco
[root@gluster-client ~]# mkdir /mnt/aplicacion1/b
mkdir: no se puede crear el directorio «/mnt/aplicacion1/b»: Se ha excedido la cuota de disco
[root@gluster-client ~]# mkdir /mnt/aplicacion2/b
mkdir: no se puede crear el directorio «/mnt/aplicacion2/b»: Se ha excedido la cuota de disco
[root@gluster-client ~]#
Las cuotas pueden ser aplicadas a sub directorios también, y un punto a considerar es que se trata de cuotas duras, es decir que NO se pueden sobrepasar.