卡桑德拉重建停止

时间:2018-02-07 05:13:12

标签: cassandra rebuild

我在DC1数据中心的1个DC1和12个备份节点中有一个由18个节点组成的cassandra集群,几天前所有备份节点都关闭并超过gc_grace周期。现在我正在尝试使所有备份节点都已启动,因此已从备份节点中删除所有数据并尝试重建,但它正在使用FileNotFoundException停止:。

重建命令是:nohup nodetool rebuild DC1&

(DC1是产品数据中心)

Error in nohup.out file :
   Error while rebuilding node: Stream failed
-- StackTrace --
java.lang.RuntimeException: Error while rebuilding node: Stream failed
        at org.apache.cassandra.service.StorageService.rebuild(StorageService.java:1076)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

system.log中的错误:

Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.FileNotFoundException: /data1/cassandra/data/system/compactions_in_progress-55080ab05d9c388690a4acb25fe1f77b/system-compactions_in_progress-tmp-ka-62-Data.db (No such file or directory)
    at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) ~[guava-16.0.jar:na]
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286) ~[guava-16.0.jar:na]
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) ~[guava-16.0.jar:na]
    at org.apache.cassandra.utils.FBUtilities.waitOnFuture(FBUtilities.java:372) ~[apache-cassandra-2.1.16.jar:2.1.16]
    ... 12 common frames omitted
Caused by: java.lang.RuntimeException: java.io.FileNotFoundException: /data1/cassandra/data/system/compactions_in_progress-55080ab05d9c388690a4acb25fe1f77b/system-compactions_in_progress-tmp-ka-62-Data.db (No such file or directory)
        at org.apache.cassandra.io.util.SequentialWriter.<init>(SequentialWriter.java:82) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.io.compress.CompressedSequentialWriter.<init>(CompressedSequentialWriter.java:67) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.io.util.SequentialWriter.open(SequentialWriter.java:124) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.io.sstable.SSTableWriter.<init>(SSTableWriter.java:130) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.db.Memtable$FlushRunnable.createFlushWriter(Memtable.java:414) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:351) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.db.Memtable$FlushRunnable.runMayThrow(Memtable.java:335) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) ~[guava-16.0.jar:na]
        at org.apache.cassandra.db.ColumnFamilyStore$Flush.run(ColumnFamilyStore.java:1134) ~[apache-cassandra-2.1.16.jar:2.1.16]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) ~[na:1.7.0_79]
        at java.util.concurrent.FutureTask.run(FutureTask.java:262) ~[na:1.7.0_79]
        ... 5 common frames omitted
Caused by: java.io.FileNotFoundException: /data1/cassandra/data/system/compactions_in_progress-55080ab05d9c388690a4acb25fe1f77b/system-compactions_in_progress-tmp-ka-62-Data.db (No such file or directory)

2 个答案:

答案 0 :(得分:2)

您的问题不是FileNotFound异常。这是你正在流式传输系统表的事实。系统表将在启动时在本地节点上创建。除系统表数据外,所有数据都应流式传输。 /data1/cassandra/data/system/

您使用的是哪个Cassandra版本?

如果你没有改变迫使Cassandra流式传输系统表的任何东西,我会说这是一个错误。

答案 1 :(得分:1)

当您在DC2中触发重建时,DC1中正在进行压缩。您可以在DC1的所有节点中发出以下命令以查看正在进行的压缩

  

nodetool compactionstats

作为压缩的一部分,sstables将合并在一起,并且一旦合并完成,tmp“compaction_in_progress”表将消失。因此,从DC1到DC2的那些临时表的流式传输会丢失,从而导致流式传输失败。

这些压缩也可以通过在DC1中启动的“nodetool修复”来触发。因此,等待维修完成,如果它们正在进行中,以避免这种情况。

由于DC1中的18个节点,我相信群集的存储大小很大。解决这种情况的一种更简洁的方法是在重建期间暂停压缩并一次重建一个密钥空间。因此,而不是使用

重建整个集群
  

nohup nodetool重建DC1&amp;

  1. 在DC1中发出以下命令
      

    nodetool disableautocompaction keyspace-name1

  2. 然后在DC2中重建该键空间,一次一个节点
      

    nohup nodetool rebuild keyspace-name1 DC1&amp;

  3. 在DC2中针对该键空间的所有节点中完成重建
      

    nodetool enableautocompaction keyspace-name1

  4. 对所有键空间重复上述两个步骤,直到完成为止。您可以跳过系统表,例如“system”,它是该节点的本地系统,并在您启动该节点时自动重建(即使是空的数据目录)。

    如果有太多的应用程序密钥空间需要处理,那么它就会变成一些手工工作。

相关问题