【问题标题】:Stream error during end-stage of decommission退役结束阶段的流错误
【发布时间】:2014-07-22 05:06:50
【问题描述】:

我在节点退役的最后阶段遇到了以下异常:

Exception in thread "main" java.lang.RuntimeException: java.util.concurrent.ExecutionException: org.apache.cassandra.streaming.StreamException: Stream failed
    at org.apache.cassandra.service.StorageService.unbootstrap(StorageService.java:2946)
    at org.apache.cassandra.service.StorageService.decommission(StorageService.java:2903)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:75)
    at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:279)
    at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
    at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
    at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
    at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
    at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
    at sun.reflect.GeneratedMethodAccessor25.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: org.apache.cassandra.streaming.StreamException: Stream failed
    at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299)
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286)
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116)
    at org.apache.cassandra.service.StorageService.unbootstrap(StorageService.java:2941)
    ... 36 more
Caused by: org.apache.cassandra.streaming.StreamException: Stream failed
    at org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85)
    at com.google.common.util.concurrent.Futures$4.run(Futures.java:1160)
    at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297)
    at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156)
    at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145)
    at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202)
    at org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:216)
    at org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:191)
    at org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:331)
    at org.apache.cassandra.streaming.StreamSession.convict(StreamSession.java:600)
    at org.apache.cassandra.gms.FailureDetector.interpret(FailureDetector.java:237)
    at org.apache.cassandra.gms.Gossiper.doStatusCheck(Gossiper.java:643)
    at org.apache.cassandra.gms.Gossiper.access$700(Gossiper.java:64)
    at org.apache.cassandra.gms.Gossiper$GossipTask.run(Gossiper.java:170)
    at org.apache.cassandra.concurrent.DebuggableScheduledThreadPoolExecutor$UncomplainingRunnable.run(DebuggableScheduledThreadPoolExecutor.java:75)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    ... 3 more

此异常跟踪来自 nodetool decommission 命令本身。退役节点的system.log中没有记录异常

在接收节点,异常如下:

 INFO [NonPeriodicTasks:1] 2014-06-02 04:40:53,101 SecondaryIndexManager.java (line 146) Index build of [myks.mycf] complete
ERROR [NonPeriodicTasks:1] 2014-06-02 04:40:53,240 CassandraDaemon.java (line 198) Exception in thread Thread[NonPeriodicTasks:1,5,main]
java.lang.RuntimeException: Outgoing stream handler has been closed
    at org.apache.cassandra.streaming.ConnectionHandler.sendMessage(ConnectionHandler.java:170)
    at org.apache.cassandra.streaming.StreamSession.maybeCompleted(StreamSession.java:620)
    at org.apache.cassandra.streaming.StreamSession.taskCompleted(StreamSession.java:566)
    at org.apache.cassandra.streaming.StreamReceiveTask$OnCompletionRunnable.run(StreamReceiveTask.java:120)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

简要背景

我的 Solr DC 中有 4 个节点,包括我要退役的节点。剩下的三个节点中的两个在几天前已经完成了流和索引构建;最后一个(最慢的)在几个小时前完成了它的索引构建。如上面节点的日志所示,异常发生在索引构建完成后。

问题

我是否可以假设节点已成功退役,尽管出现了异常?据我所知,最后一个节点应该接收的所有文件都已成功传输(nodetool netstats 在异常发生之前显示所有文件的 100%)。我认为流错误仅与未能关闭流会话有关 - 因为我注意到即使流在几天前完成,会话仍保持打开状态,直到索引构建完成(证明 netstats 仍然在索引构建运行的几天内显示一些输出)。我需要有人确认这是否正确,以及我是否可以安全地删除退役节点中的数据文件。

一些附加信息

  1. DSE 4.0.3 (Cassandra 2.0.7)
  2. Vnodes 启用
  3. CentOS 6 x86_64
  4. nodetool statusnodetool gossipinfo 仍将退役节点显示为“LEAVING”

【问题讨论】:

  • 您好,看起来连接在完成流式传输时可能已断开。如果您重新启动节点,它是否仍然显示在nodetool status 中,它的八卦状态显示什么?一般来说,经验法则是将退役的节点留在 gossip 中 3 天,然后再做任何其他事情。您可以执行“暗杀端点”,但只能作为最后的手段,请参阅此 cassandra jira 了解更多信息:issues.apache.org/jira/browse/CASSANDRA-7935
  • @PJ。我也遇到了同样的问题,请问你最后是怎么做的?
  • @SelvamPalanimalai 我只是假设该节点已停用。但是,请谨慎接受这个结论,因为我最终更改为不同的架构,所以我没有彻底测试我的数据在旧架构中是否仍然完整
  • @markc 我不能再回答这个问题了,因为我已经放弃了旧模式
  • @PJ。感谢您的回复!

标签: cassandra datastax-enterprise datastax


【解决方案1】:

我认为您遇到了 2.0 时代存在的众多流式传输错误之一。甚至可能是这个:

https://issues.apache.org/jira/browse/CASSANDRA-8343

如果不是那个,还有其他几个。无论如何,我的主要建议是将此集群更新到 4.8 的最新版本。如果在短期内出于运营原因这不切实际,我至少会推动最新的 4.0。在那个和当前之间确实有很多修复:

https://docs.datastax.com/en/datastax_enterprise/4.0/datastax_enterprise/RNdse40.html

仅 4.0.7 修复列表就令人眼花缭乱!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2021-07-17
    • 2018-09-23
    • 1970-01-01
    相关资源
    最近更新 更多