- Ce que sont les snapshots et où les trouver
- Comment le problème se manifeste
- Les stratégies de récupération possibles et ce que chacune d’elles implique
Vue d’ensemble des snapshots de Keeper
Qu’est-ce qu’un snapshot ?
Où puis-je trouver des snapshots ?
/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
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
- Arrêter tous les nœuds Keeper pour éviter toute corruption supplémentaire
- Sauvegarder l’ensemble en copiant l’intégralité du répertoire de coordination dans un emplacement sûr
- 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
- 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.
- Repérez et validez la sauvegarde la plus récente afin de vérifier la cohérence des métadonnées.
- Arrêtez les services ClickHouse et Keeper.
- Remplacez les snapshots et les logs défectueux par ceux du répertoire de sauvegarde.
- Redémarrez le cluster Keeper et vérifiez la synchronisation des métadonnées.
2. Revenir à un snapshot plus ancien
- 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.
- Identifiez et sélectionnez un ancien snapshot valide (par exemple, snapshot.19) dans le répertoire Keeper.
- Supprimez les snapshots et les logs plus récents.
- Redémarrez Keeper afin qu’il rejoue les logs pour reconstruire l’état des métadonnées.
3. Restaurer les métadonnées à l’aide de SYSTEM RESTORE REPLICA
- 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
-
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) - Pour chaque table concernée, exécutez :
- Pour une récupération au niveau de la base de données (si vous utilisez le moteur de base de données Replicated) :
- Attendez la fin de la synchronisation :
- Vérifiez la récupération en vérifiant que
system.replicasais_readonly = 0et en surveillantsystem.detached_parts
Comment cela fonctionne
SYSTEM 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.4. Supprimer et recréer les métadonnées de la réplique dans Keeper
- 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
- Sur la réplique affectée, détachez la table :
- Supprimez de Keeper les métadonnées de la réplique (à exécuter sur n’importe quelle réplique) :
- Réattachez la table (elle sera en mode lecture seule) :
- Restaurez les métadonnées de la réplique :
- Synchronisez-vous avec les autres répliques :
- Vérifiez
system.detached_partssur toutes les répliques après la récupération
- Arrêtez le serveur ClickHouse
- Créez le flag de récupération :
- Démarrez le serveur ClickHouse
- Le serveur supprimera automatiquement le flag et restaurera toutes les tables répliquées
- Surveillez les logs pour suivre la progression de la restauration
5. Reconstruire le cluster Keeper
- 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.
- Arrêtez complètement les clusters ClickHouse et Keeper.
- Réinitialisez chaque nœud Keeper en nettoyant les répertoires de snapshots et de logs.
- Initialisez un nœud Keeper comme leader, puis ajoutez progressivement les autres nœuds.
- Réimportez les métadonnées si elles sont disponibles depuis des enregistrements externes.