【问题标题】:Cassandra : data not replicated on new nodeCassandra:数据未在新节点上复制
【发布时间】: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


【解决方案1】:

看来(来自https://issues.apache.org/jira/browse/CASSANDRA-10448)这是由于CASSANDRA-10961。应用该修复程序应该可以解决它。

【讨论】:

  • 我使用的是 Cassandra 3.1.1。我受到这个错误的影响吗?感谢您的帮助。
  • 看来你是。当然看起来一样。
  • 我已经在新节点上安装了 Cassandra 3.0.9。我没有注意到改进。我还没有更新其他节点,需要几天才能更新其他节点上的 Cassandra。我会告诉你这是否能解决问题。谢谢
  • 嗨,克里斯,我在集群上安装了 Cassandra 3.0.9,但我的新节点上仍然没有数据副本。我运行了 nodetool 修复但没有任何改变: UN XXX.XXX.XXX.XXX 52.47 GB 256 100.0% xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rack1 UN XXX.XXX.XXX.XXX 63.92 GB 256 100.0% xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rack1 UN XXX.XXX.XXX.XXX 462.97 MB 256 100.0% xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 机架1
  • 我认为这不仅仅是安装新版本的问题(尽管它看起来确实在 3.3 中已修复)。对于旧版本,您需要使用错误报告页面上链接的修补 jar。
猜你喜欢
  • 2023-03-12
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 2016-06-23
  • 2015-08-11
  • 2015-05-14
  • 1970-01-01
相关资源
最近更新 更多