Maintenance
Ce guide couvre les opérations de maintenance courantes pour IceGate.
Migration de Schéma
Configuration Initiale
Créer toutes les tables Iceberg pour la première fois :
maintain migrate create -c maintain.yaml
Mises à Niveau de Schéma
Mettre à niveau les schémas de tables existants lors de la mise à jour d'IceGate :
maintain migrate upgrade -c maintain.yaml
Exécution à Blanc
Prévisualiser ce qui serait fait sans exécuter :
maintain migrate create -c maintain.yaml --dry-run
maintain migrate upgrade -c maintain.yaml --dry-run
Processus de Migration
- Connexion au catalogue Iceberg
- Vérification des schémas de tables existants
- Création des tables manquantes (ou modification des tables existantes)
- Rapport sur l'état de la migration
Compaction des Données (Shift)
Le service Ingest transfère automatiquement les données WAL vers des tables Iceberg optimisées via le processus shift intégré.
Fonctionnement du Shift
- Le job manager surveille les segments WAL
- Regroupe les segments en tâches shift
- Lit les fichiers WAL Parquet en parallèle
- Fusionne et re-partitionne les données
- Écrit les fichiers de données Iceberg optimisés
- Valide un nouveau snapshot dans le catalogue, en enregistrant le dernier offset WAL validé dans le résumé du snapshot
Le shift ne supprime pas les segments WAL. Une règle de cycle de vie objet sur le bucket de la queue les récupère, et c'est l'offset du résumé du snapshot qui permet au shift de reprendre là où il s'était arrêté.
Optimisation des Performances du Shift
Paramètres de configuration clés dans la configuration du service Ingest :
shift:
read:
max_record_batches_per_task: 1024
max_input_bytes_per_task: 67108864 # 64 MiB
plan_segment_read_parallelism: 8
shift_segment_read_parallelism: 8
write:
row_group_size: 8192
max_file_size_mb: 64
table_cache_ttl_secs: 60
jobsmanager:
worker_count: 4 # Half of available CPUs by default
poll_interval_ms: 1000
iteration_interval_millisecs: 30000
Voir Configuration pour la référence complète des paramètres.
Optimisation des Tables
Optimiser la Taille des Fichiers
Réécrire les petits fichiers en fichiers plus grands et optimisés :
ALTER TABLE icegate.logs EXECUTE optimize;
Expirer les Snapshots
Supprimer les anciens snapshots pour récupérer de l'espace de stockage :
ALTER TABLE icegate.logs
EXECUTE expire_snapshots(retention_threshold => '7d');
Supprimer les Fichiers Orphelins
Supprimer les fichiers de données non référencés :
ALTER TABLE icegate.logs
EXECUTE remove_orphan_files(retention_threshold => '1d');
Rétention des Données
Suppression Manuelle
Supprimer les données antérieures à une date spécifique :
DELETE FROM icegate.logs
WHERE timestamp < TIMESTAMP '2024-01-01 00:00:00 UTC';
Monitoring
Métriques Clés
Surveillez ces métriques pour la santé de la maintenance (disponibles sur http://ingest:9091/metrics) :
| Métrique | Description | Seuil d'Alerte |
|---|---|---|
| Nombre de fichiers WAL | Nombre de fichiers WAL non traités | > 1000 |
| Taille totale WAL | Taille totale du WAL en octets | > 10 Go |
| Durée du shift | Temps pour compléter une tâche shift | > 300s |
| Nombre de snapshots | Snapshots Iceberg actifs | > 100 |
Vérifications de Santé
# Vérifier la disponibilité du service query
curl http://localhost:3100/ready
# Vérifier la santé du service ingest
curl http://localhost:4318/health
Sauvegarde et Récupération
Sauvegarde du Catalogue
Avec le catalogue S3 par défaut, les métadonnées sont root.json et les fichiers de métadonnées de table dans le bucket warehouse : une sauvegarde est donc une copie de ce préfixe, sans service à arrêter :
aws s3 sync s3://warehouse/catalog/ ./catalog-backup/
sync n'est pas un instantané atomique : il liste puis copie, et des commits survenant entre-temps peuvent produire une copie mélangeant plusieurs générations du catalogue. Pour une copie à un instant donné, utilisez le versioning du bucket (ci-dessous) en lisant une seule version, ou effectuez la copie pendant que les écritures sont suspendues. Vérifiez toute sauvegarde en la restaurant sur un préfixe de test et en listant les tables avant de vous y fier.
Si vous utilisez le backend de catalogue REST, sauvegardez les données RocksDB de Nessie :
# Arrêter Nessie
docker stop nessie
# Sauvegarder le répertoire de données
tar -czf nessie-backup.tar.gz /data/nessie
# Redémarrer Nessie
docker start nessie
Récupération des Données
Iceberg supporte les requêtes de voyage dans le temps. Pour récupérer après une suppression accidentelle :
-- List available snapshots
SELECT * FROM icegate.logs$snapshots;
-- Query data at a specific snapshot
SELECT * FROM icegate.logs FOR VERSION AS OF 123456789;
-- Roll back to a previous snapshot
CALL icegate.system.rollback_to_snapshot('logs', 123456789);
Sauvegarde du Stockage Objet
Activez le versioning sur votre bucket S3 pour la récupération à un point dans le temps :
aws s3api put-bucket-versioning \
--bucket warehouse \
--versioning-configuration Status=Enabled
Optimisation des Performances
Performance des Requêtes
- Assurez-vous que les partitions sont correctement élaguées (filtrez sur
tenant_id,timestamp) - Surveillez le plan de requête avec
/loki/api/v1/explain - Augmentez la mémoire du service query pour les agrégations complexes
- Activez le cache du catalogue pour les services query en production
Performance d'Écriture
- Augmentez le nombre de réplicas du service Ingest pour un débit plus élevé
- Ajustez
queue.write.flush_interval_msetqueue.write.max_bytes_per_flush - Choisissez le codec de compression approprié (ZSTD pour le meilleur ratio, Snappy pour la vitesse)
- Surveillez la latence d'écriture WAL
Performance de Compaction
- Augmentez
shift.read.plan_segment_read_parallelismpour des lectures plus rapides - Augmentez
shift.jobsmanager.worker_countpour plus de tâches concurrentes - Ajustez
shift.jobsmanager.iteration_interval_millisecspour des shifts plus fréquents
Étapes Suivantes
- Mettre en place les procédures de Dépannage
- Revoir la configuration de Déploiement
- Comprendre le Modèle de Données