web-dev-qa-db-fra.com

Cassandra: fermeture en raison d'une erreur lors du traitement du journal de validation lors de l'initialisation

Je chargeais un grand fichier CSV dans Cassandra à l'aide de cassandra-loader.

VM a manqué d'espace disque pendant ce processus et s'est écrasé. J'ai alloué plus d'espace disque au VM et j'ai essayé de démarrer cassandra mais il a refusé de démarrer en raison de problèmes avec SSTables et du journal de validation.

Je n'ai pas pu exécuter nodetool repair Car il ne fonctionne que lorsque le nœud est en ligne. J'ai exécuté sstablescrub, ce qui a pris environ 1 heure pour terminer. J'ai donc pensé que cela aurait pu le réparer.

Mais je reçois toujours cette erreur dans system.log

ERROR [SSTableBatchOpen:4] 2015-10-23 18:57:45,035 SSTableReader.Java:506 - Corrupt sstable /var/lib/cassandra/data/keyspace1/location-777a33d0772911e597a98b820c5778a4/la-1709-big=[TOC.txt, CompressionInfo.db, Statistics.db, Digest.adler32, Data.db, Index.db, Filter.db]; skipping table
org.Apache.cassandra.io.sstable.CorruptSSTableException: Java.io.EOFException
        at org.Apache.cassandra.io.compress.CompressionMetadata.<init>(CompressionMetadata.Java:125) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.compress.CompressionMetadata.create(CompressionMetadata.Java:86) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.util.CompressedSegmentedFile$Builder.metadata(CompressedSegmentedFile.Java:142) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.util.CompressedPoolingSegmentedFile$Builder.complete(CompressedPoolingSegmentedFile.Java:101) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.util.SegmentedFile$Builder.complete(SegmentedFile.Java:187) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.util.SegmentedFile$Builder.complete(SegmentedFile.Java:179) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.Java:703) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.sstable.format.SSTableReader.load(SSTableReader.Java:664) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.Java:458) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.Java:363) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.io.sstable.format.SSTableReader$4.run(SSTableReader.Java:501) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511) [na:1.8.0_60]
        at Java.util.concurrent.FutureTask.run(FutureTask.Java:266) [na:1.8.0_60]
        at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142) [na:1.8.0_60]
        at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617) [na:1.8.0_60]
        at Java.lang.Thread.run(Thread.Java:745) [na:1.8.0_60]
Caused by: Java.io.EOFException: null
        at Java.io.DataInputStream.readUnsignedShort(DataInputStream.Java:340) ~[na:1.8.0_60]
        at Java.io.DataInputStream.readUTF(DataInputStream.Java:589) ~[na:1.8.0_60]
        at Java.io.DataInputStream.readUTF(DataInputStream.Java:564) ~[na:1.8.0_60]
        at org.Apache.cassandra.io.compress.CompressionMetadata.<init>(CompressionMetadata.Java:96) ~[Apache-cassandra-2.2.3.jar:2.2.3]
        ... 15 common frames omitted
INFO  [main] 2015-10-23 18:57:45,193 ColumnFamilyStore.Java:382 - Initializing system_auth.role_permissions
INFO  [main] 2015-10-23 18:57:45,201 ColumnFamilyStore.Java:382 - Initializing system_auth.resource_role_permissons_index
INFO  [main] 2015-10-23 18:57:45,213 ColumnFamilyStore.Java:382 - Initializing system_auth.roles
INFO  [main] 2015-10-23 18:57:45,233 ColumnFamilyStore.Java:382 - Initializing system_auth.role_members
INFO  [main] 2015-10-23 18:57:45,240 ColumnFamilyStore.Java:382 - Initializing system_traces.sessions
INFO  [main] 2015-10-23 18:57:45,252 ColumnFamilyStore.Java:382 - Initializing system_traces.events
INFO  [main] 2015-10-23 18:57:45,265 ColumnFamilyStore.Java:382 - Initializing simplex.songs
INFO  [main] 2015-10-23 18:57:45,276 ColumnFamilyStore.Java:382 - Initializing simplex.playlists
INFO  [pool-2-thread-1] 2015-10-23 18:57:45,289 AutoSavingCache.Java:187 - reading saved cache /var/lib/cassandra/saved_caches/KeyCache-ca.db
INFO  [pool-2-thread-1] 2015-10-23 18:57:45,313 AutoSavingCache.Java:163 - Completed loading (25 ms; 36 keys) KeyCache cache
INFO  [main] 2015-10-23 18:57:45,351 CommitLog.Java:168 - Replaying /var/lib/cassandra/commitlog/CommitLog-5-1445578022702.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022703.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022704.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022705.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022706.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022707.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022708.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022709.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022710.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022712.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022713.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022714.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022715.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022716.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022717.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022719.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022720.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022721.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022722.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022723.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022724.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022725.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022727.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022728.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022730.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022731.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022732.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022733.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022734.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022736.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022738.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022740.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022741.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022743.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022744.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022745.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022746.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022748.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022749.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022750.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022751.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022752.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022753.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022755.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022756.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022758.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022759.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022760.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022761.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022763.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022764.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022765.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022766.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022767.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022768.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022769.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022770.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022771.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022772.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022773.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022774.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022775.log, /var/lib/cassandra/commitlog/CommitLog-5-1445578022776.log, /var/lib/cassandra/commitlog/CommitLog-5-1445588991268.log, /var/lib/cassandra/commitlog/CommitLog-5-1445589094722.log, /var/lib/cassandra/commitlog/CommitLog-5-1445589149527.log, /var/lib/cassandra/commitlog/CommitLog-5-1445595828633.log, /var/lib/cassandra/commitlog/CommitLog-5-1445595898055.log, /var/lib/cassandra/commitlog/CommitLog-5-1445596033717.log, /var/lib/cassandra/commitlog/CommitLog-5-1445596400441.log, /var/lib/cassandra/commitlog/CommitLog-5-1445596601854.log, /var/lib/cassandra/commitlog/CommitLog-5-1445598032544.log, /var/lib/cassandra/commitlog/CommitLog-5-1445598758663.log, /var/lib/cassandra/commitlog/CommitLog-5-1445601112953.log, /var/lib/cassandra/commitlog/CommitLog-5-1445601937334.log, /var/lib/cassandra/commitlog/CommitLog-5-1445601985416.log, /var/lib/cassandra/commitlog/CommitLog-5-1445604504389.log, /var/lib/cassandra/commitlog/CommitLog-5-1445606516196.log
ERROR [main] 2015-10-23 18:59:05,091 JVMStabilityInspector.Java:78 - Exiting due to error while processing commit log during initialization.
org.Apache.cassandra.db.commitlog.CommitLogReplayer$CommitLogReplayException: Mutation checksum failure at 4110758 in CommitLog-5-1445578022776.log
        at org.Apache.cassandra.db.commitlog.CommitLogReplayer.handleReplayError(CommitLogReplayer.Java:622) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.db.commitlog.CommitLogReplayer.replaySyncSection(CommitLogReplayer.Java:492) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.Java:388) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.Java:147) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.Java:189) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.Java:169) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.Java:273) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.Java:513) [Apache-cassandra-2.2.3.jar:2.2.3]
        at org.Apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.Java:622) [Apache-cassandra-2.2.3.jar:2.2.3]
Exiting due to error while processing commit log during initialization.

Comment puis-je réparer ça? Ce sont des données de test, je suis d'accord pour les perdre. Comment gérer cela en production pour éviter la perte de données?

J'ai essayé de définir disk_failure_policy: ignore Pour que je puisse exécuter nodetool repair Une fois le serveur opérationnel. Mais le serveur ne démarre même pas avec ce paramètre.

J'utilise un seul nœud et le facteur de réplication est 1. Est-ce que le fait d'avoir plus de nœuds et un facteur de réplication> 1 m'a permis de résoudre un problème comme celui-ci sans perte de données?

J'utilise Cassandra 2.2.3

28
Dojo

Une certaine réplication vous aiderait certainement à résoudre ce problème sans perte de données, mais cela aurait un prix.

Malgré tous vos efforts, vous ne parvenez pas à récupérer votre sstable corrompu. Vous décidez donc de le supprimer de votre système de fichiers pour recommencer Cassandra. Si vous n'avez pas de réplication, vos données sont perdues. Mais si vous avez une réplication sur le cluster, vous pouvez éventuellement récupérer les données à partir d'autres nœuds. C'est ce que nodetool repair faire !

Alors nodetool repair ne répare pas sstable corrompu. Fondamentalementnodetool repair comparer les tables d'un nœud à l'autre pour trouver des données manquantes ou incohérentes, puis les réparer. Vous pouvez trouver plus d'informations sur son fonctionnement ici .

Toutefois nodetool repair est très cher, il est long et utilise beaucoup de CPU, de disque et de réseau. Il y a ce bon post sur les avantages et les inconvénients de la réparation.

17
Adpi2

Comme vous ne vous souciez pas des données, la suppression des fichiers de\data\commitlogs devrait être la solution la plus simple.

38
indolentdeveloper

C'est ainsi que j'ai résolu le problème avec les journaux de validation. Vous ne devez le faire que si vous ne vous souciez pas de préserver l'état de vos journaux de validation.

Essayez de redémarrer cassandra using

Sudo systemctl restart cassandra

Ensuite je vérifie

systemctl status cassandra

et voyez que le statut est "quitté", donc il y a un problème. Vérifiez les journaux pour cassandra using

Sudo less /var/log/cassandra/system.log

et voyez org.Apache.cassandra.db.commitlog.CommitLogReplayer$CommitLogReplayException: Could not read commit log descriptor in file /var/lib/cassandra/commitlog/CommitLog-6-1498210233635.log

Parce que je ne me soucie pas de préserver l'état de Cassandra je supprime tous les journaux de validation et il démarre maintenant correctement

Sudo rm /var/lib/cassandra/commitlog/CommitLog* Sudo systemctl restart cassandra

systemctl status cassandra (devrait confirmer qu'il fonctionne maintenant)

9
Sami Start

Va simplement dans le répertoire des journaux dans cassandra et supprimez les fichiers journaux. Cela fonctionne bien ....

5
Vikram Shekhawat