Aumentando la capacidad de almacenamiento de nuestro Moodle
Durante este curso hemos estado utilizando Moodle 3.9 LTS. El único cambio que hemos aplicado desde que se hizo la actualización ha sido aumentar la memoria de la MV a 4GiB y todo ha funcionado de manera impecable.
Sin embargo un año lectivo tiene muchas entregas y el espacio consumido no ha dejado de aumentar a lo largo del curso.
Recordemos que la MV tenía un disco duro de 250GiB y antes de hacer la ampliación en la raíz del sistema, en vda2
, 32GiB disponibles. Hemos contado con suficiente espacio para acabar el curso pero ha sido necesario ampliar la capacidad del servidor para afrontar el próximo. Sobre todo porque Moodle 3.9 LTS aún sigue siendo la última versión estable LTS y por lo tanto el próximo curso utilizaremos el mismo software.
Evidentemente la mayor parte del consumo de disco corre a cargo de los ficheros que se suben a los cursos y que acaban en el directorio /var/www/moodledata
, en el momento de realizar esta actuación el directorio consume 186GiB.
El servidor dedicado en el que se ejecuta la MV Moodle cuenta con 4 discos duros:
- 2x HDD SATA 2TB HGST HUS724020AL.
- 2x SSD NVMe 450GB
El sistema operativo está instalado sobre un RAID1 que tiene dos particiones de 100GiB, sda3
y sdb3
, de los discos mecánicos. El resto del espacio, es decir los dos dispositivos nvme
y una partición de 1.7TiB de cada disco mecánico, está gestionado por OpenZFS formando el zpool FAST
con un espejo de los dos nvme
y el zpool SLOW
con un espejo de las dos particiones de 1.7TiB.
root@ns3084654:~# zpool list
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
FAST 416G 326G 89,5G - 68% 78% 1.00x ONLINE -
SLOW 1,70T 725G 1019G - 3% 41% 1.00x ONLINE -
root@ns3084654:~#
El dataset
FAST/libvirt
se encuentra montado en /var/lib/libvirt
y proporciona almacenamiento para las MVs. De este dataset
se toma un nuevo snapshot en cada backup. El pool
SLOW
únicamente se utilizaba para guardar réplicas de los snapshots y datos temporales.
Para ampliar la capacidad de almacenamiento de nuestros servidor moodle se ha creado un nuevo dataset
SLOW/images
en el que se ha definido un nuevo disco duro qcow2
de 750GiB. Este disco se ha agregado a la máquina virtual moodle
como vdb
y se ha particionado, formateado y montado con los datos existentes en /var/www/moodledata
.
Una vez completada la ampliación se puede comprobar que nuestra MV está preparada para el próximo curso :-)
vcarceler@moodle-2004:~$ df -h /dev/vda2 /dev/vdb1
Filesystem Size Used Avail Use% Mounted on
/dev/vda2 246G 20G 214G 9% /
/dev/vdb1 738G 187G 514G 27% /var/www/moodledata
vcarceler@moodle-2004:~$
Naturalmente los discos vda
y vdb
ofrecen un rendimiento muy diferente ya que el primero está en el zpool
formado por los discos nvme
y el segundo por los discos mecánicos.
Pero se pueden hacer algunas consideraciones:
- El rendimiento en las escrituras se necesita en el SGBD que se mantiene en
vda
. - El contenido de
/var/www/moodledata
son ficheros que se escriben una vez y se consultan ocasionalmente al acceder a un curso o a las entregas de los alumnos. No necesita un gran rendimiento de disco. - La cache
ARC
de OpenZFS puede mejorar con facilidad el rendimiento de los accesos a los contenidos.
Al ejecutar en la MV moodle
nuestro test fio
favorito de escrituras aleatorias encontramos:
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=64k --size=256m --numjobs=16 --iodepth=16 --runtime=60 --time_based --fsync=1 --end_fsync=1 --group_reporting
Disco | ZPOOL | Opciones de zfs | IOPS | BW |
vda |
FAST |
recordsize=64K , compression=lz4 , sync=standard |
5328 | 333 MiB/s |
vdb |
SLOW |
recordsize=64K , compression=lz4 , sync=standard |
317 | 19.8 MiB/s |
vdb |
SLOW |
recordsize=64K , compression=lz4 , sync=disabled |
1995 | 125 MiB/s |
Debo recordar que el anterior comando fio
incluye el parámetro --fsync=1
para llamar a fsync
después de cada bloque. Esta carga de trabajo tiene por propósito modelar el peor caso posible para valorar el rendimiento del dispositivo pero no se parece a ninguna carga real que obtendrá siempre un mejor rendimiento.
Finalmente se ha modificado el script que hace las copias de seguridad para hacer snapshots de SLOW/images
y replicar su contenido a otra ubicación.
Al consultar una traza de su ejecución se puede ver:
root@ns3084654:/opt/images# cat /var/log/syslog | grep backup
Jun 2 05:00:02 ns3084654 CRON[5572]: (root) CMD (/root/bin/backup)
Jun 2 05:00:02 ns3084654 backup: Start backup
Jun 2 05:00:02 ns3084654 backup: DOMAINS=plone5#012blog-2004#012wireguard#012moodle-2004
Jun 2 05:00:02 ns3084654 backup: BASE_SNAPSHOT=FAST/libvirt@2021-05-26_05:00:01
Jun 2 05:00:02 ns3084654 backup: SRC_DATASET=FAST/libvirt
Jun 2 05:00:02 ns3084654 backup: DST_DATASET=SLOW/backup-libvirt
Jun 2 05:00:02 ns3084654 backup: DATE_TIME=2021-06-02_05:00:02
Jun 2 05:00:02 ns3084654 backup: NEW_SNAPSHOT=FAST/libvirt@2021-06-02_05:00:02
Jun 2 05:00:02 ns3084654 backup: MAX_SNAPSHOTS=5
Jun 2 05:00:02 ns3084654 backup: NEW_SNAPSHOT_DIR=/var/lib/libvirt/.zfs/snapshot/2021-06-02_05:00:02
Jun 2 05:00:02 ns3084654 backup: BASE_SNAPSHOT_FILE_SLOW=/root/bin/base_snapshot_slow
Jun 2 05:00:02 ns3084654 backup: BASE_SNAPSHOT_SLOW=SLOW/images@2021-05-28_11:56:20
Jun 2 05:00:02 ns3084654 backup: SRC_DATASET_SLOW=SLOW/images
Jun 2 05:00:02 ns3084654 backup: NEW_SNAPSHOT_SLOW=SLOW/images@2021-06-02_05:00:02
Jun 2 05:00:02 ns3084654 backup: NEW_SNAPSHOT_DIR_SLOW=/opt/images/.zfs/snapshot/2021-06-02_05:00:02
Jun 2 05:00:02 ns3084654 backup: Copy .xml domain files to /var/lib/libvirt/backup-domains
Jun 2 05:00:02 ns3084654 backup: Ok
Jun 2 05:00:02 ns3084654 backup: Saving VMs:
Jun 2 05:00:02 ns3084654 backup: Saving: plone5
Jun 2 05:00:07 ns3084654 backup: Saving: blog-2004
Jun 2 05:00:09 ns3084654 backup: Saving: wireguard
Jun 2 05:00:10 ns3084654 backup: Saving: moodle-2004
Jun 2 05:00:14 ns3084654 backup: All VMs saved.
Jun 2 05:00:14 ns3084654 backup: Creating snapshot FAST/libvirt@2021-06-02_05:00:02
Jun 2 05:00:14 ns3084654 backup: Created new snapshot: FAST/libvirt@2021-06-02_05:00:02
Jun 2 05:00:14 ns3084654 backup: Creating snapshot SLOW/images@2021-06-02_05:00:02
Jun 2 05:00:15 ns3084654 backup: Created new snapshot: SLOW/images@2021-06-02_05:00:02
Jun 2 05:00:15 ns3084654 backup: Restoring VMs:
Jun 2 05:00:15 ns3084654 backup: Restoring: plone5
Jun 2 05:00:18 ns3084654 backup: Restoring: blog-2004
Jun 2 05:00:20 ns3084654 backup: Restoring: wireguard
Jun 2 05:00:23 ns3084654 backup: Restoring: moodle-2004
Jun 2 05:00:28 ns3084654 backup: All VMs restored.
Jun 2 05:00:28 ns3084654 backup: Start zfs send to /opt/backup-libvirt
Jun 2 05:00:28 ns3084654 backup: BASE_SNAPSHOT=FAST/libvirt@2021-05-26_05:00:01 NEW_SNAPSHOT=FAST/libvirt@2021-06-02_05:00:02
Jun 2 05:02:54 ns3084654 backup: zfs send completed
Jun 2 05:02:55 ns3084654 backup: Deleted snapshot: FAST/libvirt@2021-04-28_05:00:01
Jun 2 05:02:55 ns3084654 backup: Starts backup off-site with rclone
Jun 2 05:02:55 ns3084654 backup: Starts rclone blog-2004.xml
Jun 2 05:03:01 ns3084654 backup: blog-2004.xml rcloned
Jun 2 05:03:01 ns3084654 backup: Starts rclone blog.xml
Jun 2 05:03:04 ns3084654 backup: blog.xml rcloned
Jun 2 05:03:04 ns3084654 backup: Starts rclone moodle-1804.xml
Jun 2 05:03:06 ns3084654 backup: moodle-1804.xml rcloned
Jun 2 05:03:06 ns3084654 backup: Starts rclone moodle-2004.xml
Jun 2 05:03:09 ns3084654 backup: moodle-2004.xml rcloned
Jun 2 05:03:09 ns3084654 backup: Starts rclone plone5.xml
Jun 2 05:03:12 ns3084654 backup: plone5.xml rcloned
Jun 2 05:03:12 ns3084654 backup: Starts rclone wireguard.xml
Jun 2 05:03:15 ns3084654 backup: wireguard.xml rcloned
Jun 2 05:03:15 ns3084654 backup: Starts rclone blog-2004.save.zst
Jun 2 05:04:03 ns3084654 backup: blog-2004.save.zst rcloned
Jun 2 05:04:03 ns3084654 backup: Starts rclone moodle-2004.save.zst
Jun 2 05:06:25 ns3084654 backup: moodle-2004.save.zst rcloned
Jun 2 05:06:25 ns3084654 backup: Starts rclone plone5.save.zst
Jun 2 05:10:41 ns3084654 backup: plone5.save.zst rcloned
Jun 2 05:10:41 ns3084654 backup: Starts rclone wireguard.save.zst
Jun 2 05:11:20 ns3084654 backup: wireguard.save.zst rcloned
Jun 2 05:11:20 ns3084654 backup: Starts rclone tar /var/lib/libvirt/.zfs/snapshot/2021-06-02_05:00:02/images /opt/images/.zfs/snapshot/2021-06-02_05:00:02
Jun 2 09:09:15 ns3084654 backup: tar /var/lib/libvirt/.zfs/snapshot/2021-06-02_05:00:02/images /opt/images/.zfs/snapshot/2021-06-02_05:00:02 rcloned
Jun 2 09:09:15 ns3084654 backup: Backup off-site ended
Jun 2 09:09:15 ns3084654 backup: End backup
root@ns3084654:/opt/images#