Ajouter un disque à une instance
| Disque | <rôle> | Type de volume | Monté sur | Usage |
|---|---|---|---|---|
| Données | data | high-speed-gen2 | /mnt/data | MariaDB et /home, sur un disque rapide |
| Sauvegarde | backup | classic | /mnt/backup | copie quotidienne de chaque site, quota par compte |
Les deux disques sont en XFS :
- quotas intégrés au système de fichiers : par utilisateur et par groupe sur /mnt/data (
uquota,gquota), par dossier sur /mnt/backup (quotas de projet,prjquota), sans fichier de quota à maintenir ; - agrandissement à chaud : après l'agrandissement du volume chez OVH,
xfs_growfsétend le système de fichiers sans le démonter ; - performances sur les gros fichiers et les écritures parallèles, celles d'une base de données comme celles d'une sauvegarde.
En contrepartie, un système de fichiers XFS ne peut pas être réduit : prévoir une taille de départ modeste, puis agrandir.
1. Terraform
Section intitulée « 1. Terraform »Après l'instance, dans resource-openstack-compute-xxx.tf :
resource "openstack_blockstorage_volume_v3" "xxx_<rôle>" { provider = openstack.ovh region = openstack_compute_instance_v2.xxx.region name = "xxx_<rôle>" size = <taille en Go> volume_type = "<type de volume>" enable_online_resize = true lifecycle { prevent_destroy = true }}
resource "openstack_compute_volume_attach_v2" "xxx_<rôle>_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_<rôle>.id}Le plan doit annoncer 2 créations.
2. Formater (efface le disque)
Section intitulée « 2. Formater (efface le disque) »L'identifiant du volume est donné par Terraform, depuis le dossier du projet :
terraform state show openstack_blockstorage_volume_v3.xxx_<rôle> | grep -E '^ +id 'Il est aussi visible dans l'espace client OVH, Public Cloud > Block Storage.
Sur l'instance, le disque apparaît sous /dev/disk/by-id/ avec le nom scsi-0QEMU_QEMU_HARDDISK_<identifiant>.
ID=<identifiant du volume>DISK=$(ls /dev/disk/by-id/*"$ID") # le disque seul, sans ses partitionsecho "$DISK"wipefs -n "$DISK" # doit être videparted -s "$DISK" mklabel gpt mkpart <rôle> xfs 0% 100%udevadm settlemkfs.xfs -L <rôle> "${DISK}-part1"3. Disque de données
Section intitulée « 3. Disque de données »Dans data/nodes/xxx.yaml :
min::data_disk: truemin::mariadb::on_data_disk: truemin::home::on_data_disk: trueAu passage suivant, Puppet monte /mnt/data, déclare les binds de /var/lib/mysql et /home sans les monter et dépose les scripts de migration. MariaDB continue de tourner sur le disque interne.
Tant que la migration n'est pas faite, MariaDB ne redémarre plus : en cas de reboot, la base reste arrêtée.
Déplacer MariaDB
Section intitulée « Déplacer MariaDB »Les sites sont coupés pendant la copie.
mariadb-move-to-data-diskLe script suspend Puppet, copie la base, monte le bind, relance MariaDB puis réactive Puppet. En cas d'échec, Puppet reste désactivé : vérifier l'état, puis puppet agent --enable.
Déplacer /home
Section intitulée « Déplacer /home »Les services utilisant /home (nginx, PHP, FTP, mail, cron) sont coupés pendant la copie.
min-move-home-to-data-diskMême fonctionnement que pour MariaDB. Si /home est encore utilisé, le script ne déplace rien, relance les services et réactive Puppet.
Sur une instance Virtualmin, régler ensuite les quotas sur /home dans Virtualmin, puis :
virtualmin modify-domain --all-domains --apply-quotasVérifier
Section intitulée « Vérifier »findmnt /var/lib/mysqlfindmnt /homemysql -e 'SHOW DATABASES'Ensuite, supprimer /var/lib/mysql.old-<date> et /home.old-<date>.
4. Disque de sauvegarde
Section intitulée « 4. Disque de sauvegarde »Sans ce disque, aucune sauvegarde de site n'est activée.
Seulement une fois le disque formaté, dans data/nodes/xxx.yaml :
min::backup_disk: trueAu passage suivant, Puppet :
- monte le disque sur /mnt/backup avec les quotas de projet (
prjquota) ; - crée /mnt/backup/wcf/<compte> pour chaque site et le monte sur /home/wcf/<compte>/backup ;
- limite la place de chaque compte ;
- programme la sauvegarde de chaque site vers 3 h : une archive /home/wcf/<compte>/backup/<AAAA-MM-JJ>/<compte>-<AAAA-MM-JJ>.tar.zst avec
data/,app/,public_html/et la base dansdb.sql.
L'option prjquota n'est prise en compte qu'au montage. Si le disque a été monté sans elle, le démonter puis relancer Puppet.
Réglages
Section intitulée « Réglages »| Réglage | Par défaut | Où |
|---|---|---|
| Jours gardés | 1 (la veille est supprimée une fois la sauvegarde du jour réussie) | backup_keep du site |
| Place par compte | 10G | min::wcf::backup_quota, ou backup_quota de l'offre dans min::wcf::dolibarrs::offers (Biz : 80G) |
| Sauvegarde d'un site | activée | backup: false sur le site pour la couper |
Vérifier
Section intitulée « Vérifier »findmnt /mnt/backupxfs_quota -x -c 'report -p -h' /mnt/backupls /home/wcf/*/backup/Une sauvegarde qui échoue pendant 36 h déclenche l'alerte MinBackupStale : disque absent, quota du compte atteint ou erreur du script.
