AccueilTechniqueRoutines → nfs-sync

    nfs-sync

    Table des matières
    1. Problématique
    2. Solution adoptée

    Le script nfs-sync est un petit utilitaire développé pour nos besoins internes.

    Problématique🔗

    La plupart des volumes de nos serveurs ne sont pas connectés à NFS et existent uniquement en local sur le serveur. Plusieurs raisons sont possibles :

    • il peut exister une incompatibilité entre la gestion des droits avec NFS (en particulier avec le paramètre root_squash) et la façon dont le service gère ses fichiers et ses droits d’accès. Par exemple, le service mail dispose de nombreux logiciels en interne, qui utilisent tous des comptes UNIX différents dans le conteneur. Il en découle des droits d’accès variables selon le compte ;
    • utiliser NFS pour ledit service ralentit fortement son fonctionnement, au point de dégrader la qualité de service ;
    • le volume de données est si petit qu’il n’en vaut pas la peine d’utiliser la machine de stockage dédiée à cet usage ;
    • le volume de données ne contient aucune donnée utile et peut être supprimé à tout moment (c’est le cas des caches).

    Or, dans l’organisation de notre infrastructure, nous souhaitons cette configuration :

    • Centraliser toutes les données de nos services sur une machine dédiée au stockage, en envisageant à terme d’instaurer un système de réplication de données entre plusieurs serveurs de stockage, mais en gardant la perspective de séparer les opérations de stockage et de calcul sur nos serveurs ;
    • Ne sauvegarder que les données présentes sur les serveurs de stockage vers le serveur de sauvegarde, dans un souci de simplicité.

    En raison des limitations de NFS ou de considérations de performance, les données se retrouvent ainsi éparpillées sur plusieurs serveurs, contrairement à l’objectif défini, ce qui ne facilite pas les opérations de sauvegarde.

    Solution adoptée🔗

    Pour faire face à ce problème, nous avons développé le script nfs-sync dont le rôle est de copier les volumes locaux de nos serveurs (ceux qui ne sont pas sur NFS) vers les machines de stockage, en copiant chaque volume local vers un volume NFS.

    Ce script est exécuté dans un conteneur Docker qui dispose d’un accès en lecture au dossier /var/lib/docker/volumes/ de l’hôte. Le volume NFS est monté dans le dossier /sync/ sur le conteneur. Voir son dossier correspondant dans le dépôt Core.

    Voilà à quoi ressemble ce script dans son ensemble :

    #!/bin/bash
    
    # nfs-sync
    
    echo "Start syncing volumes at `date`."
    
    # List volumes to copy
    LOCAL_VOLUMES=(
        "local-volume-1"
        "local-volume-2"
    )
    
    for volume in ${LOCAL_VOLUMES[@]}; do
        mkdir -p /sync/$volume
        echo "Copying $volume"
        rsync -rav --delete --no-o --no-g /volumes/$volume/ /sync/$volume/
        echo "Copied $volume."
    done
    
    

    Ce script reste toutefois une solution transitoire : cette problématique pourra être traitée en amont dans les futures formes que prendront notre infrastructure.