Skip to main content
Des snapshots ClickHouse Keeper corrompus ou défectueux peuvent provoquer une forte instabilité du système, notamment des incohérences de métadonnées, des tables en lecture seule, un épuisement des ressources ou des échecs de sauvegarde. Cet article couvre :

Vue d’ensemble des snapshots de Keeper

Qu’est-ce qu’un snapshot ?

Un snapshot est un état sérialisé des données internes de Keeper (comme les métadonnées sur les clusters, les chemins de coordination des tables et les configurations) à un instant donné. Les snapshots sont essentiels pour resynchroniser les nœuds Keeper au sein d’un cluster, restaurer les métadonnées en cas de défaillance, ainsi que pour les processus de démarrage ou de redémarrage qui s’appuient sur un état valide connu de Keeper.

Où puis-je trouver des snapshots ?

Les snapshots sont stockés sous forme de fichiers sur le système de fichiers local des nœuds Keeper. Par défaut, ils sont enregistrés dans /var/lib/clickhouse/coordination/snapshots/, ou dans le chemin personnalisé défini par snapshot_storage_path dans votre fichier keeper_server.xml. Les snapshots sont numérotés de manière incrémentielle (par exemple, snapshot.23), les plus récents portant des numéros plus élevés. Dans les clusters multinœuds, chaque nœud Keeper possède son propre répertoire de snapshots.
La cohérence des snapshots entre les nœuds est essentielle à la récupération.

Principaux symptômes et manifestations de snapshots Keeper corrompus

Le tableau ci-dessous présente quelques symptômes et manifestations courants de snapshots Keeper corrompus : Indicateurs dans les logs : Avant de diagnostiquer une corruption de snapshot, vérifiez les logs Keeper afin d’identifier des motifs d’erreur spécifiques :

Récupération après des snapshots Keeper corrompus

Avant de toucher aux fichiers, veillez toujours à :
  1. Arrêter tous les nœuds Keeper pour éviter toute corruption supplémentaire
  2. Sauvegarder l’ensemble en copiant l’intégralité du répertoire de coordination dans un emplacement sûr
  3. Vérifier le quorum du cluster afin de vous assurer qu’au moins un nœud dispose de données intactes

1. Restaurer à partir d’une sauvegarde existante

Suivez cette procédure si :
  • La corruption des métadonnées de Keeper ou d’un snapshot rend les données actuelles irrécupérables.
  • Une sauvegarde existe avec un état Keeper connu comme sain.
Suivez les étapes ci-dessous pour restaurer une sauvegarde existante :
  1. Repérez et validez la sauvegarde la plus récente afin de vérifier la cohérence des métadonnées.
  2. Arrêtez les services ClickHouse et Keeper.
  3. Remplacez les snapshots et les logs défectueux par ceux du répertoire de sauvegarde.
  4. Redémarrez le cluster Keeper et vérifiez la synchronisation des métadonnées.
Sauvegardez régulièrementSi les sauvegardes ne sont pas à jour, vous risquez de perdre des modifications récentes des métadonnées. C’est pourquoi nous vous recommandons d’effectuer des sauvegardes régulièrement.

2. Revenir à un snapshot plus ancien

Suivez cette procédure dans les cas suivants :
  • Des snapshots récents sont corrompus, mais d’anciens snapshots restent exploitables.
  • Les logs incrémentiels sont intacts, ce qui permet une restauration cohérente.
Suivez les étapes ci-dessous pour revenir à un snapshot plus ancien :
  1. Identifiez et sélectionnez un ancien snapshot valide (par exemple, snapshot.19) dans le répertoire Keeper.
  2. Supprimez les snapshots et les logs plus récents.
  3. Redémarrez Keeper afin qu’il rejoue les logs pour reconstruire l’état des métadonnées.
Risque de désynchronisation des métadonnéesIl existe un risque de désynchronisation des métadonnées si des snapshots et des logs sont manquants ou incomplets.

3. Restaurer les métadonnées à l’aide de SYSTEM RESTORE REPLICA

Vous devez suivre ce processus dans les cas suivants :
  • les métadonnées de Keeper sont perdues ou corrompues, mais les données de la table existent toujours sur le disque
  • les tables sont passées en mode lecture seule en raison de métadonnées ZooKeeper/Keeper manquantes
  • vous devez recréer les métadonnées dans Keeper à partir des parties de données disponibles localement
Suivez les étapes ci-dessous pour restaurer les métadonnées :
  1. Vérifiez que les données de la table existent localement dans le chemin de données de votre clickhouse-server, défini par <path> dans votre configuration. (/var/lib/clickhouse/data/ par défaut)
  2. Pour chaque table concernée, exécutez :
  1. Pour une récupération au niveau de la base de données (si vous utilisez le moteur de base de données Replicated) :
  1. Attendez la fin de la synchronisation :
  1. Vérifiez la récupération en vérifiant que system.replicas a is_readonly = 0 et en surveillant system.detached_parts
Comment cela fonctionneSYSTEM RESTORE REPLICA détache toutes les parts existantes, recrée les métadonnées dans Keeper (comme s’il s’agissait d’une nouvelle table vide), puis réattache toutes les parts. Cela évite de retélécharger les données via le réseau.
PrérequisCela fonctionne uniquement si les parties de données locales sont intactes. Si les données sont également corrompues, utilisez plutôt la stratégie #5 (reconstruire le cluster).

4. Supprimer et recréer les métadonnées de la réplique dans Keeper

Vous devez suivre cette procédure dans les cas suivants :
  • L’erreur se produit sur une seule réplique du cluster et les métadonnées correspondantes dans Keeper sont corrompues ou incohérentes
  • Vous rencontrez des erreurs du type “Part XXXXX intersects previous part YYYYY”
  • Vous devez réinitialiser complètement les métadonnées d’une réplique dans Keeper tout en conservant les données locales
Suivez les étapes ci-dessous pour supprimer et recréer les métadonnées :
  1. Sur la réplique affectée, détachez la table :
  1. Supprimez de Keeper les métadonnées de la réplique (à exécuter sur n’importe quelle réplique) :
Pour trouver le bon chemin ZooKeeper :
  1. Réattachez la table (elle sera en mode lecture seule) :
  1. Restaurez les métadonnées de la réplique :
  1. Synchronisez-vous avec les autres répliques :
  1. Vérifiez system.detached_parts sur toutes les répliques après la récupération
Exécutez cette opération sur toutes les répliques affectéesSi la corruption affecte plusieurs répliques, répétez ces étapes sur chacune d’elles, l’une après l’autre.
Pour toute la base de donnéesSi vous utilisez une base de données Replicated, vous pouvez utiliser SYSTEM DROP REPLICA ... FROM DATABASE db_name à la place.
Alternative : utiliser le flag force_restore_data Pour récupérer automatiquement toutes les tables répliquées au démarrage du serveur :
  1. Arrêtez le serveur ClickHouse
  2. Créez le flag de récupération :
  1. Démarrez le serveur ClickHouse
  2. Le serveur supprimera automatiquement le flag et restaurera toutes les tables répliquées
  3. Surveillez les logs pour suivre la progression de la restauration
Cette approche est utile lorsque plusieurs tables doivent être restaurées simultanément.

5. Reconstruire le cluster Keeper

Vous devez suivre ce processus lorsque :
  • Ni snapshots, ni logs, ni sauvegardes valides ne sont disponibles pour la restauration.
  • Vous devez recréer l’intégralité du cluster Keeper et de ses métadonnées.
Suivez les étapes ci-dessous pour reconstruire le cluster Keeper :
  1. Arrêtez complètement les clusters ClickHouse et Keeper.
  2. Réinitialisez chaque nœud Keeper en nettoyant les répertoires de snapshots et de logs.
  3. Initialisez un nœud Keeper comme leader, puis ajoutez progressivement les autres nœuds.
  4. Réimportez les métadonnées si elles sont disponibles depuis des enregistrements externes.
Processus longCe processus est long et comporte un risque d’indisponibilité prolongée. Une reconstruction complète des données est requise.
Dernière modification le 23 juillet 2026