2016-04-29 61 views
4

我在運行apache-cassandra 3.3時意外關閉了Mac OS X.當一個新的引導裝載重啓卡桑德拉,我得到了以下錯誤:如何從Apache Cassandra中恢復CommitLogReplayException

INFO 15:25:15 Replaying /Users/eswenson/opt/apache-cassandra-3.5/bin/../data/commitlog/CommitLog-6-1461717351786.log, /Users/eswenson/opt/apache-cassandra-3.5/bin/../data/commitlog/CommitLog-6-1461717351787.log, /Users/eswenson/opt/apache-cassandra-3.5/bin/../data/commitlog/CommitLog-6-1461942807785.log, /Users/eswenson/opt/apache-cassandra-3.5/bin/../data/commitlog/CommitLog-6-1461943004975.log 
ERROR 15:25:15 Exiting due to error while processing commit log during initialization. 
org.apache.cassandra.db.commitlog.CommitLogReplayer$CommitLogReplayException: Encountered bad header at position 542295 of commit log /Users/eswenson/opt/apache-cassandra-3.5/bin/../data/commitlog/CommitLog-6-1461717351786.log, with bad position but valid CRC 
     at org.apache.cassandra.db.commitlog.CommitLogReplayer.handleReplayError(CommitLogReplayer.java:611) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.db.commitlog.SegmentReader$SegmentIterator.computeNext(SegmentReader.java:105) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.db.commitlog.SegmentReader$SegmentIterator.computeNext(SegmentReader.java:78) [apache-cassandra-3.5.jar:3.5] 
     at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) [guava-18.0.jar:na] 
     at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) [guava-18.0.jar:na] 
     at org.apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.java:399) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.java:236) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.java:192) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.java:172) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:283) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:551) [apache-cassandra-3.5.jar:3.5] 
     at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:680) [apache-cassandra-3.5.jar:3.5] 

我搜索了堆棧溢出和谷歌並沒有發現同樣的問題的帖子。我發現問題https://issues.apache.org/jira/browse/CASSANDRA-9749,這是相關的,但這個標記已解決,並且與檢測到問題後繼續執行有關,而不是與例外失敗相關。

在這種情況下我該怎麼辦?有沒有恢復路徑(假設沒有快照)?任何方式來截斷違規記錄提交日誌?任何可用於修復錯誤標題的工具(例如,刪除記錄)?

謝謝。

回答

8

我在使用Mac OS上的本地Cassandra時也遇到過這種異常。

如果您不關心丟失提交日誌中的數據或者在某處備份了備份,請停止Cassandra,清除commitlog文件夾並重新啓動。

恐怕沒有其他的選擇了。順便說一下,您是否將Mac OS上的Cassandra用於生產?

  • 如果是的話,你應該知道的Mac OS不正式支持
  • 如果它不生產那麼誰在乎,只是清理commitlog並重新啓動
+0

我是新來卡桑德拉...請告訴我如何啓動cassandra –

2

我面臨着類似的問題,而在Windows 7(本地機器)環境中運行Cassandra。我從日誌中發現的例外是

錯誤07:14:35在初始化期間處理提交日誌時由於錯誤而退出。 org.apache.cassandra.db.commitlog.CommitLogReplayer $ CommitLogReplayException:無法讀取提交文件C:\ Program Files \ DataStax-DDC \ data \ commitlog \ CommitLog-6-1470969948498.log at org.apache中的日誌描述符。 cassandra.db.commitlog.CommitLogReplayer.handleReplayError(CommitLogReplayer.java:616)[apache-cassandra-3.7.0.jar:3.7.0] at org.apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.java :378)[apache-cassandra-3.7.0.jar:3.7.0]

因爲它只是一個測試設置,我刪除了特定的提交日誌文件,並從Windows服務管理器重新啓動它,並且它開始完美。如果發生在生產環境中,我不確定該怎麼做。

0

第二次我在單節點開發者系統上得到這個。似乎能夠發生,如果jvm意外死亡。清除commitlog目錄解決了它。使用Windows 10.

我擔心的是,即使沒有更新數據庫,我也會遇到這些錯誤問題。 cassandra不會定期刷新。我不希望在生產中出現像這樣的問題,只是因爲服務器崩潰或類似情況,即使我有副本節點。

在標準輸出日誌,最後一部分是

INFO 06:17:39 Replaying C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471353812251.log, C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471353812252.log, C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471411951134.log, C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471454506802.log, C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471532812678.log 
ERROR 06:17:39 Exiting due to error while processing commit log during initialization. 
org.apache.cassandra.db.commitlog.CommitLogReplayer$CommitLogReplayException: Could not read commit log descriptor in file C:\Program Files\DataStax-DDC\data\commitlog\CommitLog-6-1471353812252.log 
    at org.apache.cassandra.db.commitlog.CommitLogReplayer.handleReplayError(CommitLogReplayer.java:611) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.java:373) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.db.commitlog.CommitLogReplayer.recover(CommitLogReplayer.java:236) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.java:192) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.db.commitlog.CommitLog.recover(CommitLog.java:172) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:283) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:551) [apache-cassandra-3.4.0.jar:3.4.0] 
    at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:680) [apache-cassandra-3.4.0.jar:3.4.0] 
+0

我的配置說commitlog每10秒鐘同步一次,那麼除非在這10秒內發生崩潰,否則文件如何損壞? – mattias