Añadir un disco a una instancia
| Disco | <rol> | Tipo de volumen | Montado en | Uso |
|---|---|---|---|---|
| Datos | data | high-speed-gen2 | /mnt/data | MariaDB y /home, en un disco rápido |
| Copias | backup | classic | /mnt/backup | copia diaria de cada sitio, cuota por cuenta |
Los dos discos usan XFS:
- cuotas integradas en el sistema de archivos: por usuario y por grupo en /mnt/data (
uquota,gquota), por carpeta en /mnt/backup (cuotas de proyecto,prjquota), sin archivo de cuotas que mantener; - ampliación en caliente: tras ampliar el volumen en OVH,
xfs_growfsextiende el sistema de archivos sin desmontarlo; - rendimiento con archivos grandes y escrituras en paralelo, tanto las de una base de datos como las de una copia de seguridad.
Como contrapartida, un sistema de archivos XFS no se puede reducir: conviene empezar con un tamaño modesto y ampliar después.
1. Terraform
Sección titulada «1. Terraform»Después de la instancia, en resource-openstack-compute-xxx.tf:
resource "openstack_blockstorage_volume_v3" "xxx_<rol>" { provider = openstack.ovh region = openstack_compute_instance_v2.xxx.region name = "xxx_<rol>" size = <tamaño en GB> volume_type = "<tipo de volumen>" enable_online_resize = true lifecycle { prevent_destroy = true }}
resource "openstack_compute_volume_attach_v2" "xxx_<rol>_attach" { provider = openstack.ovh region = openstack_compute_instance_v2.xxx.region instance_id = openstack_compute_instance_v2.xxx.id volume_id = openstack_blockstorage_volume_v3.xxx_<rol>.id}El plan debe anunciar 2 creaciones.
2. Formatear (borra el disco)
Sección titulada «2. Formatear (borra el disco)»Terraform da el identificador del volumen, desde la carpeta del proyecto:
terraform state show openstack_blockstorage_volume_v3.xxx_<rol> | grep -E '^ +id 'También aparece en el área de cliente de OVH, Public Cloud > Block Storage.
En la instancia, el disco aparece en /dev/disk/by-id/ con el nombre scsi-0QEMU_QEMU_HARDDISK_<identificador>.
ID=<identificador del volumen>DISK=$(ls /dev/disk/by-id/*"$ID") # el disco solo, sin sus particionesecho "$DISK"wipefs -n "$DISK" # debe estar vacíoparted -s "$DISK" mklabel gpt mkpart <rol> xfs 0% 100%udevadm settlemkfs.xfs -L <rol> "${DISK}-part1"3. Disco de datos
Sección titulada «3. Disco de datos»En data/nodes/xxx.yaml:
min::data_disk: truemin::mariadb::on_data_disk: truemin::home::on_data_disk: trueEn la siguiente ejecución, Puppet monta /mnt/data, declara los binds de /var/lib/mysql y /home sin montarlos y deja los scripts de migración. MariaDB sigue funcionando en el disco interno.
Mientras la migración no esté hecha, MariaDB ya no se reinicia: tras un reinicio del servidor, la base queda parada.
Mover MariaDB
Sección titulada «Mover MariaDB»Los sitios quedan cortados durante la copia.
mariadb-move-to-data-diskEl script suspende Puppet, copia la base, monta el bind, reinicia MariaDB y vuelve a activar Puppet. Si falla, Puppet queda desactivado: comprobar el estado y después puppet agent --enable.
Mover /home
Sección titulada «Mover /home»Los servicios que usan /home (nginx, PHP, FTP, correo, cron) quedan cortados durante la copia.
min-move-home-to-data-diskFunciona igual que para MariaDB. Si /home sigue en uso, el script no mueve nada, reinicia los servicios y vuelve a activar Puppet.
En una instancia Virtualmin, ajustar después las cuotas de /home en Virtualmin y luego:
virtualmin modify-domain --all-domains --apply-quotasComprobar
Sección titulada «Comprobar»findmnt /var/lib/mysqlfindmnt /homemysql -e 'SHOW DATABASES'Después, borrar /var/lib/mysql.old-<fecha> y /home.old-<fecha>.
4. Disco de copias de seguridad
Sección titulada «4. Disco de copias de seguridad»Sin este disco, no se activa ninguna copia de seguridad de sitio.
Solo cuando el disco esté formateado, en data/nodes/xxx.yaml:
min::backup_disk: trueEn la siguiente ejecución, Puppet:
- monta el disco en /mnt/backup con las cuotas de proyecto (
prjquota); - crea /mnt/backup/wcf/<cuenta> para cada sitio y lo monta en /home/wcf/<cuenta>/backup;
- limita el espacio de cada cuenta;
- programa la copia de cada sitio hacia las 3 h: un archivo /home/wcf/<cuenta>/backup/<AAAA-MM-DD>/<cuenta>-<AAAA-MM-DD>.tar.zst con
data/,app/,public_html/y la base endb.sql.
La opción prjquota solo se tiene en cuenta al montar. Si el disco se montó sin ella, desmontarlo y volver a ejecutar Puppet.
Ajustes
Sección titulada «Ajustes»| Ajuste | Por defecto | Dónde |
|---|---|---|
| Días conservados | 1 (la del día anterior se borra cuando la copia del día ha terminado bien) | backup_keep del sitio |
| Espacio por cuenta | 10G | min::wcf::backup_quota, o backup_quota de la oferta en min::wcf::dolibarrs::offers (Biz: 80G) |
| Copia de un sitio | activada | backup: false en el sitio para desactivarla |
Comprobar
Sección titulada «Comprobar»findmnt /mnt/backupxfs_quota -x -c 'report -p -h' /mnt/backupls /home/wcf/*/backup/Una copia que falla durante 36 h dispara la alerta MinBackupStale: disco ausente, cuota de la cuenta alcanzada o error del script.
