Cassandra 1.2.x到2.x数据中心重建 [英] Cassandra 1.2.x to 2.x data center rebuild

查看:353
本文介绍了Cassandra 1.2.x到2.x数据中心重建的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从Cassandra 1.2.x升级到2.x.我通常做升级的方式是通过建立一个新的数据中心(这是在EC2,所以没有太大的问题),并使用 nodetool rebuild 将数据移动到新的数据中心。然后将应用程序切换到新的数据中心,修复,然后关闭旧的数据中心。

I'm trying to upgrade from Cassandra 1.2.x to 2.x. The way I normally do upgrades is by bringing up a new data center (this is on EC2, so not much of an issue) and using nodetool rebuild to move the data over to the new data center. Then switch apps over to the new data center, repair, and then shut down the old data center.

但我有一些麻烦,从1.2.15.1到2.0.7.31。在2.x节点上,当我运行 nodetool重建us-east-1-2-15-1 ,而不是像预期的那样启动重建,我得到以下错误。 / p>

However I am having some trouble with this going from 1.2.15.1 to 2.0.7.31. On the 2.x nodes when I run nodetool rebuild us-east-1-2-15-1, instead of starting the rebuild as expected I get the following error.

Exception in thread "main" java.lang.RuntimeException: Error while rebuilding node: Stream failed
        at org.apache.cassandra.service.StorageService.rebuild(StorageService.java:962)
        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.GeneratedMethodAccessor7.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.GeneratedMethodAccessor16.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:744)

这可能是由于不兼容性在1.2.x和2.x之间或者只是在2.x版本中的一个错误我试图使用,但我可以找到没有任何人的现有实例看到这个问题。任何想法?

This could possibly be due to something about an incompatibility between 1.2.x and 2.x or just a bug in the version of 2.x I'm trying to use, but I can find no existing instances of anyone else seeing this issue. Any thoughts?

ETA :我也尝试向现有集群添加新的2.x节点,计划然后慢慢删除1.2.x节点,因为我替换它们,显然是确保不使用任何2.x功能之前所有的1.2.x节点退役。但是,这没有工作,我得到了完全相同的错误。

ETA: I also tried adding new 2.x nodes to the existing cluster, planning to then slowly removing the 1.2.x nodes as I replace them, obviously being sure not to use any 2.x features before all 1.2.x nodes are decommissioned. However, this didn't work and I got exactly the same error.

推荐答案

问题,不支持Cassandra的不同主要版本之间的数据,因此我必须按照文档中描述的升级过程升级现有节点,而不是尝试通过将数据流式传输到新节点来升级。一旦升级完成,我可以,当然,流数据到新的节点,如果我需要,但主要版本需要匹配的节点之间的流正常工作。

The issue, it turns out, is that streaming data between different major versions of Cassandra is not supported, so I must upgrade the nodes in place by following the upgrade procedure described in the documentation rather than trying to upgrade by streaming data to new nodes. Once the upgrade is complete I can, of course, stream the data onto new nodes if I need to, but the major versions need to match for streaming between nodes to work properly.

感谢 Rob Coli 在IRC上直截了当。

Thanks to Rob Coli setting me straight on this on IRC.

这篇关于Cassandra 1.2.x到2.x数据中心重建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆