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.
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