【发布时间】:2017-03-25 19:49:57
【问题描述】:
我向我的 cassandra 集群添加了一个新节点(新节点不是种子节点)。我的集群上现在有 3 个节点:
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID
Rack
UN XXX.XXX.XXX.XXX 52.25 GB 256 100.0% XXX rack1
UN XXX.XXX.XXX.XXX 63.65 GB 256 100.0% XXX rack1
UN XXX.XXX.XXX.XXX 314.72 MB 256 100.0% XXX rack1
我的复制因子为 3:
DESCRIBE KEYSPACE mykeyspace
CREATE KEYSPACE mykeyspace WITH replication = {'class': 'NetworkTopologyStrategy', 'datacenter1': '3'} AND durable_writes = true;
但数据并未复制到新集群(具有 314 MB 数据的节点)上。
我尝试使用 nodetool 重建:
错误 [STREAM-IN-/XXX.XXX.XXX.XXX] 2016-11-11 08:28:42,765 StreamSession.java:520 - [流 #0e7a0580-a81b-11e6-9a1c-6d75503d5d02] 发生流式传输错误 java.lang.IllegalArgumentException:未知类型 0 在 org.apache.cassandra.streaming.messages.StreamMessage$Type.get(StreamMessage.java:97) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.messages.StreamMessage.deserialize(StreamMessage.java:58) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:261) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 java.lang.Thread.run(Thread.java:745) [na:1.8.0_74] 错误 [Thread-16] 2016-11-11 08:28:42,765 CassandraDaemon.java:195 - 线程异常 线程[Thread-16,5,RMI 运行时] java.lang.RuntimeException: java.lang.InterruptedException 在 com.google.common.base.Throwables.propagate(Throwables.java:160) ~[guava-18.0.jar:na] 在 org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:32) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74] 原因: java.lang.InterruptedException: null at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014) ~[na:1.8.0_74] 在 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2048) ~[na:1.8.0_74] 在 java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:353) ~[na:1.8.0_74] 在 org.apache.cassandra.streaming.compress.CompressedInputStream$Reader.runMayThrow(CompressedInputStream.java:184) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28) ~[apache-cassandra-3.1.1.jar:3.1.1] ... 1 常用框架省略 INFO [STREAM-IN-/XXX.XXX.XXX.XXX] 2016-11-11 08:28:42,805 StreamResultFuture.java:182 - [流 #0e7a0580-a81b-11e6-9a1c-6d75503d5d02] 与 /XXX.XXX.XXX.XXX 的会话已完成 WARN [STREAM-IN-/XXX.XXX.XXX.XXX] 2016-11-11 08:28:42,807 StreamResultFuture.java:209 - [流 #0e7a0580-a81b-11e6-9a1c-6d75503d5d02] 流失败错误 [RMI TCP 连接 (14)-127.0.0.1] 2016-11-11 08:28:42,808 StorageService.java:1128 - 重建节点时出错 org.apache.cassandra.streaming.StreamException:流失败于 org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 com.google.common.util.concurrent.Futures$6.run(Futures.java:1310) ~[guava-18.0.jar:na] 在 com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:457) ~[guava-18.0.jar:na] 在 com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156) ~[guava-18.0.jar:na] 在 com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145) ~[guava-18.0.jar:na] 在 com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202) ~[guava-18.0.jar:na] 在 org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:210) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:186) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:430) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.StreamSession.onError(StreamSession.java:525) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:279) ~[apache-cassandra-3.1.1.jar:3.1.1] 在 java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_74]
我也尝试更改选项,但数据仍未复制到新节点: auto_bootstrap: 真
能否请您帮我理解为什么数据没有复制到新节点上?
如果您需要我的配置的更多信息,请告诉我。
感谢您的帮助
【问题讨论】:
-
首先查看stackoverflow.com/questions/16343142/… - 如果那里的答案不适用,我们可以深入挖掘。
-
感谢克里斯的帮助。我实际上首先阅读了这个问题。我在 3 个节点上有相同的 num_tokens(相同的硬件配置)。我在 cassandra 配置中添加了
auto_bootstrap=true。我在新节点上运行nodetool repair,在其他节点上运行nodetool cleanup,但数据不会在新节点上复制。
标签: cassandra replication