2014-07-01 4 views
3

Comme vous le savez, les clusters Cassandra sont répliqués pour éviter la perte de données même si certains nœuds du cluster sont hors service. Mais dans le cas où un administrateur supprime accidentellement une table avec une grande quantité de données, et que cette commande a déjà été exécutée par toutes les répliques du cluster, cela signifie-t-il que vous avez perdu cette table et que vous ne pouvez pas la restaurer? Y at-il une suggestion pour faire face à ce genre de catastrophe avec un temps d'arrêt de serveur court?Restaurer les données du cluster Cassandra lors de la suppression accidentelle de la table

Répondre

5

De cassandra docs:

auto_snapshot (valeur par défaut: true) Pour activer ou désactiver si un instantané est pris des données avant troncature keyspace ou abandon des tables. Pour éviter la perte de données , il est fortement recommandé d'utiliser le paramètre par défaut. Si vous définissez sur false, vous perdrez des données sur la troncature ou la suppression.

+0

Merci pour la réponse. N'est-il pas long temps de récupération pour une grande quantité de données? – lncnb91

+1

Aucune donnée réelle n'est copiée lors de la récupération, c'est donc plutôt rapide. Mais je recommande aussi d'exécuter une tâche assez lente de 'réparation nodetool' après cela pour être sûr que les données récupérées sont entièrement cohérentes. – shutty

0

Si l'administrateur a supprimé les données et répliqué dans tous les noeuds, il est difficile de récupérer les données sans une sauvegarde cohérente.

Peut-être considérant que les suppressions dans cassandra ne sont pas exécutées instantanément, vous pouvez récupérer les données. Lorsque vous supprimez des données, Cassandra remplace les données par une pierre tombale. La pierre tombale peut ensuite être propagée aux répliques qui ont raté la demande de suppression initiale.

Voir http://wiki.apache.org/cassandra/DistributedDeletes

colonnes marquées d'une pierre tombale exister pendant une période de temps configurée (définie par les gc_grace_seconds valeur réglée sur la famille de la colonne), puis sont définitivement supprimés par le procédé de compactage, après que le temps a expiré. La valeur par défaut est 10 jours. Après l'explication dans About Deletes peut-être si vous arrêtez certains des noeuds et attendez que le compactage réussisse et que les données soient complètement supprimées des SSTables, puis rallumez les noeuds les données pourraient à nouveau apparaître. Mais cela n'arrivera que si vous ne faites pas d'opérations de réparation périodiques sur le nœud.

Je n'ai jamais essayé cela auparavant, ce n'est qu'une idée qui me vient à la lecture de la documentation de cassandra.

+0

Merci. Ma question inclut le cas que la suppression est répliquée dans tous les nœuds. Et supposons que la suppression ne se soit pas encore propagée, comment savons-nous quel noeud contient encore les données, même si nous savons, nous devons encore attendre que le compactage réussisse pour la récupération de données, cela causera beaucoup de dommages économiques. – lncnb91

Questions connexes