Cassandra 避免 JOINING 状态进入 RUNNING

标签 cassandra datastax-enterprise datastax-startup

我在具有复制 3 的环中有几个节点,并尝试更改节点上的硬件。发生的情况是我收到了流式传输失败异常。

我已经尝试了几次,但总是失败。上游节点 (10.0.10.54) 空间严重不足,对其进行压缩或执行任何稳定操作是不现实的。我想做的是:

  1. 启动一个新节点,其中包含失败事件之前流式传输的所有数据
  2. 对其进行修复 (nodetool Repair -pr)
  3. 停用 10.0.10.54 节点

我不知道该怎么做,每次我启动新节点时,它都会进入“加入”状态,我想要的是使用从“加入”状态复制的数据强制它进入“运行”状态。

感兴趣的人异常(exception) -

WARN  [StreamReceiveTask:6] 2016-04-25 06:48:51,107  StreamResultFuture.java:207 - [Stream #bb34c010-0a1b-11e6-a009-d100b9716be2] Stream failed
INFO  [MemtableFlushWriter:214] 2016-04-25 06:48:51,107  Memtable.java:382 - Completed flushing /mnt/cassandra/data/system/compactions_in_progress-55080ab05d9c388690a4acb25fe1f77b/system-compactions_in_progress-tmp-ka-276-Data.db (0.000KiB) for commitlog position ReplayPosition(segmentId=1461502431578, position=9474892)
INFO  [CompactionExecutor:259] 2016-04-25 06:48:51,252  CompactionTask.java:141 - Compacting [SSTableReader(path='/mnt/cassandra/data/trends/stream_trends-a5bb42a07e2911e58fd6f3cfff022ad4/trends-stream_trends-ka-79-Data.db'), SSTableReader(path='/mnt/cassandra/data/trends/stream_trends-a5bb42a07e2911e58fd6f3cfff022ad4/trends-stream_trends-ka-87-Data.db')]
ERROR [main] 2016-04-25 06:48:51,270  CassandraDaemon.java:581 - Exception encountered during startup
java.lang.RuntimeException: Error during boostrap: Stream failed
        at org.apache.cassandra.dht.BootStrapper.bootstrap(BootStrapper.java:86) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.service.StorageService.bootstrap(StorageService.java:1166) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.service.StorageService.joinTokenRing(StorageService.java:944) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:740) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:617) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:389) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at com.datastax.bdp.server.DseDaemon.setup(DseDaemon.java:336) ~[dse-core-4.8.6.jar:4.8.6]
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:564) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at com.datastax.bdp.DseModule.main(DseModule.java:74) [dse-core-4.8.6.jar:4.8.6]
Caused by: org.apache.cassandra.streaming.StreamException: Stream failed
        at org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at com.google.common.util.concurrent.Futures$4.run(Futures.java:1172) ~[guava-16.0.1.jar:na]
        at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) ~[guava-16.0.1.jar:na]
        at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156) ~[guava-16.0.1.jar:na]
        at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145) ~[guava-16.0.1.jar:na]
        at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202) ~[guava-16.0.1.jar:na]
        at org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:208) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:184) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:415) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamSession.maybeCompleted(StreamSession.java:692) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamSession.taskCompleted(StreamSession.java:653) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at org.apache.cassandra.streaming.StreamReceiveTask$OnCompletionRunnable.run(StreamReceiveTask.java:179) ~[cassandra-all-2.1.13.1218.jar:2.1.13.1218]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_77]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_77]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_77]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_77]
        at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_77]

最佳答案

当节点引导时,您无法跳过 JOINING 阶段。我猜您正在按照以下步骤更换节点? https://docs.datastax.com/en/cassandra/2.0/cassandra/operations/ops_replace_node_t.html

在整个流媒体过程中,您的所有节点都在线吗?如果副本在流式传输时崩溃或脱机,可能会导致流失败。如果节点的磁盘空间非常低,可能会导致 Cassandra 出现奇怪的行为或崩溃。如果是这种情况,您可能需要在添加新节点之前向现有节点添加额外的存储。

您可以向现有节点添加更多磁盘空间,如下所示:

  1. 停止 Cassandra
  2. 将更大的磁盘附加到计算机/虚拟机
  3. 将 cassandra 数据目录 (/var/lib/cassandra/data) 复制到新磁盘
  4. 使用符号链接(symbolic link)将 cassandra 数据目录挂载点更改为新磁盘
  5. 启动 Cassandra

关于Cassandra 避免 JOINING 状态进入 RUNNING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898757/

相关文章:

cassandra - 无法使用 cqlsh 删除或更新 Cassandra 3.11.2 中的记录

Cassandra 没有压缩 sstables?

cassandra - 在压缩历史记录中,rows_merged是什么意思?

cassandra - 在具有物化 View 的表上删除列

Django:{% url } 标签中的 UUID 类型

cassandra - 如何从 cassandra 中删除数据

database - Cassandra数据库的最佳实践建模数据

hadoop - DSE 4.0.1 : hive count different than cassandra count

elasticsearch - Spark查询花费的时间太长

apache-spark - EMR LinkageError 上的 Spark + Cassandra