Exploitation - Gestion des données

Cette page présente les opérations d’exploitation des composants de gestion des données : les bases de données PostgreSQL et le service Valkey. Leur paramétrage est décrit dans Configuration - Gestion des données.

Éléments à sauvegarder

Nous conseillons d’effectuer des sauvegardes à froid, avec au préalable arrêt des services utilisant les éléments à sauvegarder. Selon l’architecture déployée, ces bases sont portées par une ou plusieurs instances PostgreSQL (voir la variable DATABASE_MODE de l’image).

Base de données Stack concernée Contenu

adobis

Datachain Core

Configuration des pipelines, paramétrages, tâches exécutées et en cours

expose

Datachain Core

Données exposées à destination des consommateurs

dc_marketplace

Marketplace

Données de la Marketplace

dc_console

Console

Données de la Console (utilisateurs, groupes, rôles)

keycloak

SSO

Utilisateurs, groupes et sessions Keycloak

dc_maestro

Dc-Maestro

Données de Maestro (pipelines, planifications, droits)

airflow

Dc-Maestro

Métadonnées d’Airflow (DAG, exécutions)

dc_code

DC Code

Données de DC Code

Pour sauvegarder l’ensemble d’une instance PostgreSQL, sauvegarder chacune des bases qu’elle porte.

Sauvegarde et restauration d’une base de données

Les serveurs de bases de données Datachain Core sont des serveurs postgreSQL. Pour plus d’information sur les procédures de sauvegarde/restauration, merci de consulter la documentation en ligne : https://www.postgresql.org/docs/current/app-pgdump.html & https://www.postgresql.org/docs/current/app-pgrestore.html.

Dans le cas d’une base de données conteneurisées, nous proposons ci-dessous deux méthodes permettant d’effectuer les sauvegardes/ restaurations.

Pour les sauvegardes/restaurations, les commandes sont à effectuer sur les machines(worker docker) ou se trouvent effectivement les conteneurs.

Avec utilisation d’un volume de sauvegarde

Un volume de sauvegarde est monté sur le service postgresSQL (pg, pg_all, etc.) sous-jacent. Par exemple

  dc_pg:
    image: ${HARBOR_REGISTRY}/dc/pg:${PRODUCT_VERSION}
    # ...
    volumes:
        - /opt/adobis/data/datachain/pg:/var/lib/postgresql/data # Volume Standard
        - /opt/adobis/data/backup/datachain/pg:/pg_dump # Volume de sauvegarde
    # ...

Pour les commandes ci-dessous, le nom de la stack Datachain est dc, et la base de donnée à sauvegarder est adobis.

Sauvegarde

docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") pg_dump -U postgres --format=c --blobs --clean --create adobis -f /pg_dump/$(date +"%Y-%m-%d")_pg_dc_dump.dump

Cette commande génère dans le répertoire /pg_dump (et donc dans /opt/adobis/data/backup/datachain/pg sur le serveur) un fichier contenant la <DateDump au format AAAA-MM-JJ>_pg_dc_dump.dump.

Restauration

Le fichier de sauvegarde est le fichier 20240924_pg_dc_dump.dump. La commande de restauration sera la suivante :

echo "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'adobis';" | docker exec -i $(docker ps -qf "name=dc_pg\\.") /usr/bin/psql -U postgres && docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") pg_restore -U postgres -c -C -d postgres /pg_dump/20240924_pg_dc_dump.dump

Absence de volume de sauvegarde

Sauvegarde

Dans ce cas, le script va d’abord effectuer le dump postgres, puis procéder à sa copie vers le répertoire de stockage final.

docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") pg_dump -U postgres --format=c --blobs --clean --create adobis -f /tmp/pg_dc_dump.dump && docker cp $(docker ps -qf "name=dc_dc_pg\\."):/tmp/pg_dc_dump.dump /tmp/$(date +"%Y-%m-%d")_pg_dc_dump.dump && docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") rm /tmp/pg_dc_dump.dump

Cette commande génère dans le répertoire /tmp du serveur un fichier contenant la <DateDump au format AAAA-MM-JJ>_pg_dc_dump.dump.

Restauration

Le fichier de sauvegarde est le fichier 20240924_pg_dc_dump.dump. La commande de restauration sera la suivante :

docker cp 20240924_pg_dc_dump.dump $(docker ps -qf "name=dc_dc_pg\\."):/tmp/adobis.dump && echo "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'adobis';" | docker exec -i $(docker ps -qf "name=dc_pg\\.") /usr/bin/psql -U postgres && docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") pg_restore -U postgres -c -C -d postgres /tmp/adobis.dump && docker exec -t $(docker ps -qf "name=dc_dc_pg\\.") rm /tmp/adobis.dump

Supervision de PostgreSQL

La supervision se fait par l’intermédiaire de l’image postgres-exporter, via le déploiement d’un service supplémentaire dans le fichier de déploiement.

Fichier docker-compose.yml
version: "3.7"
services:

  # Déclaration des autres services
  # Other service declaration

  pg_exporter:
    image: quay.io/prometheuscommunity/postgres-exporter:${PG_PROMETHEUS_EXPORTER_VERSION}
    networks:
      # Disponible sur le réseau traefik, car disponible via le proxy traefik
      traefik_network:
      # Disponible sur le réseau dc_network, car interroge le module pg, dont un alias sur ce réseau est 'dc-pg'
      dc_network:
    deploy:
      mode: replicated
      replicas: 1
      labels:
        # Exposition via traefik
        - "traefik.enable=true"
        - "traefik.docker.network=traefik_network"
        # disponible sur l'URL ADMIN_URL à l'uri /pg-exporter (voir configuration ci-dessous)
        - "traefik.http.routers.pg_exporter.rule=Host(`${ADMIN_URL}`) && PathPrefix(`/pg-exporter`)"
        # URL traefik sécurisée
        - "traefik.http.routers.pg_exporter.tls=true"
        - "traefik.http.routers.pg_exporter.tls.certresolver=resolver1"
        - "traefik.http.routers.pg_exporter.entrypoints=websecure"
        - "traefik.http.routers.pg_exporter.service=pg_exporter"
        - "traefik.http.services.pg_exporter.loadbalancer.server.port=9187"
        - "traefik.http.routers.pg_exporter.middlewares=pg_exporter-auth@docker"
        # Protection de l'url par un mot de passe traefik généré avec la commande : echo $(htpasswd -nbB  adobis motdepasse) | sed -e s/\\$/\\$\\$/g
        - "traefik.http.middlewares.pg_exporter-auth.basicauth.users=adobis:$$2y$$05$$zMWiM6s1zgLJ8zBnTf3Dm.gxnEKhyt6.099nsOWkdyVon4tElSLIm"
        - "traefik.http.middlewares.pg_exporter-auth.basicauth.removeheader=true"
    environment:
      # récupération des informations auprès de la base dc-pg
      - DATA_SOURCE_URI=dc-pg:5432/postgres?sslmode=disable
      - DATA_SOURCE_USER=postgres
      # - DATA_SOURCE_PASS_FILE peut être utilisé avec docker secret
      - DATA_SOURCE_PASS=motdepasse
      # disponible sous /pg-exporter
      - PG_EXPORTER_WEB_TELEMETRY_PATH=/pg-exporter

Montée de version de PostgreSQL

Les changements de version majeure de PostgreSQL sont décrits dans les notes techniques de version (par exemple la migration vers la version 18 dans la version 9.1.0). La procédure consiste à arrêter les services utilisant la base, sauvegarder les données, démarrer la nouvelle version, puis restaurer les données. Monter le volume de données sur /var/lib/postgresql permet aussi d’utiliser pg_upgrade --link.

Valkey

Valkey assure les échanges de messages asynchrones entre les modules (cache et files d’attente). L’image n’a pas de configuration spécifique Adobis : se référer à la documentation de Valkey pour la persistance éventuelle des données.

  • Les logs sont écrits sur la sortie standard du conteneur.

  • Valkey est utilisé par Datachain Core et par Dc-Maestro (base numéro 1 pour Airflow, base 0 réservée aux notifications de Datachain).

Dernière mise à jour le 2 novembre 2026 à 15:16